Convert the expression trait evaluation to a static function and

a switch with any default case. This both warns when an enumerator is
missing and asserts if a value sneaks through despite the warning.

While in there fix a bunch of coding style issues with this code.

llvm-svn: 130648
This commit is contained in:
Chandler Carruth 2011-05-01 07:44:20 +00:00
parent b42fb19e9b
commit 20b9bc8638
1 changed files with 19 additions and 20 deletions

View File

@ -2751,7 +2751,6 @@ static bool EvaluateUnaryTypeTrait(Sema &Self, UnaryTypeTrait UTT,
llvm_unreachable("Type trait not covered by switch");
}
ExprResult Sema::BuildUnaryTypeTrait(UnaryTypeTrait UTT,
SourceLocation KWLoc,
TypeSourceInfo *TSInfo,
@ -3023,12 +3022,19 @@ ExprResult Sema::ActOnExpressionTrait(ExpressionTrait ET,
if (!Queried)
return ExprError();
ExprResult Result
= BuildExpressionTrait(ET, KWLoc, Queried, RParen);
ExprResult Result = BuildExpressionTrait(ET, KWLoc, Queried, RParen);
return move(Result);
}
static bool EvaluateExpressionTrait(ExpressionTrait ET, Expr *E) {
switch (ET) {
case ET_IsLValueExpr: return E->isLValue();
case ET_IsRValueExpr: return E->isRValue();
}
llvm_unreachable("Expression trait not covered by switch");
}
ExprResult Sema::BuildExpressionTrait(ExpressionTrait ET,
SourceLocation KWLoc,
Expr *Queried,
@ -3041,17 +3047,10 @@ ExprResult Sema::BuildExpressionTrait(ExpressionTrait ET,
return BuildExpressionTrait(ET, KWLoc, PE.take(), RParen);
}
bool Value = false;
switch (ET) {
default: llvm_unreachable("Unknown or unimplemented expression trait");
case ET_IsLValueExpr: Value = Queried->isLValue(); break;
case ET_IsRValueExpr: Value = Queried->isRValue(); break;
}
bool Value = EvaluateExpressionTrait(ET, Queried);
// C99 6.5.3.4p4: the type (an unsigned integer type) is size_t.
return Owned(
new (Context) ExpressionTraitExpr(
KWLoc, ET, Queried, Value, RParen, Context.BoolTy));
return Owned(new (Context) ExpressionTraitExpr(KWLoc, ET, Queried, Value,
RParen, Context.BoolTy));
}
QualType Sema::CheckPointerToMemberOperands(ExprResult &lex, ExprResult &rex,