<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi Sebastian,<div>The test you added here is failing on one of our internal buildbots.</div><div><br></div><div>Here's the exact errors:</div><div><pre style="font-family: 'Courier New', courier, monotype; "><span class="stdout" style="font-family: 'Courier New', courier, monotype; color: black; ">******************** TEST 'Clang :: CodeGenCXX/new-array-init-exceptions.cpp' FAILED ********************Script:
--
/Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin10-R/clang-build/Release/bin/clang -cc1 -internal-isystem /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin10-R/clang-build/Release/bin/../lib/clang/3.1/include -std=c++11 -triple i386-unknown-unknown -fexceptions -fcxx-exceptions /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin10-R/clang.src/test/CodeGenCXX/new-array-init-exceptions.cpp -emit-llvm -o - | FileCheck /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin10-R/clang.src/test/CodeGenCXX/new-array-init-exceptions.cpp
--
Exit Code: 1
Command Output (stderr):
--
/Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin10-R/clang.src/test/CodeGenCXX/new-array-init-exceptions.cpp:20:12: error: expected string not found in input
 // CHECK: [[LPAD]]:
           ^
<stdin>:56:1: note: scanning from here
; <label>:27 ; preds = %25
^
<stdin>:56:1: note: with variable "LPAD" equal to "31"
; <label>:27 ; preds = %25
^
<stdin>:56:10: note: possible intended match here
; <label>:27 ; preds = %25
         ^
--

