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 -fno-modules-hide-internal-linkage
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 -fno-modules-hide-internal-linkage
6 
7 #ifdef EARLY_IMPORT
8 @import using_decl.a;
9 #endif
10 
11 namespace Y {
12   int conflicting_hidden_using_decl;
13   int conflicting_hidden_using_decl_fn_2();
14   int conflicting_hidden_using_decl_var_2;
15   struct conflicting_hidden_using_decl_struct_2;
16 
17   struct conflicting_hidden_using_decl_mixed_4 {};
18   int conflicting_hidden_using_decl_mixed_5;
19   int conflicting_hidden_using_decl_mixed_6();
20 }
21 
22 using Y::conflicting_hidden_using_decl;
23 int conflicting_hidden_using_decl_fn();
24 int conflicting_hidden_using_decl_var;
25 struct conflicting_hidden_using_decl_struct {};
26 using Y::conflicting_hidden_using_decl_fn_2;
27 using Y::conflicting_hidden_using_decl_var_2;
28 using Y::conflicting_hidden_using_decl_struct_2;
29 
30 struct conflicting_hidden_using_decl_mixed_1 {};
31 int conflicting_hidden_using_decl_mixed_2;
32 int conflicting_hidden_using_decl_mixed_3();
33 using Y::conflicting_hidden_using_decl_mixed_4;
34 using Y::conflicting_hidden_using_decl_mixed_5;
35 using Y::conflicting_hidden_using_decl_mixed_6;
36 
37 template<typename T> int use(T);
38 void test_conflicting() {
39   use(conflicting_hidden_using_decl);
40   use(conflicting_hidden_using_decl_fn());
41   use(conflicting_hidden_using_decl_var);
42   use(conflicting_hidden_using_decl_fn_2());
43   use(conflicting_hidden_using_decl_var_2);
44   use(conflicting_hidden_using_decl_mixed_1());
45   use(conflicting_hidden_using_decl_mixed_2);
46   use(conflicting_hidden_using_decl_mixed_3());
47   use(conflicting_hidden_using_decl_mixed_4());
48   use(conflicting_hidden_using_decl_mixed_5);
49   use(conflicting_hidden_using_decl_mixed_6());
50 }
51 
52 #ifndef EARLY_IMPORT
53 @import using_decl.a;
54 #endif
55 
56 UsingDecl::using_decl_type x = UsingDecl::using_decl_var;
57 UsingDecl::inner y = x;
58 
59 @import using_decl.b;
60 
61 void test_conflicting_2() {
62   use(conflicting_hidden_using_decl);         // expected-error {{ambiguous}}
63   use(conflicting_hidden_using_decl_fn());    // expected-error {{ambiguous}}
64   use(conflicting_hidden_using_decl_var);     // expected-error {{ambiguous}}
65   use(conflicting_hidden_using_decl_fn_2());  // expected-error {{ambiguous}}
66   use(conflicting_hidden_using_decl_var_2);   // expected-error {{ambiguous}}
67   use(conflicting_hidden_using_decl_mixed_1); // ok, struct hidden
68   use(conflicting_hidden_using_decl_mixed_2); // expected-error {{ambiguous}}
69   use(conflicting_hidden_using_decl_mixed_3); // ok, struct hidden
70   use(conflicting_hidden_using_decl_mixed_4); // ok, struct hidden
71   use(conflicting_hidden_using_decl_mixed_5); // expected-error {{ambiguous}}
72   use(conflicting_hidden_using_decl_mixed_6); // ok, struct hidden
73   // [email protected]:* 7{{candidate}}
74   // [email protected]:* 7{{candidate}}
75 
76   int conflicting_hidden_using_decl_mixed_1::*p1;
77   int conflicting_hidden_using_decl_mixed_3::*p3;
78   int conflicting_hidden_using_decl_mixed_4::*p4;
79   int conflicting_hidden_using_decl_mixed_6::*p6;
80 }
81