@@ -5327,7 +5327,19 @@ void CXXNameMangler::mangleExpression(const Expr *E, unsigned Arity,
5327
5327
}
5328
5328
};
5329
5329
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 ()) {
5331
5343
case UETT_SizeOf:
5332
5344
Out << ' s' ;
5333
5345
MangleAlignofSizeofArg ();
@@ -5337,56 +5349,24 @@ void CXXNameMangler::mangleExpression(const Expr *E, unsigned Arity,
5337
5349
// have acted differently since Clang 8, but were previously mangled the
5338
5350
// same.)
5339
5351
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__" );
5346
5353
break ;
5347
5354
}
5348
5355
[[fallthrough]];
5349
5356
case UETT_AlignOf:
5350
5357
Out << ' a' ;
5351
5358
MangleAlignofSizeofArg ();
5352
5359
break ;
5360
+
5361
+ case UETT_VectorElements:
5362
+ case UETT_OpenMPRequiredSimdAlign:
5363
+ case UETT_VecStep:
5364
+ case UETT_PtrAuthTypeDiscriminator:
5353
5365
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: {
5385
5366
DiagnosticsEngine &Diags = Context.getDiags ();
5386
5367
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 ());
5390
5370
return ;
5391
5371
}
5392
5372
}
0 commit comments