diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-01-03 22:46:00 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-01-03 22:46:00 +0000 |
commit | 1ca4a5c41b8707b5fafcd1af1c9824b1bb19a399 (patch) | |
tree | d889d80a3fd82b5669bde44f3e4bbf53f01e31e3 /test/Modules | |
parent | 5a15d92206f8ef357c49d6993a6ec4a85bde7b8f (diff) |
Implement cross-module declaration merging for tag declarations, so
that if two modules A and B both contain a declaration of a tag such
as
struct X;
and those two modules are unrelated, the two declarations of X will be
merged into a single redeclaration chain.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147488 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Modules')
-rw-r--r-- | test/Modules/Inputs/redecl-merge-bottom.h | 3 | ||||
-rw-r--r-- | test/Modules/Inputs/redecl-merge-left.h | 17 | ||||
-rw-r--r-- | test/Modules/Inputs/redecl-merge-right.h | 12 | ||||
-rw-r--r-- | test/Modules/Inputs/redecl-merge-top.h | 4 | ||||
-rw-r--r-- | test/Modules/redecl-merge.m | 23 |
5 files changed, 59 insertions, 0 deletions
diff --git a/test/Modules/Inputs/redecl-merge-bottom.h b/test/Modules/Inputs/redecl-merge-bottom.h index a054cd2059..4e52a67247 100644 --- a/test/Modules/Inputs/redecl-merge-bottom.h +++ b/test/Modules/Inputs/redecl-merge-bottom.h @@ -13,6 +13,9 @@ @protocol P1; +struct S1; +struct S3; + void refers_to_C4(C4*); #ifdef __cplusplus diff --git a/test/Modules/Inputs/redecl-merge-left.h b/test/Modules/Inputs/redecl-merge-left.h index 82146f7ed5..b21271b146 100644 --- a/test/Modules/Inputs/redecl-merge-left.h +++ b/test/Modules/Inputs/redecl-merge-left.h @@ -15,6 +15,14 @@ - (void)protoMethod2; @end +struct S1; +struct S2 { + int field; +}; + +struct S1 *produce_S1(void); +void consume_S2(struct S2*); + // Test declarations in different modules with no common initial // declaration. @class C; @@ -39,6 +47,15 @@ struct explicit_struct; @protocol P3; +struct S3; +struct S3; +struct S4 { + int field; +}; + +struct S3 *produce_S3(void); +void consume_S4(struct S4*); + #ifdef __cplusplus template<typename T> class Vector; diff --git a/test/Modules/Inputs/redecl-merge-right.h b/test/Modules/Inputs/redecl-merge-right.h index b6dfe2f53c..686a96228a 100644 --- a/test/Modules/Inputs/redecl-merge-right.h +++ b/test/Modules/Inputs/redecl-merge-right.h @@ -21,6 +21,12 @@ @protocol P2; +struct S1; +struct S2; + +void consume_S1(struct S1*); +struct S2 *produce_S2(void); + // Test declarations in different modules with no common initial // declaration. @class C; @@ -47,6 +53,12 @@ struct explicit_struct; @protocol P3; @protocol P3; +struct S3; +struct S4; + +void consume_S3(struct S3*); +struct S4 *produce_S4(void); + #ifdef __cplusplus template<typename T> class Vector { public: diff --git a/test/Modules/Inputs/redecl-merge-top.h b/test/Modules/Inputs/redecl-merge-top.h index 64c0c92546..519254ca22 100644 --- a/test/Modules/Inputs/redecl-merge-top.h +++ b/test/Modules/Inputs/redecl-merge-top.h @@ -11,6 +11,10 @@ @protocol P2; @protocol P2; +struct S1; +struct S2; +struct S2; + #ifdef __cplusplus template<typename T> class Vector; #endif diff --git a/test/Modules/redecl-merge.m b/test/Modules/redecl-merge.m index dfbc25fe9e..c0e83e8a86 100644 --- a/test/Modules/redecl-merge.m +++ b/test/Modules/redecl-merge.m @@ -32,6 +32,29 @@ void testProtoMerge(id<P1> p1, id<P2> p2) { [p2 protoMethod2]; } +struct S1 { + int s1_field; +}; + +struct S3 { + int s3_field; +}; + +void testTagMerge() { + consume_S1(produce_S1()); + struct S2 s2; + s2.field = 0; + consume_S2(produce_S2()); + struct S1 s1; + s1.s1_field = 0; + consume_S3(produce_S3()); + struct S4 s4; + s4.field = 0; + consume_S4(produce_S4()); + struct S3 s3; + s3.s3_field = 0; +} + // Test redeclarations of entities in explicit submodules, to make // sure we're maintaining the declaration chains even when normal name // lookup can't see what we're looking for. |