Bitcode: Stop assuming non-null fields
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Fri, 20 Feb 2015 03:17:58 +0000 (03:17 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Fri, 20 Feb 2015 03:17:58 +0000 (03:17 +0000)
commitea8cbe9782ff78c3d395872dee7f51384c84dc59
treefc510eda2149c7c6b548501a5cfbc1aa42f4c699
parent5ecf528fc2c9e018f78d17fc1260889b6fa7df8e
Bitcode: Stop assuming non-null fields

When writing the bitcode serialization for the new debug info hierarchy,
I assumed two fields would never be null.

Drop that assumption, since it's brittle (and crashes the
`BitcodeWriter` if wrong), and is a check better left for the verifier
anyway.  (No need for a bitcode upgrade here, since the new hierarchy is
still not in place.)

The fields in question are `MDCompileUnit::getFile()` and
`MDDerivedType::getBaseType()`, the latter of which isn't null in
test/Transforms/Mem2Reg/ConvertDebugInfo2.ll (see !14, a pointer to
nothing).  While the testcase might have bitrotted, there's no reason
for the bitcode format to rely on non-null for metadata operands.

This also fixes a bug in `AsmWriter` where if the `file:` is null it
isn't emitted (caught by the double-round trip in the testcase I'm
adding) -- this is a required field in `LLParser`.

I'll circle back to ConvertDebugInfo2.  Once the specialized nodes are
in place, I'll be trying to turn the debug info verifier back on by
default (in the newer module pass form committed r206300) and throwing
more logic in there.  If the testcase has bitrotted (as opposed to me
not understanding the schema correctly) I'll fix it then.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229960 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Bitcode/Reader/BitcodeReader.cpp
lib/Bitcode/Writer/BitcodeWriter.cpp
lib/IR/AsmWriter.cpp
test/Assembler/metadata-null-operands.ll [new file with mode: 0644]