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