================ @@ -7326,11 +7326,13 @@ void ItaniumMangleContextImpl::mangleCXXCtorVTable(const CXXRecordDecl *RD, raw_ostream &Out) { // <special-name> ::= TC <type> <offset number> _ <base type> CXXNameMangler Mangler(*this, Out); + QualType RDType = getASTContext().getRecordType(RD); + QualType TypeType = getASTContext().getRecordType(Type); Mangler.getStream() << "_ZTC"; - Mangler.mangleNameOrStandardSubstitution(RD); + Mangler.mangleType(RDType); ---------------- mizvekov wrote:
The only difference here is whether we perform / add a substitution for RD. We only ever see a problem for `mangleCXXCtorVTable` because it's the only user of `mangleNameOrStandardSubstitution` which mangles anything at all after a call to that function. I can't find this production in the ItaniumABI docs, but if the comment is right, I think performing this substitution is correct. I'd prefer we fix `mangleNameOrStandardSubstitution` itself. We could rename it to `mangleCXXRecordDecl`, have it take a CXXRecordDecl*, and handle the substitutions there. This would avoid the same trap in a potential future user. CC @rjmccall @zygoloid https://github.com/llvm/llvm-project/pull/109970 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits