diff options
author | Adrian Prantl <aprantl@apple.com> | 2017-04-28 22:25:46 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2017-04-28 22:25:46 +0000 |
commit | fed4f399d3a9b8381d9d32e7aa928855b11d7485 (patch) | |
tree | 6b842659a0d73b8c897febc016f92df12d4304b8 /llvm/lib/Bitcode/Reader/MetadataLoader.cpp | |
parent | c20ccd2c0209fdaae7f7efe066c4b59b4ca46842 (diff) | |
download | bcm5719-llvm-fed4f399d3a9b8381d9d32e7aa928855b11d7485.tar.gz bcm5719-llvm-fed4f399d3a9b8381d9d32e7aa928855b11d7485.zip |
Remove line and file from DINamespace.
Fixes the issue highlighted in
http://lists.llvm.org/pipermail/cfe-dev/2014-June/037500.html.
The DW_AT_decl_file and DW_AT_decl_line attributes on namespaces can
prevent LLVM from uniquing types that are in the same namespace. They
also don't carry any meaningful information.
rdar://problem/17484998
Differential Revision: https://reviews.llvm.org/D32648
llvm-svn: 301706
Diffstat (limited to 'llvm/lib/Bitcode/Reader/MetadataLoader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/MetadataLoader.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp index 24fdca33c23..42135e5949c 100644 --- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp +++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp @@ -1383,16 +1383,20 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( break; } case bitc::METADATA_NAMESPACE: { - if (Record.size() != 5) + // Newer versions of DINamespace dropped file and line. + MDString *Name; + if (Record.size() == 3) + Name = getMDString(Record[2]); + else if (Record.size() == 5) + Name = getMDString(Record[3]); + else return error("Invalid record"); IsDistinct = Record[0] & 1; bool ExportSymbols = Record[0] & 2; MetadataList.assignValue( GET_OR_DISTINCT(DINamespace, - (Context, getMDOrNull(Record[1]), - getMDOrNull(Record[2]), getMDString(Record[3]), - Record[4], ExportSymbols)), + (Context, getMDOrNull(Record[1]), Name, ExportSymbols)), NextMetadataNo); NextMetadataNo++; break; |