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