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
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user