AsmWriter: Assert on unresolved metadata nodes
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Tue, 17 Mar 2015 00:16:35 +0000 (00:16 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Tue, 17 Mar 2015 00:16:35 +0000 (00:16 +0000)
Assert that `MDNode::isResolved()`.  While in theory the `Verifier`
should catch this, it doesn't descend into all debug info, and the
`DebugInfoVerifier` doesn't call into the `Verifier`.  Besides, this
helps to catch bugs when `-disable-verify=true`.

Note that I haven't come across a place where this fails with clang
today, so no testcase.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232442 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Bitcode/Writer/BitcodeWriter.cpp

index d2417acc689b774f5a2b58cb35082db687ab2a1d..0123fb263fc6e4dbbc06cd0a873d314a65588579 100644 (file)
@@ -1205,6 +1205,8 @@ static void WriteModuleMetadata(const Module *M,
   SmallVector<uint64_t, 64> Record;
   for (const Metadata *MD : MDs) {
     if (const MDNode *N = dyn_cast<MDNode>(MD)) {
+      assert(N->isResolved() && "Expected forward references to be resolved");
+
       switch (N->getMetadataID()) {
       default:
         llvm_unreachable("Invalid MDNode subclass");