Index: libcxxabi/src/demangle/ItaniumDemangle.h =================================================================== --- libcxxabi/src/demangle/ItaniumDemangle.h +++ libcxxabi/src/demangle/ItaniumDemangle.h @@ -3926,7 +3926,8 @@ return nullptr; if (!consumeIf('_')) return nullptr; - return make(Size, Signed); + Result = make(Size, Signed); + break; } // ::= Di # char32_t case 'i': Index: libcxxabi/test/test_demangle.pass.cpp =================================================================== --- libcxxabi/test/test_demangle.pass.cpp +++ libcxxabi/test/test_demangle.pass.cpp @@ -33,6 +33,7 @@ {"_Z1Av", "A()"}, {"_Z1A1B1C", "A(B, C)"}, {"_Z1fDB3_", "f(_BitInt(3))"}, + {"_Z1fDB3_S_", "f(_BitInt(3), _BitInt(3))"}, {"_Z1fDU10_", "f(unsigned _BitInt(10))"}, {"_Z1fIfEvDUstPT__", "void f(unsigned _BitInt(sizeof (float*)))"}, {"_Z1fIiEvDBstPT__", "void f(_BitInt(sizeof (int*)))"}, Index: llvm/include/llvm/Demangle/ItaniumDemangle.h =================================================================== --- llvm/include/llvm/Demangle/ItaniumDemangle.h +++ llvm/include/llvm/Demangle/ItaniumDemangle.h @@ -3926,7 +3926,8 @@ return nullptr; if (!consumeIf('_')) return nullptr; - return make(Size, Signed); + Result = make(Size, Signed); + break; } // ::= Di # char32_t case 'i':