forked from OSchip/llvm-project
The address of a variable is only constant if the variable has global storage.
llvm-svn: 59939
This commit is contained in:
parent
4c76e93507
commit
a42ee44aab
|
|
@ -121,7 +121,7 @@ public:
|
|||
}
|
||||
|
||||
APValue VisitParenExpr(ParenExpr *E) { return Visit(E->getSubExpr()); }
|
||||
APValue VisitDeclRefExpr(DeclRefExpr *E) { return APValue(E, 0); }
|
||||
APValue VisitDeclRefExpr(DeclRefExpr *E);
|
||||
APValue VisitPredefinedExpr(PredefinedExpr *E) { return APValue(E, 0); }
|
||||
APValue VisitCompoundLiteralExpr(CompoundLiteralExpr *E);
|
||||
APValue VisitMemberExpr(MemberExpr *E);
|
||||
|
|
@ -135,6 +135,14 @@ static bool EvaluateLValue(const Expr* E, APValue& Result, EvalInfo &Info) {
|
|||
return Result.isLValue();
|
||||
}
|
||||
|
||||
APValue LValueExprEvaluator::VisitDeclRefExpr(DeclRefExpr *E)
|
||||
{
|
||||
if (!E->hasGlobalStorage())
|
||||
return APValue();
|
||||
|
||||
return APValue(E, 0);
|
||||
}
|
||||
|
||||
APValue LValueExprEvaluator::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
|
||||
if (E->isFileScope())
|
||||
return APValue(E, 0);
|
||||
|
|
|
|||
|
|
@ -20,3 +20,9 @@ EVAL_EXPR(13, x || 3.0)
|
|||
|
||||
unsigned int l_19 = 1;
|
||||
EVAL_EXPR(14, (1 ^ l_19) && 1); // expected-error {{fields must have a constant size}}
|
||||
|
||||
void f()
|
||||
{
|
||||
int a;
|
||||
EVAL_EXPR(15, (_Bool)&a); // expected-error {{fields must have a constant size}}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue