]> granicus.if.org Git - llvm/commitdiff
[ThinLTO] Fix lazy-loading of Metadata attachment, which left some Fwd ref behind
authorMehdi Amini <mehdi.amini@apple.com>
Sun, 8 Jan 2017 00:44:45 +0000 (00:44 +0000)
committerMehdi Amini <mehdi.amini@apple.com>
Sun, 8 Jan 2017 00:44:45 +0000 (00:44 +0000)
The change in r291362 was too agressive. We still need to flush at the
end of the block because function local metadata can introduce fwd
ref as well.
(Bootstrap with ThinLTO was broken)

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

lib/Bitcode/Reader/MetadataLoader.cpp

index 89edbbef92ef823ec845419de71ee8a38ed410f2..4a5d18e2db75097c97bff1e121502e7711ba08b3 100644 (file)
@@ -1561,6 +1561,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseMetadataAttachment(
     return error("Invalid record");
 
   SmallVector<uint64_t, 64> Record;
+  PlaceholderQueue Placeholders;
 
   while (true) {
     BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
@@ -1570,6 +1571,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseMetadataAttachment(
     case BitstreamEntry::Error:
       return error("Malformed block");
     case BitstreamEntry::EndBlock:
+      resolveForwardRefsAndPlaceholders(Placeholders);
       return Error::success();
     case BitstreamEntry::Record:
       // The interesting case.
@@ -1608,7 +1610,6 @@ Error MetadataLoader::MetadataLoaderImpl::parseMetadataAttachment(
             !MetadataList.lookup(Idx)) {
           // Load the attachment if it is in the lazy-loadable range and hasn't
           // been loaded yet.
-          PlaceholderQueue Placeholders;
           lazyLoadOneMetadata(Idx, Placeholders);
           resolveForwardRefsAndPlaceholders(Placeholders);
         }