[demangler] Support for sequence numbers on lifetime extended temporaries.

git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@327227 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/src/cxa_demangle.cpp b/src/cxa_demangle.cpp
index 5c313cb..bc6bbc1 100644
--- a/src/cxa_demangle.cpp
+++ b/src/cxa_demangle.cpp
@@ -4324,6 +4324,8 @@
 //                                     # No <type>
 //                ::= TW <object name> # Thread-local wrapper
 //                ::= TH <object name> # Thread-local initialization
+//                ::= GR <object name> _             # First temporary
+//                ::= GR <object name> <seq-id> _    # Subsequent temporaries
 //      extension ::= TC <first type> <number> _ <second type> # construction vtable for second-in-first
 //      extension ::= GR <object name> # reference temporary for object
 Node *Db::parseSpecialName() {
@@ -4428,11 +4430,17 @@
       return make<SpecialName>("guard variable for ", Name);
     }
     // GR <object name> # reference temporary for object
+    // GR <object name> _             # First temporary
+    // GR <object name> <seq-id> _    # Subsequent temporaries
     case 'R': {
       First += 2;
       Node *Name = parseName();
       if (Name == nullptr)
         return nullptr;
+      size_t Count;
+      bool ParsedSeqId = !parseSeqId(&Count);
+      if (!consumeIf('_') && ParsedSeqId)
+        return nullptr;
       return make<SpecialName>("reference temporary for ", Name);
     }
     }
diff --git a/test/test_demangle.pass.cpp b/test/test_demangle.pass.cpp
index 8e97a7f..2b84c9d 100644
--- a/test/test_demangle.pass.cpp
+++ b/test/test_demangle.pass.cpp
@@ -29722,6 +29722,9 @@
     // Structured bindings:
     {"_ZDC2a12a2E", "'structured-binding'[a1, a2]"},
     {"_ZN2NSDC1x1yEE", "NS::'structured-binding'[x, y]"},
+
+    {"_ZGRDC1x1yE_", "reference temporary for 'structured-binding'[x, y]"},
+    {"_ZGR1bIvE2_", "reference temporary for b<void>"},
 };
 
 const unsigned N = sizeof(cases) / sizeof(cases[0]);