aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/Modules/Inputs/module.map3
-rw-r--r--test/Modules/Inputs/module_private_left.h8
-rw-r--r--test/Modules/Inputs/module_private_right.h2
-rw-r--r--test/Modules/Inputs/redecl-merge-left.h6
-rw-r--r--test/Modules/Inputs/redecl-merge-right.h6
-rw-r--r--test/Modules/Inputs/redecl-merge-top-explicit.h5
-rw-r--r--test/Modules/module-private.cpp24
-rw-r--r--test/Modules/redecl-merge.m12
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