150
|
1 // RUN: rm -rf %t
|
|
2 // RUN: %clang_cc1 -x objective-c++ -std=c++11 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs %s -verify -DEARLY_IMPORT
|
|
3 // RUN: %clang_cc1 -x objective-c++ -std=c++11 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs %s -verify -UEARLY_IMPORT
|
|
4 // RUN: %clang_cc1 -x objective-c++ -std=c++11 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs %s -verify -DEARLY_IMPORT -fmodules-local-submodule-visibility
|
|
5 // RUN: %clang_cc1 -x objective-c++ -std=c++11 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs %s -verify -UEARLY_IMPORT -fmodules-local-submodule-visibility
|
|
6
|
|
7 #ifdef EARLY_IMPORT
|
|
8 @import using_decl.a;
|
|
9 namespace UsingDecl {
|
|
10 using ::merged;
|
|
11 }
|
|
12 int k = UsingDecl::merged;
|
|
13 #endif
|
|
14
|
|
15 namespace Y {
|
|
16 int conflicting_hidden_using_decl;
|
|
17 int conflicting_hidden_using_decl_fn_2();
|
|
18 int conflicting_hidden_using_decl_var_2;
|
|
19 struct conflicting_hidden_using_decl_struct_2;
|
|
20
|
|
21 struct conflicting_hidden_using_decl_mixed_4 {};
|
|
22 int conflicting_hidden_using_decl_mixed_5;
|
|
23 int conflicting_hidden_using_decl_mixed_6();
|
|
24 }
|
|
25
|
|
26 using Y::conflicting_hidden_using_decl;
|
|
27 int conflicting_hidden_using_decl_fn();
|
|
28 int conflicting_hidden_using_decl_var;
|
|
29 struct conflicting_hidden_using_decl_struct {};
|
|
30 using Y::conflicting_hidden_using_decl_fn_2;
|
|
31 using Y::conflicting_hidden_using_decl_var_2;
|
|
32 using Y::conflicting_hidden_using_decl_struct_2;
|
|
33
|
|
34 struct conflicting_hidden_using_decl_mixed_1 {};
|
|
35 int conflicting_hidden_using_decl_mixed_2;
|
|
36 int conflicting_hidden_using_decl_mixed_3();
|
|
37 using Y::conflicting_hidden_using_decl_mixed_4;
|
|
38 using Y::conflicting_hidden_using_decl_mixed_5;
|
|
39 using Y::conflicting_hidden_using_decl_mixed_6;
|
|
40
|
|
41 template<typename T> int use(T);
|
|
42 void test_conflicting() {
|
|
43 use(conflicting_hidden_using_decl);
|
|
44 use(conflicting_hidden_using_decl_fn());
|
|
45 use(conflicting_hidden_using_decl_var);
|
|
46 use(conflicting_hidden_using_decl_fn_2());
|
|
47 use(conflicting_hidden_using_decl_var_2);
|
|
48 use(conflicting_hidden_using_decl_mixed_1());
|
|
49 use(conflicting_hidden_using_decl_mixed_2);
|
|
50 use(conflicting_hidden_using_decl_mixed_3());
|
|
51 use(conflicting_hidden_using_decl_mixed_4());
|
|
52 use(conflicting_hidden_using_decl_mixed_5);
|
|
53 use(conflicting_hidden_using_decl_mixed_6());
|
|
54 }
|
|
55
|
|
56 #ifndef EARLY_IMPORT
|
|
57 @import using_decl.a;
|
|
58 #endif
|
|
59
|
|
60 UsingDecl::using_decl_type x = UsingDecl::using_decl_var;
|
|
61 UsingDecl::inner y = x;
|
|
62
|
|
63 @import using_decl.b;
|
|
64
|
|
65 void test_conflicting_2() {
|
|
66 use(conflicting_hidden_using_decl); // expected-error {{ambiguous}}
|
|
67 use(conflicting_hidden_using_decl_fn()); // expected-error {{ambiguous}}
|
|
68 use(conflicting_hidden_using_decl_var); // expected-error {{ambiguous}}
|
|
69 use(conflicting_hidden_using_decl_fn_2()); // expected-error {{ambiguous}}
|
|
70 use(conflicting_hidden_using_decl_var_2); // expected-error {{ambiguous}}
|
|
71 use(conflicting_hidden_using_decl_mixed_1); // ok, struct hidden
|
|
72 use(conflicting_hidden_using_decl_mixed_2); // expected-error {{ambiguous}}
|
|
73 use(conflicting_hidden_using_decl_mixed_3); // ok, struct hidden
|
|
74 use(conflicting_hidden_using_decl_mixed_4); // ok, struct hidden
|
|
75 use(conflicting_hidden_using_decl_mixed_5); // expected-error {{ambiguous}}
|
|
76 use(conflicting_hidden_using_decl_mixed_6); // ok, struct hidden
|
|
77 // expected-note@using-decl.cpp:* 7{{candidate}}
|
|
78 // expected-note@using-decl-b.h:* 7{{candidate}}
|
|
79
|
|
80 int conflicting_hidden_using_decl_mixed_1::*p1;
|
|
81 int conflicting_hidden_using_decl_mixed_3::*p3;
|
|
82 int conflicting_hidden_using_decl_mixed_4::*p4;
|
|
83 int conflicting_hidden_using_decl_mixed_6::*p6;
|
|
84 }
|