BitcodeReader: Only create one basic block for each blockaddress
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Sat, 16 Aug 2014 01:54:37 +0000 (01:54 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Sat, 16 Aug 2014 01:54:37 +0000 (01:54 +0000)
commit1d8c9d95bfc81d438dcfdc8e37fbd720c00e2eca
treeda52e9959f4f4060590b102872d85a3c7e2b6cd2
parent1e97329f2725fb5b5e88f7be99da07da6cf9fe62
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
lib/Bitcode/Reader/BitcodeReader.cpp
lib/Bitcode/Reader/BitcodeReader.h
test/Bitcode/blockaddress.ll