Fix assert/crash on invalid with __builtin_constant_p conditionals in constant expressions.

llvm-svn: 221942
This commit is contained in:
Richard Smith 2014-11-13 23:03:19 +00:00
parent da59f3de45
commit 98710fc4f5
2 changed files with 7 additions and 1 deletions

View File

@ -8971,7 +8971,11 @@ static bool EvaluateCPlusPlus11IntegralConstantExpr(const ASTContext &Ctx,
if (!E->isCXX11ConstantExpr(Ctx, &Result, Loc))
return false;
assert(Result.isInt() && "pointer cast to int is not an ICE");
if (!Result.isInt()) {
if (Loc) *Loc = E->getExprLoc();
return false;
}
if (Value) *Value = Result.getInt();
return true;
}

View File

@ -95,11 +95,13 @@ namespace TemplateArgumentConversion {
}
namespace CaseStatements {
int x;
void f(int n) {
switch (n) {
case MemberZero().zero: // expected-error {{did you mean to call it with no arguments?}} expected-note {{previous}}
case id(0): // expected-error {{duplicate case value '0'}}
return;
case __builtin_constant_p(true) ? (__SIZE_TYPE__)&x : 0:; // expected-error {{constant}}
}
}
}