[llvm-commits] [llvm] r131016 - in /llvm/trunk: lib/Bitcode/Writer/BitcodeWriter.cpp test/Bitcode/blockaddress.ll

Nick Lewycky nicholas at mxc.ca
Fri May 6 14:09:44 PDT 2011


Author: nicholas
Date: Fri May  6 16:09:44 2011
New Revision: 131016

URL: http://llvm.org/viewvc/llvm-project?rev=131016&view=rev
Log:
It's valid to take the blockaddress of a different function, so remove this
assert in the bitcode writer. No change needed because the ValueEnumerator holds
a whole-module numbering anyhow. Fixes PR9857!

Added:
    llvm/trunk/test/Bitcode/blockaddress.ll
Modified:
    llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp

Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=131016&r1=131015&r2=131016&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original)
+++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Fri May  6 16:09:44 2011
@@ -871,8 +871,6 @@
         break;
       }
     } else if (const BlockAddress *BA = dyn_cast<BlockAddress>(C)) {
-      assert(BA->getFunction() == BA->getBasicBlock()->getParent() &&
-             "Malformed blockaddress");
       Code = bitc::CST_CODE_BLOCKADDRESS;
       Record.push_back(VE.getTypeID(BA->getFunction()->getType()));
       Record.push_back(VE.getValueID(BA->getFunction()));

Added: llvm/trunk/test/Bitcode/blockaddress.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/blockaddress.ll?rev=131016&view=auto
==============================================================================
--- llvm/trunk/test/Bitcode/blockaddress.ll (added)
+++ llvm/trunk/test/Bitcode/blockaddress.ll Fri May  6 16:09:44 2011
@@ -0,0 +1,30 @@
+; RUN: llvm-as < %s | llvm-dis | FileCheck %s
+; PR9857
+
+define void @f(i8** nocapture %ptr1) {
+; CHECK: define void @f
+entry:
+  br label %here.i
+
+here.i:
+  store i8* blockaddress(@doit, %here), i8** %ptr1, align 8
+; CHECK: blockaddress(@doit, %here)
+  br label %doit.exit
+
+doit.exit:
+  ret void
+}
+
+define void @doit(i8** nocapture %pptr) {
+; CHECK: define void @doit
+entry:
+  br label %here
+
+here:
+  store i8* blockaddress(@doit, %here), i8** %pptr, align 8
+; CHECK: blockaddress(@doit, %here)
+  br label %end
+
+end:
+  ret void
+}





More information about the llvm-commits mailing list