summaryrefslogtreecommitdiff
path: root/test/Bitcode/blockaddress.ll
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-08-16 01:54:37 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-08-16 01:54:37 +0000
commit1d8c9d95bfc81d438dcfdc8e37fbd720c00e2eca (patch)
treeda52e9959f4f4060590b102872d85a3c7e2b6cd2 /test/Bitcode/blockaddress.ll
parent1e97329f2725fb5b5e88f7be99da07da6cf9fe62 (diff)
BitcodeReader: Only create one basic block for each blockaddress
Block address forward-references are implemented by creating a `BasicBlock` ahead of time that gets inserted in the `Function` when it's eventually encountered. However, if the same blockaddress was used in two separate functions that were parsed *before* the referenced function (and the blockaddress was never used at global scope), two separate basic blocks would get created, one of which would be forgotten creating invalid IR. This commit changes the forward-reference logic to create only one basic block (and always return the same blockaddress). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215805 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Bitcode/blockaddress.ll')
-rw-r--r--test/Bitcode/blockaddress.ll14
1 files changed, 14 insertions, 0 deletions
diff --git a/test/Bitcode/blockaddress.ll b/test/Bitcode/blockaddress.ll
index 305118c83b8..83fae48bf2f 100644
--- a/test/Bitcode/blockaddress.ll
+++ b/test/Bitcode/blockaddress.ll
@@ -44,3 +44,17 @@ here:
end:
ret void
}
+
+; Check a blockaddress taken in two separate functions before the referenced
+; function.
+define i8* @take1() {
+ ret i8* blockaddress(@taken, %bb)
+}
+define i8* @take2() {
+ ret i8* blockaddress(@taken, %bb)
+}
+define void @taken() {
+ unreachable
+bb:
+ unreachable
+}