diff options
-rw-r--r-- | clang/lib/AST/ExprConstant.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index 9eeaa868a59..28440f40f51 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -207,6 +207,7 @@ public: APValue VisitBinaryOperator(const BinaryOperator *E); APValue VisitCastExpr(const CastExpr* E); + APValue VisitCallExpr(CallExpr *E); APValue VisitUnaryOperator(const UnaryOperator *E); APValue VisitObjCStringLiteral(ObjCStringLiteral *E) { return APValue(E, 0); } @@ -266,7 +267,6 @@ APValue PointerExprEvaluator::VisitUnaryOperator(const UnaryOperator *E) { return APValue(); } - APValue PointerExprEvaluator::VisitCastExpr(const CastExpr* E) { const Expr* SubExpr = E->getSubExpr(); @@ -299,6 +299,15 @@ APValue PointerExprEvaluator::VisitCastExpr(const CastExpr* E) { return APValue(); } +APValue PointerExprEvaluator::VisitCallExpr(CallExpr *E) +{ + switch (E->isBuiltinCall()) { + default: return APValue(); + case Builtin::BI__builtin___CFStringMakeConstantString: + return APValue(E, 0); + } +} + APValue PointerExprEvaluator::VisitConditionalOperator(ConditionalOperator *E) { bool BoolResult; if (!HandleConversionToBool(E->getCond(), BoolResult, Info)) |