зеркало из https://github.com/microsoft/clang-1.git
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:
Родитель
a805135a16
Коммит
e8761c8fe2
|
@ -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));
|
||||
|
|
Загрузка…
Ссылка в новой задаче