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