blob: 419946e8a54eb49b02c8f7c574b55303414462aa [file] [log] [blame]
Douglas Gregor8d267c52011-09-09 02:06:17 +00001// RUN: mkdir -p %t
2// RUN: %clang_cc1 -x c++ -emit-module -o %t/left.pcm %s -D MODULE_LEFT
3// RUN: %clang_cc1 -x c++ -emit-module -o %t/right.pcm %s -D MODULE_RIGHT
4// RUN: %clang_cc1 -I %t %s -verify
5
6#if defined(MODULE_LEFT)
7
8__module_private__ struct HiddenStruct {
9};
10
11
12int &f0(int);
13
14template<typename T>
15__module_private__ void f1(T*);
16
17template<typename T>
18__module_private__ class vector {
19};
20
21vector<float> vec_float;
22
23typedef __module_private__ int Integer;
24
25#elif defined(MODULE_RIGHT)
26__module_private__ double &f0(double);
27
28__module_private__ int hidden_var;
29
30inline void test_f0_in_right() {
31 double &dr = f0(hidden_var);
32}
33#else
34__import_module__ left;
35__import_module__ right;
36
37void test() {
38 int &ir = f0(1.0); // okay: f0() from 'right' is not visible
39}
40
41int test_broken() {
42 HiddenStruct hidden; // expected-error{{use of undeclared identifier 'HiddenStruct'}}
43
44 Integer i; // expected-error{{use of undeclared identifier 'Integer'}}
45
46 int *ip = 0;
47 f1(ip); // expected-error{{use of undeclared identifier 'f1'}}
48
49 vector<int> vec; // expected-error{{use of undeclared identifier 'vector'}} \
50 // expected-error{{expected '(' for function-style cast or type construction}} \
51 // expected-error{{use of undeclared identifier 'vec'}}
52
53 return hidden_var; // expected-error{{use of undeclared identifier 'hidden_var'}}
54}
55
56#endif