[PATCH] D110287: [modules] While merging ObjCInterfaceDecl definitions, merge them as decl contexts too.
Volodymyr Sapsai via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 20 18:49:03 PDT 2021
This revision was automatically updated to reflect the committed changes.
Closed by commit rGc5931267db26: [modules] While merging ObjCInterfaceDecl definitions, merge them as decl… (authored by vsapsai).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D110287/new/
https://reviews.llvm.org/D110287
Files:
clang/lib/Serialization/ASTReaderDecl.cpp
clang/test/Modules/odr_hash.mm
Index: clang/test/Modules/odr_hash.mm
===================================================================
--- clang/test/Modules/odr_hash.mm
+++ clang/test/Modules/odr_hash.mm
@@ -241,12 +241,12 @@
@end
@interface Interface5 <T : I1 *> {
@public
- T<P1> x;
+ T<P1> y;
}
@end
@interface Interface6 <T1 : I1 *, T2 : I2 *> {
@public
- T1 x;
+ T1 z;
}
@end
#elif defined(SECOND)
@@ -257,14 +257,21 @@
@end
@interface Interface5 <T : I1 *> {
@public
- T<P1, P2> x;
+ T<P1, P2> y;
}
@end
@interface Interface6 <T1 : I1 *, T2 : I2 *> {
@public
- T2 x;
+ T2 z;
}
@end
+#else
+// expected-error at first.h:* {{'Interface4::x' from module 'FirstModule' is not present in definition of 'Interface4' in module 'SecondModule'}}
+// expected-note at second.h:* {{declaration of 'x' does not match}}
+// expected-error at first.h:* {{'Interface5::y' from module 'FirstModule' is not present in definition of 'Interface5' in module 'SecondModule'}}
+// expected-note at second.h:* {{declaration of 'y' does not match}}
+// expected-error at first.h:* {{'Interface6::z' from module 'FirstModule' is not present in definition of 'Interface6' in module 'SecondModule'}}
+// expected-note at second.h:* {{declaration of 'z' does not match}}
#endif
namespace Types {
@@ -276,22 +283,22 @@
};
struct Invalid2 {
Interface5 *I;
- decltype(I->x) x;
+ decltype(I->y) y;
};
struct Invalid3 {
Interface6 *I;
- decltype(I->x) x;
+ decltype(I->z) z;
};
#else
Invalid1 i1;
// expected-error at first.h:* {{'Types::ObjCTypeParam::Invalid1::x' from module 'FirstModule' is not present in definition of 'Types::ObjCTypeParam::Invalid1' in module 'SecondModule'}}
// expected-note at second.h:* {{declaration of 'x' does not match}}
Invalid2 i2;
-// expected-error at first.h:* {{'Types::ObjCTypeParam::Invalid2::x' from module 'FirstModule' is not present in definition of 'Types::ObjCTypeParam::Invalid2' in module 'SecondModule'}}
-// expected-note at second.h:* {{declaration of 'x' does not match}}
+// expected-error at first.h:* {{'Types::ObjCTypeParam::Invalid2::y' from module 'FirstModule' is not present in definition of 'Types::ObjCTypeParam::Invalid2' in module 'SecondModule'}}
+// expected-note at second.h:* {{declaration of 'y' does not match}}
Invalid3 i3;
-// expected-error at first.h:* {{'Types::ObjCTypeParam::Invalid3::x' from module 'FirstModule' is not present in definition of 'Types::ObjCTypeParam::Invalid3' in module 'SecondModule'}}
-// expected-note at second.h:* {{declaration of 'x' does not match}}
+// expected-error at first.h:* {{'Types::ObjCTypeParam::Invalid3::z' from module 'FirstModule' is not present in definition of 'Types::ObjCTypeParam::Invalid3' in module 'SecondModule'}}
+// expected-note at second.h:* {{declaration of 'z' does not match}}
#endif
} // namespace ObjCTypeParam
Index: clang/lib/Serialization/ASTReaderDecl.cpp
===================================================================
--- clang/lib/Serialization/ASTReaderDecl.cpp
+++ clang/lib/Serialization/ASTReaderDecl.cpp
@@ -1177,6 +1177,12 @@
void ASTDeclReader::MergeDefinitionData(ObjCInterfaceDecl *D,
struct ObjCInterfaceDecl::DefinitionData &&NewDD) {
+ struct ObjCInterfaceDecl::DefinitionData &DD = D->data();
+ if (DD.Definition != NewDD.Definition) {
+ Reader.MergedDeclContexts.insert(
+ std::make_pair(NewDD.Definition, DD.Definition));
+ }
+
// FIXME: odr checking?
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D110287.381128.patch
Type: text/x-patch
Size: 3402 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211021/1d1f5549/attachment.bin>
More information about the cfe-commits
mailing list