r238758 - Fix PR21945: Crash in constant evaluator.

Jonathan Roelofs jonathan at codesourcery.com
Mon Jun 1 09:23:09 PDT 2015


Author: jroelofs
Date: Mon Jun  1 11:23:08 2015
New Revision: 238758

URL: http://llvm.org/viewvc/llvm-project?rev=238758&view=rev
Log:
Fix PR21945: Crash in constant evaluator.

Patch by Косов Евгений!

Modified:
    cfe/trunk/lib/AST/ExprConstant.cpp
    cfe/trunk/test/Sema/const-eval.c

Modified: cfe/trunk/lib/AST/ExprConstant.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprConstant.cpp?rev=238758&r1=238757&r2=238758&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ExprConstant.cpp (original)
+++ cfe/trunk/lib/AST/ExprConstant.cpp Mon Jun  1 11:23:08 2015
@@ -4276,6 +4276,9 @@ public:
 
     BlockScopeRAII Scope(Info);
     const CompoundStmt *CS = E->getSubStmt();
+    if (CS->body_empty())
+      return true;
+
     for (CompoundStmt::const_body_iterator BI = CS->body_begin(),
                                            BE = CS->body_end();
          /**/; ++BI) {
@@ -4301,6 +4304,8 @@ public:
         return false;
       }
     }
+
+    llvm_unreachable("Return from function from the loop above.");
   }
 
   /// Visit a value which is evaluated, but whose value is ignored.

Modified: cfe/trunk/test/Sema/const-eval.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/const-eval.c?rev=238758&r1=238757&r2=238758&view=diff
==============================================================================
--- cfe/trunk/test/Sema/const-eval.c (original)
+++ cfe/trunk/test/Sema/const-eval.c Mon Jun  1 11:23:08 2015
@@ -134,3 +134,6 @@ EVAL_EXPR(50, &Test50 < (struct Test50S*
 
 // <rdar://problem/11874571>
 EVAL_EXPR(51, 0 != (float)1e99)
+
+// PR21945
+void PR21945() { int i = (({}), 0l); }






More information about the cfe-commits mailing list