blob: f01688498c551340c39bd4ff7b7b9e2b32279293 [file] [log] [blame]
Richard Smithfd8634a2013-10-23 02:17:46 +00001// RUN: rm -rf %t
Richard Smithf091e122015-09-15 01:28:55 +00002// 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
Richard Smithfd8634a2013-10-23 02:17:46 +00006
Richard Smithf091e122015-09-15 01:28:55 +00007#ifdef EARLY_IMPORT
Richard Smithfd8634a2013-10-23 02:17:46 +00008@import using_decl.a;
Richard Smithf091e122015-09-15 01:28:55 +00009#endif
Richard Smithfd8634a2013-10-23 02:17:46 +000010
Richard Smithf091e122015-09-15 01:28:55 +000011namespace Y {
12 int conflicting_hidden_using_decl;
13 int conflicting_hidden_using_decl_fn_2();
14 int conflicting_hidden_using_decl_var_2;
15 struct conflicting_hidden_using_decl_struct_2;
16
17 struct conflicting_hidden_using_decl_mixed_4 {};
18 int conflicting_hidden_using_decl_mixed_5;
19 int conflicting_hidden_using_decl_mixed_6();
20}
21
22using Y::conflicting_hidden_using_decl;
23int conflicting_hidden_using_decl_fn();
24int conflicting_hidden_using_decl_var;
25struct conflicting_hidden_using_decl_struct {};
26using Y::conflicting_hidden_using_decl_fn_2;
27using Y::conflicting_hidden_using_decl_var_2;
28using Y::conflicting_hidden_using_decl_struct_2;
29
30struct conflicting_hidden_using_decl_mixed_1 {};
31int conflicting_hidden_using_decl_mixed_2;
32int conflicting_hidden_using_decl_mixed_3();
33using Y::conflicting_hidden_using_decl_mixed_4;
34using Y::conflicting_hidden_using_decl_mixed_5;
35using Y::conflicting_hidden_using_decl_mixed_6;
36
37template<typename T> int use(T);
38void test_conflicting() {
39 use(conflicting_hidden_using_decl);
40 use(conflicting_hidden_using_decl_fn());
41 use(conflicting_hidden_using_decl_var);
42 use(conflicting_hidden_using_decl_fn_2());
43 use(conflicting_hidden_using_decl_var_2);
44 use(conflicting_hidden_using_decl_mixed_1());
45 use(conflicting_hidden_using_decl_mixed_2);
46 use(conflicting_hidden_using_decl_mixed_3());
47 use(conflicting_hidden_using_decl_mixed_4());
48 use(conflicting_hidden_using_decl_mixed_5);
49 use(conflicting_hidden_using_decl_mixed_6());
50}
51
52#ifndef EARLY_IMPORT
53@import using_decl.a;
54#endif
55
Richard Smithfd8634a2013-10-23 02:17:46 +000056UsingDecl::using_decl_type x = UsingDecl::using_decl_var;
57UsingDecl::inner y = x;
Richard Smithf091e122015-09-15 01:28:55 +000058
59@import using_decl.b;
60
61void test_conflicting_2() {
62 use(conflicting_hidden_using_decl); // expected-error {{ambiguous}}
63 use(conflicting_hidden_using_decl_fn()); // expected-error {{ambiguous}}
64 use(conflicting_hidden_using_decl_var); // expected-error {{ambiguous}}
65 use(conflicting_hidden_using_decl_fn_2()); // expected-error {{ambiguous}}
66 use(conflicting_hidden_using_decl_var_2); // expected-error {{ambiguous}}
67 use(conflicting_hidden_using_decl_mixed_1); // ok, struct hidden
68 use(conflicting_hidden_using_decl_mixed_2); // expected-error {{ambiguous}}
69 use(conflicting_hidden_using_decl_mixed_3); // ok, struct hidden
70 use(conflicting_hidden_using_decl_mixed_4); // ok, struct hidden
71 use(conflicting_hidden_using_decl_mixed_5); // expected-error {{ambiguous}}
72 use(conflicting_hidden_using_decl_mixed_6); // ok, struct hidden
73 // expected-note@using-decl.cpp:* 7{{candidate}}
74 // expected-note@using-decl-b.h:* 7{{candidate}}
75
76 int conflicting_hidden_using_decl_mixed_1::*p1;
77 int conflicting_hidden_using_decl_mixed_3::*p3;
78 int conflicting_hidden_using_decl_mixed_4::*p4;
79 int conflicting_hidden_using_decl_mixed_6::*p6;
80}