@@ -5327,7 +5327,19 @@ void CXXNameMangler::mangleExpression(const Expr *E, unsigned Arity,
53275327 }
53285328 };
53295329
5330- switch (SAE->getKind ()) {
5330+ auto MangleExtensionBuiltin = [&](const UnaryExprOrTypeTraitExpr *E,
5331+ StringRef Name = {}) {
5332+ if (Name.empty ())
5333+ Name = getTraitSpelling (E->getKind ());
5334+ mangleVendorType (Name);
5335+ if (SAE->isArgumentType ())
5336+ mangleType (SAE->getArgumentType ());
5337+ else
5338+ mangleTemplateArgExpr (SAE->getArgumentExpr ());
5339+ Out << ' E' ;
5340+ };
5341+
5342+ switch (SAE->getKind ()) {
53315343 case UETT_SizeOf:
53325344 Out << ' s' ;
53335345 MangleAlignofSizeofArg ();
@@ -5337,56 +5349,24 @@ void CXXNameMangler::mangleExpression(const Expr *E, unsigned Arity,
53375349 // have acted differently since Clang 8, but were previously mangled the
53385350 // same.)
53395351 if (!isCompatibleWith (LangOptions::ClangABI::Ver11)) {
5340- Out << " u11__alignof__" ;
5341- if (SAE->isArgumentType ())
5342- mangleType (SAE->getArgumentType ());
5343- else
5344- mangleTemplateArgExpr (SAE->getArgumentExpr ());
5345- Out << ' E' ;
5352+ MangleExtensionBuiltin (SAE, " __alignof__" );
53465353 break ;
53475354 }
53485355 [[fallthrough]];
53495356 case UETT_AlignOf:
53505357 Out << ' a' ;
53515358 MangleAlignofSizeofArg ();
53525359 break ;
5360+
5361+ case UETT_VectorElements:
5362+ case UETT_OpenMPRequiredSimdAlign:
5363+ case UETT_VecStep:
5364+ case UETT_PtrAuthTypeDiscriminator:
53535365 case UETT_DataSizeOf: {
5354- DiagnosticsEngine &Diags = Context.getDiags ();
5355- unsigned DiagID =
5356- Diags.getCustomDiagID (DiagnosticsEngine::Error,
5357- " cannot yet mangle __datasizeof expression" );
5358- Diags.Report (DiagID);
5359- return ;
5360- }
5361- case UETT_PtrAuthTypeDiscriminator: {
5362- DiagnosticsEngine &Diags = Context.getDiags ();
5363- unsigned DiagID = Diags.getCustomDiagID (
5364- DiagnosticsEngine::Error,
5365- " cannot yet mangle __builtin_ptrauth_type_discriminator expression" );
5366- Diags.Report (E->getExprLoc (), DiagID);
5367- return ;
5368- }
5369- case UETT_VecStep: {
5370- DiagnosticsEngine &Diags = Context.getDiags ();
5371- unsigned DiagID = Diags.getCustomDiagID (DiagnosticsEngine::Error,
5372- " cannot yet mangle vec_step expression" );
5373- Diags.Report (DiagID);
5374- return ;
5375- }
5376- case UETT_OpenMPRequiredSimdAlign: {
5377- DiagnosticsEngine &Diags = Context.getDiags ();
5378- unsigned DiagID = Diags.getCustomDiagID (
5379- DiagnosticsEngine::Error,
5380- " cannot yet mangle __builtin_omp_required_simd_align expression" );
5381- Diags.Report (DiagID);
5382- return ;
5383- }
5384- case UETT_VectorElements: {
53855366 DiagnosticsEngine &Diags = Context.getDiags ();
53865367 unsigned DiagID = Diags.getCustomDiagID (
5387- DiagnosticsEngine::Error,
5388- " cannot yet mangle __builtin_vectorelements expression" );
5389- Diags.Report (DiagID);
5368+ DiagnosticsEngine::Error, " cannot yet mangle %0 expression" );
5369+ Diags.Report (E->getExprLoc (), DiagID) << getTraitSpelling (SAE->getKind ());
53905370 return ;
53915371 }
53925372 }
0 commit comments