********************</span></pre></div><div>Chad</div><div><br></div><div><br><div><div>On Feb 22, 2012, at 9:37 AM, Sebastian Redl wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Author: cornedbee<br>Date: Wed Feb 22 11:37:59 2012<br>New Revision: 151172<br><br>URL: <a href="http://llvm.org/viewvc/llvm-project?rev=151172&view=rev">http://llvm.org/viewvc/llvm-project?rev=151172&view=rev</a><br>Log:<br>Unwind path cleanup for array new list initializers.<br><br>Added:<br>    cfe/trunk/test/CodeGenCXX/new-array-init-exceptions.cpp<br>Modified:<br>    cfe/trunk/lib/CodeGen/CGExprCXX.cpp<br><br>Modified: cfe/trunk/lib/CodeGen/CGExprCXX.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprCXX.cpp?rev=151172&r1=151171&r2=151172&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprCXX.cpp?rev=151172&r1=151171&r2=151172&view=diff</a><br>==============================================================================<br>--- cfe/trunk/lib/CodeGen/CGExprCXX.cpp (original)<br>+++ cfe/trunk/lib/CodeGen/CGExprCXX.cpp Wed Feb 22 11:37:59 2012<br>@@ -804,12 +804,32 @@<br>   unsigned initializerElements = 0;<br><br>   const Expr *Init = E->getInitializer();<br>+  llvm::AllocaInst *endOfInit = 0;<br>+  QualType::DestructionKind dtorKind = elementType.isDestructedType();<br>+  EHScopeStack::stable_iterator cleanup;<br>+  llvm::Instruction *cleanupDominator = 0;<br>   // If the initializer is an initializer list, first do the explicit elements.<br>   if (const InitListExpr *ILE = dyn_cast<InitListExpr>(Init)) {<br>     initializerElements = ILE->getNumInits();<br>-    QualType elementType = E->getAllocatedType();<br>-    // FIXME: exception-safety for the explicit initializers<br>+<br>+    // Enter a partial-destruction cleanup if necessary.<br>+    if (needsEHCleanup(dtorKind)) {<br>+      // In principle we could tell the cleanup where we are more<br>+      // directly, but the control flow can get so varied here that it<br>+      // would actually be quite complex.  Therefore we go through an<br>+      // alloca.<br>+      endOfInit = CreateTempAlloca(beginPtr->getType(), "array.endOfInit");<br>+      cleanupDominator = Builder.CreateStore(beginPtr, endOfInit);<br>+      pushIrregularPartialArrayCleanup(beginPtr, endOfInit, elementType,<br>+                                       getDestroyer(dtorKind));<br>+      cleanup = EHStack.stable_begin();<br>+    }<br>+<br>     for (unsigned i = 0, e = ILE->getNumInits(); i != e; ++i) {<br>+      // Tell the cleanup that it needs to destroy up to this<br>+      // element.  TODO: some of these stores can be trivially<br>+      // observed to be unnecessary.<br>+      if (endOfInit) Builder.CreateStore(explicitPtr, endOfInit);<br>       StoreAnyExprIntoOneUnit(*this, ILE->getInit(i), elementType, explicitPtr);<br>       explicitPtr =Builder.CreateConstGEP1_32(explicitPtr, 1, "array.exp.next");<br>     }<br>@@ -825,7 +845,12 @@<br>   // anything left to initialize.<br>   if (llvm::ConstantInt *constNum = dyn_cast<llvm::ConstantInt>(numElements)) {<br>     // If all elements have already been initialized, skip the whole loop.<br>-    if (constNum->getZExtValue() <= initializerElements) return;<br>+    if (constNum->getZExtValue() <= initializerElements) {<br>+      // If there was a cleanup, deactivate it.<br>+      if (cleanupDominator)<br>+        DeactivateCleanupBlock(cleanup, cleanupDominator);;<br>+      return;<br>+    }<br>   } else {<br>     llvm::BasicBlock *nonEmptyBB = createBasicBlock("new.loop.nonempty");<br>     llvm::Value *isEmpty = Builder.CreateICmpEQ(explicitPtr, endPtr,<br>@@ -845,11 +870,11 @@<br>     Builder.CreatePHI(explicitPtr->getType(), 2, "array.cur");<br>   curPtr->addIncoming(explicitPtr, entryBB);<br><br>+  // Store the new cleanup position for irregular cleanups.<br>+  if (endOfInit) Builder.CreateStore(curPtr, endOfInit);<br>+<br>   // Enter a partial-destruction cleanup if necessary.<br>-  QualType::DestructionKind dtorKind = elementType.isDestructedType();<br>-  EHScopeStack::stable_iterator cleanup;<br>-  llvm::Instruction *cleanupDominator = 0;<br>-  if (needsEHCleanup(dtorKind)) {<br>+  if (!cleanupDominator && needsEHCleanup(dtorKind)) {<br>     pushRegularPartialArrayCleanup(beginPtr, curPtr, elementType,<br>                                    getDestroyer(dtorKind));<br>     cleanup = EHStack.stable_begin();<br><br>Added: cfe/trunk/test/CodeGenCXX/new-array-init-exceptions.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/new-array-init-exceptions.cpp?rev=151172&view=auto">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/new-array-init-exceptions.cpp?rev=151172&view=auto</a><br>==============================================================================<br>--- cfe/trunk/test/CodeGenCXX/new-array-init-exceptions.cpp (added)<br>+++ cfe/trunk/test/CodeGenCXX/new-array-init-exceptions.cpp Wed Feb 22 11:37:59 2012<br>@@ -0,0 +1,40 @@<br>+// RUN: %clang_cc1 -std=c++11 -triple i386-unknown-unknown -fexceptions -fcxx-exceptions %s -emit-llvm -o - | FileCheck %s<br>+<br>+struct Throws {<br>+  Throws(int);<br>+  Throws();<br>+  ~Throws();<br>+};<br>+<br>+// CHECK: define void @_Z7cleanupi<br>+void cleanup(int n) {<br>+  // CHECK: invoke void @_ZN6ThrowsC1Ei<br>+  // CHECK-NEXT: to label %{{[^ ]+}} unwind label %[[LPAD:[^ ]+]]<br>+  // CHECK: invoke void @_ZN6ThrowsC1Ei<br>+  // CHECK-NEXT: to label %{{[^ ]+}} unwind label %[[LPAD]]<br>+  // CHECK: invoke void @_ZN6ThrowsC1Ei<br>+  // CHECK-NEXT: to label %{{[^ ]+}} unwind label %[[LPAD]]<br>+  // CHECK: invoke void @_ZN6ThrowsC1Ev<br>+  // CHECK-NEXT: to label %{{[^ ]+}} unwind label %[[LPAD]]<br>+  new Throws[n] { 1, 2, 3 };<br>+  // CHECK: [[LPAD]]:<br>+  // CHECK-NEXT: landingpad<br>+  // CHECK: call void @_ZN6ThrowsD1Ev<br>+  // CHECK: call void @_ZdaPv<br>+}<br>+<br>+<br>+// CHECK: define void @_Z7cleanupv<br>+void cleanup() {<br>+  // CHECK: invoke void @_ZN6ThrowsC1Ei<br>+  // CHECK-NEXT: to label %{{[^ ]+}} unwind label %[[LPAD2:[^ ]+]]<br>+  // CHECK: invoke void @_ZN6ThrowsC1Ei<br>+  // CHECK-NEXT: to label %{{[^ ]+}} unwind label %[[LPAD2]]<br>+  // CHECK: invoke void @_ZN6ThrowsC1Ei<br>+  // CHECK-NEXT: to label %{{[^ ]+}} unwind label %[[LPAD2]]<br>+  new Throws[3] { 1, 2, 3 };<br>+  // CHECK: [[LPAD2]]:<br>+  // CHECK-NEXT: landingpad<br>+  // CHECK: call void @_ZN6ThrowsD1Ev<br>+  // CHECK: call void @_ZdaPv<br>+}<br><br><br>_______________________________________________<br>cfe-commits mailing list<br><a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits<br></div></blockquote></div><br></div></body></html>