Skip to content

Commit f771604

Browse files
authored
[Clang][NFC] Cleanup UnaryExprOrTypeTraitExpr itanium mangling code (#131764)
Just removing some code duplication. Extracted from #131515
1 parent f406b28 commit f771604

File tree

1 file changed

+21
-41
lines changed

1 file changed

+21
-41
lines changed

clang/lib/AST/ItaniumMangle.cpp

Lines changed: 21 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)