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; 9namespace UsingDecl { 10 using ::merged; 11} 12int k = UsingDecl::merged; 13#endif 14 15namespace 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 26using Y::conflicting_hidden_using_decl; 27int conflicting_hidden_using_decl_fn(); 28int conflicting_hidden_using_decl_var; 29struct conflicting_hidden_using_decl_struct {}; 30using Y::conflicting_hidden_using_decl_fn_2; 31using Y::conflicting_hidden_using_decl_var_2; 32using Y::conflicting_hidden_using_decl_struct_2; 33 34struct conflicting_hidden_using_decl_mixed_1 {}; 35int conflicting_hidden_using_decl_mixed_2; 36int conflicting_hidden_using_decl_mixed_3(); 37using Y::conflicting_hidden_using_decl_mixed_4; 38using Y::conflicting_hidden_using_decl_mixed_5; 39using Y::conflicting_hidden_using_decl_mixed_6; 40 41template<typename T> int use(T); 42void 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 60UsingDecl::using_decl_type x = UsingDecl::using_decl_var; 61UsingDecl::inner y = x; 62 63@import using_decl.b; 64 65void 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} 85