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 @@ -452,6 +452,24 @@ print(")"); break; } + case 'R': + print("&"); + // FIXME demangle []. + demangleType(); + break; + case 'Q': + print("&mut "); + // FIXME demangle []. + demangleType(); + break; + case 'P': + print("*const "); + demangleType(); + break; + case 'O': + print("*mut "); + demangleType(); + 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 @@ -178,6 +178,18 @@ CHECK: types::<(_, _, _)> _RIC5typesTpppEE +CHECK: types::<&u8> + _RIC5typesRhE + +CHECK: types::<&mut u8> + _RIC5typesQhE + +CHECK: types::<*const u8> + _RIC5typesPhE + +CHECK: types::<*mut u8> + _RIC5typesOhE + ; Integer constants. Test value demangling. CHECK: integer::<0>