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 @@ -454,6 +454,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; 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 @@ -175,6 +175,18 @@ CHECK: types::<(_, _, _)> _RIC5typesTpppEE +CHECK: types::<&_> + _RIC5typesRpE + +CHECK: types::<&mut _> + _RIC5typesQpE + +CHECK: types::<*const _> + _RIC5typesPpE + +CHECK: types::<*mut _> + _RIC5typesOpE + ; Integer constants. Test value demangling. CHECK: integer::<0>