forked from OSchip/llvm-project
Move expression mangling in the microsoft mangler to its own function.
This matches what's done in ItaniumMangle and makes it a bit easier to implement mangling for more expressions. Also use the slightly nicer "not yet implemented" error message from there. No functionality change (except for the different error message). llvm-svn: 165093
This commit is contained in:
parent
85e7a40232
commit
a682681058
|
@ -96,6 +96,7 @@ private:
|
|||
void mangleFunctionClass(const FunctionDecl *FD);
|
||||
void mangleCallingConvention(const FunctionType *T, bool IsInstMethod = false);
|
||||
void mangleIntegerLiteral(QualType T, const llvm::APSInt &Number);
|
||||
void mangleExpression(const Expr *E);
|
||||
void mangleThrowSpecification(const FunctionProtoType *T);
|
||||
|
||||
void mangleTemplateArgs(
|
||||
|
@ -784,6 +785,23 @@ MicrosoftCXXNameMangler::mangleIntegerLiteral(QualType T,
|
|||
mangleNumber(Value);
|
||||
}
|
||||
|
||||
void
|
||||
MicrosoftCXXNameMangler::mangleExpression(const Expr *E) {
|
||||
// See if this is a constant expression.
|
||||
llvm::APSInt Value;
|
||||
if (E->isIntegerConstantExpr(Value, Context.getASTContext())) {
|
||||
mangleIntegerLiteral(E->getType(), Value);
|
||||
return;
|
||||
}
|
||||
|
||||
// As bad as this diagnostic is, it's better than crashing.
|
||||
DiagnosticsEngine &Diags = Context.getDiags();
|
||||
unsigned DiagID = Diags.getCustomDiagID(DiagnosticsEngine::Error,
|
||||
"cannot yet mangle expression type %0");
|
||||
Diags.Report(E->getExprLoc(), DiagID)
|
||||
<< E->getStmtClassName() << E->getSourceRange();
|
||||
}
|
||||
|
||||
void
|
||||
MicrosoftCXXNameMangler::mangleTemplateArgs(
|
||||
const SmallVectorImpl<TemplateArgumentLoc> &TemplateArgs) {
|
||||
|
@ -801,16 +819,9 @@ MicrosoftCXXNameMangler::mangleTemplateArgs(
|
|||
case TemplateArgument::Integral:
|
||||
mangleIntegerLiteral(TA.getIntegralType(), TA.getAsIntegral());
|
||||
break;
|
||||
case TemplateArgument::Expression: {
|
||||
// See if this is a constant expression.
|
||||
Expr *TAE = TA.getAsExpr();
|
||||
llvm::APSInt Value;
|
||||
if (TAE->isIntegerConstantExpr(Value, Context.getASTContext())) {
|
||||
mangleIntegerLiteral(TAE->getType(), Value);
|
||||
break;
|
||||
}
|
||||
/* fallthrough */
|
||||
}
|
||||
case TemplateArgument::Expression:
|
||||
mangleExpression(TA.getAsExpr());
|
||||
break;
|
||||
case TemplateArgument::Template:
|
||||
case TemplateArgument::TemplateExpansion:
|
||||
case TemplateArgument::Declaration:
|
||||
|
|
Loading…
Reference in New Issue