From: Argyrios Kyrtzidis Date: Fri, 9 Dec 2011 02:44:48 +0000 (+0000) Subject: In ExprEvaluatorBase::VisitOpaqueValueExpr() add a sanity check to avoid X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=42786839cff1ccbe4d883b81d01846c5d774ffc6;p=clang In ExprEvaluatorBase::VisitOpaqueValueExpr() add a sanity check to avoid infinite recursion due to bad OpaqueValueExpr. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146237 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/ExprConstant.cpp b/lib/AST/ExprConstant.cpp index cbb75db255..c095f2166d 100644 --- a/lib/AST/ExprConstant.cpp +++ b/lib/AST/ExprConstant.cpp @@ -1557,9 +1557,16 @@ public: RetTy VisitOpaqueValueExpr(const OpaqueValueExpr *E) { const CCValue *Value = Info.getOpaqueValue(E); - if (!Value) - return (E->getSourceExpr() ? StmtVisitorTy::Visit(E->getSourceExpr()) - : DerivedError(E)); + if (!Value) { + const Expr *Source = E->getSourceExpr(); + if (!Source) + return DerivedError(E); + if (Source == E) { // sanity checking. + assert(0 && "OpaqueValueExpr recursively refers to itself"); + return DerivedError(E); + } + return StmtVisitorTy::Visit(Source); + } return DerivedSuccess(*Value, E); }