[demangler] Support for inheriting constructors.

Fixes PR33223.

git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@325023 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/src/cxa_demangle.cpp b/src/cxa_demangle.cpp
index f2e7d28..c962203 100644
--- a/src/cxa_demangle.cpp
+++ b/src/cxa_demangle.cpp
@@ -2200,10 +2200,15 @@
   }
 
   if (consumeIf('C')) {
+    bool IsInherited = consumeIf('I');
     if (look() != '1' && look() != '2' && look() != '3' && look() != '5')
       return nullptr;
     ++First;
     ParsedCtorDtorCV = true;
+    if (IsInherited) {
+      if (legacyParse<parse_name>() == nullptr)
+        return nullptr;
+    }
     return make<CtorDtorName>(SoFar, false);
   }
 
diff --git a/test/test_demangle.pass.cpp b/test/test_demangle.pass.cpp
index fa4ee41..37c6292 100644
--- a/test/test_demangle.pass.cpp
+++ b/test/test_demangle.pass.cpp
@@ -29690,6 +29690,10 @@
     // Designated init expressions
     {"_ZN15designated_init1fINS_1AEEEvDTtlT_di1adi1bdxLi3EdXLi1ELi4ELi9EEE", "void designated_init::f<designated_init::A>(decltype(designated_init::A{.a.b[3][1 ... 4] = 9}))"},
     {"_Z1fIXtl1Xdi1adi1bdxLi3ELi1EEEE", "f<X{.a.b[3] = 1}>"},
+
+    // Inheriting constructors:
+    {"_ZN1BCI21AEi", "B::B(int)"},
+    {"_ZN1DCI21CIiEET_", "D::D(int)"},
 };
 
 const unsigned N = sizeof(cases) / sizeof(cases[0]);