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>