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