forked from OSchip/llvm-project
Add support for * (unary dereference) operator to ExprConstant.
llvm-svn: 65105
This commit is contained in:
parent
63e03cbe8c
commit
0b8337c30b
|
@ -157,6 +157,7 @@ public:
|
|||
APValue VisitMemberExpr(MemberExpr *E);
|
||||
APValue VisitStringLiteral(StringLiteral *E) { return APValue(E, 0); }
|
||||
APValue VisitArraySubscriptExpr(ArraySubscriptExpr *E);
|
||||
APValue VisitUnaryDeref(UnaryOperator *E);
|
||||
};
|
||||
} // end anonymous namespace
|
||||
|
||||
|
@ -234,6 +235,14 @@ APValue LValueExprEvaluator::VisitArraySubscriptExpr(ArraySubscriptExpr *E)
|
|||
return Result;
|
||||
}
|
||||
|
||||
APValue LValueExprEvaluator::VisitUnaryDeref(UnaryOperator *E)
|
||||
{
|
||||
APValue Result;
|
||||
if (!EvaluatePointer(E->getSubExpr(), Result, Info))
|
||||
return APValue();
|
||||
return Result;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Pointer Evaluation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -38,3 +38,5 @@ EVAL_EXPR(18, ((int)((void*)10 + 10)) == 20 ? 1 : -1);
|
|||
struct s {
|
||||
int a[(int)-1.0f]; // expected-error {{array size is negative}}
|
||||
};
|
||||
|
||||
EVAL_EXPR(19, ((int)&*(char*)10 == 10 ? 1 : -1));
|
||||
|
|
Loading…
Reference in New Issue