xref: /aosp_15_r20/external/clang/test/Modules/Inputs/stress1/common.h (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li #ifndef STRESS1_COMMON_H
2*67e74705SXin Li #define STRESS1_COMMON_H
3*67e74705SXin Li 
function00(char x)4*67e74705SXin Li inline char function00(char x) { return x + x; }
function00(short x)5*67e74705SXin Li inline short function00(short x) { return x + x; }
function00(int x)6*67e74705SXin Li inline int function00(int x) { return x + x; }
7*67e74705SXin Li 
8*67e74705SXin Li namespace N01 { struct S00; }
9*67e74705SXin Li 
10*67e74705SXin Li namespace N00 {
11*67e74705SXin Li struct S00 {
12*67e74705SXin Li   char c;
13*67e74705SXin Li   short s;
14*67e74705SXin Li   int i;
15*67e74705SXin Li 
S00S0016*67e74705SXin Li   S00(char x) : c(x) {}
S00S0017*67e74705SXin Li   S00(short x) : s(x) {}
S00S0018*67e74705SXin Li   S00(int x) : i(x) {}
19*67e74705SXin Li 
method00S0020*67e74705SXin Li   char method00(char x) { return x + x; }
method00S0021*67e74705SXin Li   short method00(short x) { return x + x; }
method00S0022*67e74705SXin Li   int method00(int x) { return x + x; }
23*67e74705SXin Li 
24*67e74705SXin Li   operator char() { return c; }
25*67e74705SXin Li   operator short() { return s; }
26*67e74705SXin Li   operator int() { return i; }
27*67e74705SXin Li };
28*67e74705SXin Li struct S01 {};
29*67e74705SXin Li struct S02 {};
30*67e74705SXin Li template <typename T> struct S03 {
31*67e74705SXin Li   struct S00 : N00::S00 {};
32*67e74705SXin Li };
33*67e74705SXin Li template <int I, template <typename> class U> struct S03<U<int>[I]>
34*67e74705SXin Li     : U<int>::S00 {
35*67e74705SXin Li   S03();
36*67e74705SXin Li   S03(int);
37*67e74705SXin Li   S03(short);
38*67e74705SXin Li   S03(char);
39*67e74705SXin Li   template <typename V = decltype(I)> S03(V);
40*67e74705SXin Li };
41*67e74705SXin Li template <> struct S03<S03<int>[42]> : S00 {};
42*67e74705SXin Li }
43*67e74705SXin Li 
44*67e74705SXin Li namespace N01 {
45*67e74705SXin Li struct S00 : N00::S00 {
46*67e74705SXin Li   using N00::S00::S00;
47*67e74705SXin Li };
48*67e74705SXin Li struct S01 {};
49*67e74705SXin Li struct S02 {};
50*67e74705SXin Li }
51*67e74705SXin Li 
52*67e74705SXin Li using namespace N00;
53*67e74705SXin Li 
54*67e74705SXin Li template <int I, template <typename> class U> template <typename V> S03<U<int>[I]>::S03(V x) : S00(x) {}
55*67e74705SXin Li template <int I, template <typename> class U> S03<U<int>[I]>::S03() : S00(I) {}
56*67e74705SXin Li template <int I, template <typename> class U> S03<U<int>[I]>::S03(char x) : S00(x) {}
57*67e74705SXin Li template <int I, template <typename> class U> S03<U<int>[I]>::S03(short x) : S00(x) {}
58*67e74705SXin Li template <int I, template <typename> class U> S03<U<int>[I]>::S03(int x) : S00(x) {}
59*67e74705SXin Li 
60*67e74705SXin Li #pragma weak pragma_weak00
61*67e74705SXin Li #pragma weak pragma_weak01
62*67e74705SXin Li #pragma weak pragma_weak02
63*67e74705SXin Li #pragma weak pragma_weak03
64*67e74705SXin Li #pragma weak pragma_weak04
65*67e74705SXin Li #pragma weak pragma_weak05
66*67e74705SXin Li 
67*67e74705SXin Li extern "C" int pragma_weak00();
68*67e74705SXin Li extern "C" int pragma_weak01();
69*67e74705SXin Li extern "C" int pragma_weak02();
70*67e74705SXin Li extern "C" int pragma_weak03;
71*67e74705SXin Li extern "C" int pragma_weak04;
72*67e74705SXin Li extern "C" int pragma_weak05;
73*67e74705SXin Li 
74*67e74705SXin Li #endif
75