]>
git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gdc.test/runnable_cxx/extra-files/cpp_abi_tests.cpp
9 struct test19248_
{int a
;}; // Remove when `extern(C++, ns)` is gone
10 struct test19248
{int a
;};
14 // DMC doesn't support c++11
15 #elif defined (_MSC_VER) && _MSC_VER <= 1800
16 // MSVC2013 doesn't support char16_t/char32_t
27 S18784::S18784(int n
) : i(n
) {}
29 #ifdef __DMC__ // DMC doesn't support c++11
39 typedef SPack
<int> SInt
;
41 bool passthrough(bool value
) { return value
; }
42 signed char passthrough(signed char value
) { return value
; }
43 unsigned char passthrough(unsigned char value
) { return value
; }
44 char passthrough(char value
) { return value
; }
46 char16_t
passthrough(char16_t value
) { return value
; }
47 char32_t
passthrough(char32_t value
) { return value
; }
49 wchar_t passthrough(wchar_t value
) { return value
; }
50 short passthrough(short value
) { return value
; }
51 unsigned short passthrough(unsigned short value
) { return value
; }
52 int passthrough(int value
) { return value
; }
53 unsigned int passthrough(unsigned int value
) { return value
; }
54 long passthrough(long value
) { return value
; }
55 unsigned long passthrough(unsigned long value
) { return value
; }
56 long long passthrough(long long value
) { return value
; }
57 unsigned long long passthrough(unsigned long long value
) { return value
; }
58 float passthrough(float value
) { return value
; }
59 double passthrough(double value
) { return value
; }
60 S
passthrough(S value
) { return value
; }
61 std::test19248
passthrough(const std::test19248 value
) { return value
; }
62 std::test19248_
passthrough(const std::test19248_ value
) { return value
; }
63 SInt
passthrough(SInt value
) { return value
; }
65 bool passthrough_ptr(bool *value
) { return *value
; }
66 signed char passthrough_ptr(signed char *value
) { return *value
; }
67 unsigned char passthrough_ptr(unsigned char *value
) { return *value
; }
68 char passthrough_ptr(char *value
) { return *value
; }
70 char16_t
passthrough_ptr(char16_t
*value
) { return *value
; }
71 char32_t
passthrough_ptr(char32_t
*value
) { return *value
; }
73 wchar_t passthrough_ptr(wchar_t *value
) { return *value
; }
74 short passthrough_ptr(short *value
) { return *value
; }
75 unsigned short passthrough_ptr(unsigned short *value
) { return *value
; }
76 int passthrough_ptr(int *value
) { return *value
; }
77 unsigned int passthrough_ptr(unsigned int *value
) { return *value
; }
78 long passthrough_ptr(long *value
) { return *value
; }
79 unsigned long passthrough_ptr(unsigned long *value
) { return *value
; }
80 long long passthrough_ptr(long long *value
) { return *value
; }
81 unsigned long long passthrough_ptr(unsigned long long *value
) { return *value
; }
82 float passthrough_ptr(float *value
) { return *value
; }
83 double passthrough_ptr(double *value
) { return *value
; }
84 S
passthrough_ptr(S
*value
) { return *value
; }
85 std::test19248
passthrough_ptr(const std::test19248
*value
) { return *value
; }
86 std::test19248_
passthrough_ptr(const std::test19248_
*value
) { return *value
; }
87 SInt
passthrough_ptr(SInt
*value
) { return *value
; }
89 bool passthrough_ref(bool &value
) { return value
; }
90 signed char passthrough_ref(signed char &value
) { return value
; }
91 unsigned char passthrough_ref(unsigned char &value
) { return value
; }
92 char passthrough_ref(char &value
) { return value
; }
94 char16_t
passthrough_ref(char16_t
&value
) { return value
; }
95 char32_t
passthrough_ref(char32_t
&value
) { return value
; }
97 wchar_t passthrough_ref(wchar_t &value
) { return value
; }
98 short passthrough_ref(short &value
) { return value
; }
99 unsigned short passthrough_ref(unsigned short &value
) { return value
; }
100 int passthrough_ref(int &value
) { return value
; }
101 unsigned int passthrough_ref(unsigned int &value
) { return value
; }
102 long passthrough_ref(long &value
) { return value
; }
103 unsigned long passthrough_ref(unsigned long &value
) { return value
; }
104 long long passthrough_ref(long long &value
) { return value
; }
105 unsigned long long passthrough_ref(unsigned long long &value
) { return value
; }
106 float passthrough_ref(float &value
) { return value
; }
107 double passthrough_ref(double &value
) { return value
; }
108 S
passthrough_ref(S
&value
) { return value
; }
109 std::test19248
passthrough_ref(const std::test19248
&value
) { return value
; }
110 std::test19248_
passthrough_ref(const std::test19248_
&value
) { return value
; }
111 SInt
passthrough_ref(SInt
&value
) { return value
; }
115 // D: `char*, const(char)**`
116 int constFunction1(const char*, const char**) { return 1; }
117 // D: `const(char)*, const(char*)*`
118 int constFunction2(const char*, const char* const*) { return 2; }
119 // D: `const(char*), const(char**)*`
120 int constFunction3(const char* const, const char* const* const*) { return 3; }
121 // D: `const(char*), const(char***)`
122 int constFunction4(const char* const, const char* const* const* const) { return 42; }
128 SmallStruct(int); // implemented in D
129 SmallStruct(const SmallStruct
&);
131 SmallStruct::SmallStruct(const SmallStruct
&rhs
)
133 void smallStructCallBack(SmallStruct p
);
134 void smallStructTest(SmallStruct p
)
138 smallStructCallBack(p
);
148 Sdtor::~Sdtor() { ++counter
; }
149 int Sdtor::counter
= 0;
151 void consume(Sdtor value
) {}
153 void consume2(Sdtor value
);
154 void doConsume2(Sdtor
& value
)
159 // Uncomment when mangling is fixed
160 // typedef void(*fn0)();
161 // fn0 passthrough_fn0 (fn0 value) { return value; }
162 // typedef int (*fn1)(int);
163 // fn1 passthrough_fn1 (fn1 value) { return value; }