[cfe-commits] r88767 - in /cfe/trunk: lib/CodeGen/CGExprConstant.cpp test/CodeGenCXX/static-init-2.cpp

Eli Friedman eli.friedman at gmail.com
Sat Nov 14 00:51:34 PST 2009


Author: efriedma
Date: Sat Nov 14 02:51:33 2009
New Revision: 88767

URL: http://llvm.org/viewvc/llvm-project?rev=88767&view=rev
Log:
Avoid assert-crash in a case where the expression passed to EmitConstantExpr
legitimately has side-effects (and needs to be generated as a non-constant).


Added:
    cfe/trunk/test/CodeGenCXX/static-init-2.cpp
Modified:
    cfe/trunk/lib/CodeGen/CGExprConstant.cpp

Modified: cfe/trunk/lib/CodeGen/CGExprConstant.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprConstant.cpp?rev=88767&r1=88766&r2=88767&view=diff

==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprConstant.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprConstant.cpp Sat Nov 14 02:51:33 2009
@@ -821,9 +821,7 @@
   else
     Success = E->Evaluate(Result, Context);
 
-  if (Success) {
-    assert(!Result.HasSideEffects &&
-           "Constant expr should not have any side effects!");
+  if (Success && !Result.HasSideEffects) {
     switch (Result.Val.getKind()) {
     case APValue::Uninitialized:
       assert(0 && "Constant expressions should be initialized.");

Added: cfe/trunk/test/CodeGenCXX/static-init-2.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/static-init-2.cpp?rev=88767&view=auto

==============================================================================
--- cfe/trunk/test/CodeGenCXX/static-init-2.cpp (added)
+++ cfe/trunk/test/CodeGenCXX/static-init-2.cpp Sat Nov 14 02:51:33 2009
@@ -0,0 +1,6 @@
+// RUN: clang-cc -emit-llvm-only -verify %s
+
+// Make sure we don't crash generating y; its value is constant, but the
+// initializer has side effects, so EmitConstantExpr should fail.
+int x();
+int y = x() && 0;





More information about the cfe-commits mailing list