diff --git a/llvm/lib/Demangle/RustDemangle.cpp b/llvm/lib/Demangle/RustDemangle.cpp
--- a/llvm/lib/Demangle/RustDemangle.cpp
+++ b/llvm/lib/Demangle/RustDemangle.cpp
@@ -441,6 +441,19 @@
     demangleType();
     print("]");
     break;
+  case 'T': {
+    print("(");
+    size_t I = 0;
+    for (; !Error && !consumeIf('E'); ++I) {
+      if (I > 0)
+        print(", ");
+      demangleType();
+    }
+    if (I == 1)
+      print(",");
+    print(")");
+    break;
+  }
   default:
     Position = Start;
     demanglePath(InType::Yes);
diff --git a/llvm/test/Demangle/rust.test b/llvm/test/Demangle/rust.test
--- a/llvm/test/Demangle/rust.test
+++ b/llvm/test/Demangle/rust.test
@@ -163,6 +163,18 @@
 CHECK: types::<[_]>
        _RIC5typesSpE
 
+CHECK: types::<()>
+       _RIC5typesTEE
+
+CHECK: types::<(_,)>
+       _RIC5typesTpEE
+
+CHECK: types::<(_, _)>
+       _RIC5typesTppEE
+
+CHECK: types::<(_, _, _)>
+       _RIC5typesTpppEE
+
 ; Integer constants. Test value demangling.
 
 CHECK: integer::<0>