]> granicus.if.org Git - clang/commitdiff
Ensure that the NRVO flag has some block to insert into. Fixes PR9178!
authorNick Lewycky <nicholas@mxc.ca>
Wed, 16 Feb 2011 23:59:08 +0000 (23:59 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Wed, 16 Feb 2011 23:59:08 +0000 (23:59 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125694 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGDecl.cpp
test/CodeGenCXX/nrvo-noreturn.cc [new file with mode: 0644]

index c31840a78e2a8f4e824f1c191158b1d993501eef..129416fa07f90565b1370f80f3f51086c54f11d0 100644 (file)
@@ -648,7 +648,8 @@ void CodeGenFunction::EmitAutoVarDecl(const VarDecl &D,
             // to this variable. Set it to zero to indicate that NRVO was not 
             // applied.
             llvm::Value *Zero = Builder.getFalse();
-            NRVOFlag = CreateTempAlloca(Zero->getType(), "nrvo");            
+            NRVOFlag = CreateTempAlloca(Zero->getType(), "nrvo");
+            EnsureInsertPoint();
             Builder.CreateStore(Zero, NRVOFlag);
             
             // Record the NRVO flag for this variable.
diff --git a/test/CodeGenCXX/nrvo-noreturn.cc b/test/CodeGenCXX/nrvo-noreturn.cc
new file mode 100644 (file)
index 0000000..a8259ca
--- /dev/null
@@ -0,0 +1,17 @@
+// RUN: %clang_cc1 -emit-llvm-only %s
+// PR9178
+
+void abort() __attribute__((__noreturn__));
+struct CoinModelLink {
+  CoinModelLink();
+  ~CoinModelLink();
+};
+class CoinModel {
+  CoinModelLink firstInQuadraticColumn();
+};
+CoinModelLink CoinModel::firstInQuadraticColumn() {
+  abort();
+  CoinModelLink x;
+  return x;
+}
+