From e4fa6c95aca1555167f867a0205cbc99caa2ce09 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20Mi=C4=85sko?= <tomasz.miasko@gmail.com>
Date: Sat, 22 May 2021 11:36:53 +0200
Subject: [PATCH] [Demangle][Rust] Parse references

Reviewed By: dblaikie

Part of https://reviews.llvm.org/D102580
---
 llvm/lib/Demangle/RustDemangle.cpp | 10 ++++++++++
 llvm/test/Demangle/rust.test       |  6 ++++++
 2 files changed, 16 insertions(+)

diff --git a/llvm/lib/Demangle/RustDemangle.cpp b/llvm/lib/Demangle/RustDemangle.cpp
index 9a4180feb227..8d43b6efcab0 100644
--- a/llvm/lib/Demangle/RustDemangle.cpp
+++ b/llvm/lib/Demangle/RustDemangle.cpp
@@ -454,6 +454,16 @@ void Demangler::demangleType() {
     print(")");
     break;
   }
+  case 'R':
+    print("&");
+    // FIXME demangle [<lifetime>].
+    demangleType();
+    break;
+  case 'Q':
+    print("&mut ");
+    // FIXME demangle [<lifetime>].
+    demangleType();
+    break;
   case 'P':
     print("*const ");
     demangleType();
diff --git a/llvm/test/Demangle/rust.test b/llvm/test/Demangle/rust.test
index 46eea4dfdc42..0634f451099b 100644
--- a/llvm/test/Demangle/rust.test
+++ b/llvm/test/Demangle/rust.test
@@ -175,6 +175,12 @@ CHECK: types::<(_, _)>
 CHECK: types::<(_, _, _)>
        _RIC5typesTpppEE
 
+CHECK: types::<&_>
+       _RIC5typesRpE
+
+CHECK: types::<&mut _>
+       _RIC5typesQpE
+
 CHECK: types::<*const _>
        _RIC5typesPpE