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