forked from OSchip/llvm-project
Merge "special" types from different modules in the AST reader.
Different modules may have different views of the various "special" types in the AST, such as the redefinition type for "id". Merge those types rather than only considering the redefinition types for the first AST file loaded. llvm-svn: 174234
This commit is contained in:
parent
6bade327dc
commit
44180f8f6d
|
@ -2053,8 +2053,24 @@ bool ASTReader::ReadASTBlock(ModuleFile &F) {
|
|||
break;
|
||||
|
||||
case SPECIAL_TYPES:
|
||||
for (unsigned I = 0, N = Record.size(); I != N; ++I)
|
||||
SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
|
||||
if (SpecialTypes.empty()) {
|
||||
for (unsigned I = 0, N = Record.size(); I != N; ++I)
|
||||
SpecialTypes.push_back(getGlobalTypeID(F, Record[I]));
|
||||
break;
|
||||
}
|
||||
|
||||
if (SpecialTypes.size() != Record.size()) {
|
||||
Error("invalid special-types record");
|
||||
return true;
|
||||
}
|
||||
|
||||
for (unsigned I = 0, N = Record.size(); I != N; ++I) {
|
||||
serialization::TypeID ID = getGlobalTypeID(F, Record[I]);
|
||||
if (!SpecialTypes[I])
|
||||
SpecialTypes[I] = ID;
|
||||
// FIXME: If ID && SpecialTypes[I] != ID, do we need a separate
|
||||
// merge step?
|
||||
}
|
||||
break;
|
||||
|
||||
case STATISTICS:
|
||||
|
|
|
@ -155,3 +155,7 @@ module autolink {
|
|||
link framework "autolink_framework"
|
||||
}
|
||||
}
|
||||
|
||||
module weird_objc {
|
||||
header "weird_objc.h"
|
||||
}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
typedef struct objc_object { void *super; int wibble; } *id;
|
|
@ -0,0 +1,13 @@
|
|||
@import redeclarations_left;
|
||||
@import weird_objc;
|
||||
|
||||
int test(id x) {
|
||||
return x->wibble;
|
||||
}
|
||||
|
||||
// RUN: rm -rf %t
|
||||
// RUN: %clang_cc1 -fmodules -x objective-c -fmodule-cache-path %t -emit-module -fmodule-name=redeclarations_left %S/Inputs/module.map
|
||||
// RUN: %clang_cc1 -fmodules -x objective-c -fmodule-cache-path %t -emit-module -fmodule-name=weird_objc %S/Inputs/module.map
|
||||
// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t %s -verify
|
||||
// expected-no-diagnostics
|
||||
|
Loading…
Reference in New Issue