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 @@ -439,6 +439,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; + } case 'C': case 'M': case 'X': 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 @@ -166,6 +166,18 @@ CHECK: types::<[u8]> _RIC5typesShE +CHECK: types::<()> + _RIC5typesTEE + +CHECK: types::<(_,)> + _RIC5typesTpEE + +CHECK: types::<(_, _)> + _RIC5typesTppEE + +CHECK: types::<(_, _, _)> + _RIC5typesTpppEE + ; Integer constants. Test value demangling. CHECK: integer::<0>