// RUN: rm -rf %t // RUN: %clang_cc1 -x objective-c++ -std=c++11 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs %s -verify -DEARLY_IMPORT // RUN: %clang_cc1 -x objective-c++ -std=c++11 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs %s -verify -UEARLY_IMPORT // 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 // 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 #ifdef EARLY_IMPORT @import using_decl.a; namespace UsingDecl { using ::merged; } int k = UsingDecl::merged; #endif namespace Y { int conflicting_hidden_using_decl; int conflicting_hidden_using_decl_fn_2(); int conflicting_hidden_using_decl_var_2; struct conflicting_hidden_using_decl_struct_2; struct conflicting_hidden_using_decl_mixed_4 {}; int conflicting_hidden_using_decl_mixed_5; int conflicting_hidden_using_decl_mixed_6(); } using Y::conflicting_hidden_using_decl; int conflicting_hidden_using_decl_fn(); int conflicting_hidden_using_decl_var; struct conflicting_hidden_using_decl_struct {}; using Y::conflicting_hidden_using_decl_fn_2; using Y::conflicting_hidden_using_decl_var_2; using Y::conflicting_hidden_using_decl_struct_2; struct conflicting_hidden_using_decl_mixed_1 {}; int conflicting_hidden_using_decl_mixed_2; int conflicting_hidden_using_decl_mixed_3(); using Y::conflicting_hidden_using_decl_mixed_4; using Y::conflicting_hidden_using_decl_mixed_5; using Y::conflicting_hidden_using_decl_mixed_6; template<typename T> int use(T); void test_conflicting() { use(conflicting_hidden_using_decl); use(conflicting_hidden_using_decl_fn()); use(conflicting_hidden_using_decl_var); use(conflicting_hidden_using_decl_fn_2()); use(conflicting_hidden_using_decl_var_2); use(conflicting_hidden_using_decl_mixed_1()); use(conflicting_hidden_using_decl_mixed_2); use(conflicting_hidden_using_decl_mixed_3()); use(conflicting_hidden_using_decl_mixed_4()); use(conflicting_hidden_using_decl_mixed_5); use(conflicting_hidden_using_decl_mixed_6()); } #ifndef EARLY_IMPORT @import using_decl.a; #endif UsingDecl::using_decl_type x = UsingDecl::using_decl_var; UsingDecl::inner y = x; @import using_decl.b; void test_conflicting_2() { use(conflicting_hidden_using_decl); // expected-error {{ambiguous}} use(conflicting_hidden_using_decl_fn()); // expected-error {{ambiguous}} use(conflicting_hidden_using_decl_var); // expected-error {{ambiguous}} use(conflicting_hidden_using_decl_fn_2()); // expected-error {{ambiguous}} use(conflicting_hidden_using_decl_var_2); // expected-error {{ambiguous}} use(conflicting_hidden_using_decl_mixed_1); // ok, struct hidden use(conflicting_hidden_using_decl_mixed_2); // expected-error {{ambiguous}} use(conflicting_hidden_using_decl_mixed_3); // ok, struct hidden use(conflicting_hidden_using_decl_mixed_4); // ok, struct hidden use(conflicting_hidden_using_decl_mixed_5); // expected-error {{ambiguous}} use(conflicting_hidden_using_decl_mixed_6); // ok, struct hidden // expected-note@using-decl.cpp:* 7{{candidate}} // expected-note@using-decl-b.h:* 7{{candidate}} int conflicting_hidden_using_decl_mixed_1::*p1; int conflicting_hidden_using_decl_mixed_3::*p3; int conflicting_hidden_using_decl_mixed_4::*p4; int conflicting_hidden_using_decl_mixed_6::*p6; }