From 386ad01c7b6d83beb95267116af295471e36d426 Mon Sep 17 00:00:00 2001 From: Vedant Kumar Date: Thu, 20 Sep 2018 18:59:33 +0000 Subject: [PATCH] [Bitcode] Address backwards compat bug in r342631 r342631 expanded bitc::METADATA_LOCATION by one element. The bitcode metadata loader was changed in a backwards-incompatible way, leading to crashes when disassembling old bitcode: assertion: empty() && "PlaceholderQueue hasn't been flushed before being destroyed" Assertion failed: (empty() && "PlaceholderQueue hasn't been flushed before being destroyed") This commit teaches the metadata loader to assume that the newly-added IsImplicitCode bit is 'false' when not present in old bitcode. I've added a bitcode compat regression test. rdar://44645820 llvm-svn: 342678 --- llvm/lib/Bitcode/Reader/MetadataLoader.cpp | 4 ++-- llvm/test/Bitcode/Inputs/apple-clang-700-O3-g-1.bc | Bin 0 -> 8096 bytes llvm/test/Bitcode/apple-clang-700-compat.test | 8 ++++++++ 3 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 llvm/test/Bitcode/Inputs/apple-clang-700-O3-g-1.bc create mode 100644 llvm/test/Bitcode/apple-clang-700-compat.test diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp index 1af17f4..3fe7d22 100644 --- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp +++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp @@ -1139,7 +1139,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( break; } case bitc::METADATA_LOCATION: { - if (Record.size() != 6) + if (Record.size() != 5 && Record.size() != 6) return error("Invalid record"); IsDistinct = Record[0]; @@ -1147,7 +1147,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( unsigned Column = Record[2]; Metadata *Scope = getMD(Record[3]); Metadata *InlinedAt = getMDOrNull(Record[4]); - bool ImplicitCode = Record[5]; + bool ImplicitCode = Record.size() == 6 && Record[5]; MetadataList.assignValue( GET_OR_DISTINCT(DILocation, (Context, Line, Column, Scope, InlinedAt, ImplicitCode)), diff --git a/llvm/test/Bitcode/Inputs/apple-clang-700-O3-g-1.bc b/llvm/test/Bitcode/Inputs/apple-clang-700-O3-g-1.bc new file mode 100644 index 0000000000000000000000000000000000000000..01f221d575cf5bb54da1851dc4040bf4abf61361 GIT binary patch literal 8096 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 literal 0 HcmV?d00001 diff --git a/llvm/test/Bitcode/apple-clang-700-compat.test b/llvm/test/Bitcode/apple-clang-700-compat.test new file mode 100644 index 0000000..c7ab2f4 --- /dev/null +++ b/llvm/test/Bitcode/apple-clang-700-compat.test @@ -0,0 +1,8 @@ +; AppleClang-700 uses a debug info version that isn't recognized by llvm.org +; compilers. However, it does produce valid bitcode which should parse without +; crashing the metadata loader. + +RUN: llvm-dis < %S/Inputs/apple-clang-700-O3-g-1.bc 2>&1 \ +RUN: | FileCheck %s -check-prefix INVALID-VERSION + +INVALID-VERSION: warning: ignoring debug info with an invalid version (700000003) -- 2.7.4