1*67e74705SXin Li #ifndef STRESS1_COMMON_H 2*67e74705SXin Li #define STRESS1_COMMON_H 3*67e74705SXin Li function00(char x)4*67e74705SXin Liinline char function00(char x) { return x + x; } function00(short x)5*67e74705SXin Liinline short function00(short x) { return x + x; } function00(int x)6*67e74705SXin Liinline 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