Add support for * (unary dereference) operator to ExprConstant.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65105 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eli Friedman 2009-02-20 01:57:15 +00:00
Родитель a805135a16
Коммит e8761c8fe2
2 изменённых файлов: 11 добавлений и 0 удалений

Просмотреть файл

@ -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));