diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/Modules/Inputs/module.map | 3 | ||||
-rw-r--r-- | test/Modules/Inputs/module_private_left.h | 8 | ||||
-rw-r--r-- | test/Modules/Inputs/module_private_right.h | 2 | ||||
-rw-r--r-- | test/Modules/Inputs/redecl-merge-left.h | 6 | ||||
-rw-r--r-- | test/Modules/Inputs/redecl-merge-right.h | 6 | ||||
-rw-r--r-- | test/Modules/Inputs/redecl-merge-top-explicit.h | 5 | ||||
-rw-r--r-- | test/Modules/module-private.cpp | 24 | ||||
-rw-r--r-- | test/Modules/redecl-merge.m | 12 |
8 files changed, 48 insertions, 18 deletions
diff --git a/test/Modules/Inputs/module.map b/test/Modules/Inputs/module.map index b101c01567..13a44eb6a7 100644 --- a/test/Modules/Inputs/module.map +++ b/test/Modules/Inputs/module.map @@ -44,7 +44,8 @@ module decldef { } module redecl_merge_top { - header "redecl-merge-top.h" + header "redecl-merge-top.h" + explicit module Explicit { header "redecl-merge-top-explicit.h" } } module redecl_merge_left { header "redecl-merge-left.h" diff --git a/test/Modules/Inputs/module_private_left.h b/test/Modules/Inputs/module_private_left.h index 617a7abf3d..ff33999d0f 100644 --- a/test/Modules/Inputs/module_private_left.h +++ b/test/Modules/Inputs/module_private_left.h @@ -1,6 +1,6 @@ __module_private__ struct HiddenStruct; -struct HiddenStruct { +__module_private__ struct HiddenStruct { }; @@ -10,17 +10,17 @@ template<typename T> __module_private__ void f1(T*); template<typename T> -void f1(T*); +__module_private__ void f1(T*); template<typename T> __module_private__ class vector; template<typename T> -class vector { +__module_private__ class vector { }; vector<float> vec_float; typedef __module_private__ int Integer; -typedef int Integer; +typedef __module_private__ int Integer; diff --git a/test/Modules/Inputs/module_private_right.h b/test/Modules/Inputs/module_private_right.h index e7c1bb8221..53efe25d08 100644 --- a/test/Modules/Inputs/module_private_right.h +++ b/test/Modules/Inputs/module_private_right.h @@ -1,5 +1,5 @@ __module_private__ double &f0(double); -double &f0(double); +__module_private__ double &f0(double); __module_private__ int hidden_var; diff --git a/test/Modules/Inputs/redecl-merge-left.h b/test/Modules/Inputs/redecl-merge-left.h index 8e2fa53ae1..4e009591de 100644 --- a/test/Modules/Inputs/redecl-merge-left.h +++ b/test/Modules/Inputs/redecl-merge-left.h @@ -10,6 +10,12 @@ __import_module__ redecl_merge_top; @class A; +@class Explicit; + +int *explicit_func(void); + +struct explicit_struct; + #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 6d69734711..f0bfd35746 100644 --- a/test/Modules/Inputs/redecl-merge-right.h +++ b/test/Modules/Inputs/redecl-merge-right.h @@ -9,6 +9,12 @@ __import_module__ redecl_merge_top; @class B; +@class Explicit; + +int *explicit_func(void); + +struct explicit_struct; + #ifdef __cplusplus template<typename T> class Vector { public: diff --git a/test/Modules/Inputs/redecl-merge-top-explicit.h b/test/Modules/Inputs/redecl-merge-top-explicit.h new file mode 100644 index 0000000000..c8f51589f3 --- /dev/null +++ b/test/Modules/Inputs/redecl-merge-top-explicit.h @@ -0,0 +1,5 @@ +@class Explicit; + +int *explicit_func(void); + +struct explicit_struct { int member; }; diff --git a/test/Modules/module-private.cpp b/test/Modules/module-private.cpp index eb932a8eb8..bdfa2682ce 100644 --- a/test/Modules/module-private.cpp +++ b/test/Modules/module-private.cpp @@ -31,28 +31,28 @@ int test_broken() { // Check for private redeclarations of public entities. template<typename T> -class public_class_template; // expected-note{{previous declaration is here}} +class public_class_template; template<typename T> -__module_private__ class public_class_template; // expected-error{{__module_private__ declaration of 'public_class_template' follows public declaration}} +__module_private__ class public_class_template; -typedef int public_typedef; // expected-note{{previous declaration is here}} -typedef __module_private__ int public_typedef; // expected-error{{__module_private__ declaration of 'public_typedef' follows public declaration}} +typedef int public_typedef; +typedef __module_private__ int public_typedef; -extern int public_var; // expected-note{{previous declaration is here}} -extern __module_private__ int public_var; // expected-error{{__module_private__ declaration of 'public_var' follows public declaration}} +extern int public_var; +extern __module_private__ int public_var; -void public_func(); // expected-note{{previous declaration is here}} -__module_private__ void public_func(); // expected-error{{__module_private__ declaration of 'public_func' follows public declaration}} +void public_func(); +__module_private__ void public_func(); template<typename T> -void public_func_template(); // expected-note{{previous declaration is here}} +void public_func_template(); template<typename T> -__module_private__ void public_func_template(); // expected-error{{__module_private__ declaration of 'public_func_template' follows public declaration}} +__module_private__ void public_func_template(); -struct public_struct; // expected-note{{previous declaration is here}} -__module_private__ struct public_struct; // expected-error{{__module_private__ declaration of 'public_struct' follows public declaration}} +struct public_struct; +__module_private__ struct public_struct; // Check for attempts to make specializations private template<> __module_private__ void public_func_template<int>(); // expected-error{{template specialization cannot be declared __module_private__}} diff --git a/test/Modules/redecl-merge.m b/test/Modules/redecl-merge.m index 6497268c38..7021d14f69 100644 --- a/test/Modules/redecl-merge.m +++ b/test/Modules/redecl-merge.m @@ -20,6 +20,18 @@ B *f1() { @class B; +// 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. +void testExplicit() { + Explicit *e; + int *(*fp)(void) = &explicit_func; + int *ip = explicit_func(); + + // FIXME: Should complain about definition not having been imported. + struct explicit_struct es = { 0 }; +} + __import_module__ redecl_merge_bottom; @implementation B |