1 // RUN: %clang_cc1 -triple %ms_abi_triple -ast-print %s -std=gnu++11 | FileCheck %s
4 // CHECK-NEXT: (r->method());
13 MyClass* operator ->() { return object; }
21 // CHECK: if (int a = 1)
22 // CHECK: while (int a = 1)
23 // CHECK: switch (int a = 1)
29 switch (int a = 1) { }
32 // CHECK: new (1) int;
33 void *operator new (typeof(sizeof(1)), int, int = 2);
40 void *operator new (typeof(sizeof(1)), int = 2);
42 void test4() { new X; }
44 // CHECK: for (int i = 2097, j = 42; false;)
46 for (int i = 2097, j = 42; false;) {}
49 // CHECK: test6fn((int &)y);
58 template <class S> void test7()
66 template <typename T> void test8(T t) { t.~T(); }
74 // CHECK-NEXT: {{^[ ]+}}E a = A;
97 // CHECK-NEXT: return test10::M::X<INT>::value;
99 return test10::M::X<INT>::value;
103 struct DefaultArgClass
105 DefaultArgClass(int a = 1) {}
106 DefaultArgClass(int a, int b, int c = 1) {}
114 struct VirualDestrClass
116 VirualDestrClass(int arg);
117 virtual ~VirualDestrClass();
120 struct ConstrWithCleanupsClass
122 ConstrWithCleanupsClass(const VirualDestrClass& cplx = VirualDestrClass(42));
126 // CHECK-NEXT: DefaultArgClass useDefaultArg;
127 // CHECK-NEXT: DefaultArgClass overrideDefaultArg(1);
128 // CHECK-NEXT: DefaultArgClass(1, 2);
129 // CHECK-NEXT: DefaultArgClass(1, 2, 3);
130 // CHECK-NEXT: NoArgClass noArg;
131 // CHECK-NEXT: ConstrWithCleanupsClass cwcNoArg;
132 // CHECK-NEXT: ConstrWithCleanupsClass cwcOverrideArg(48);
133 // CHECK-NEXT: ConstrWithCleanupsClass cwcExplicitArg(VirualDestrClass(56));
135 DefaultArgClass useDefaultArg;
136 DefaultArgClass overrideDefaultArg(1);
137 DefaultArgClass tempWithDefaultArg = DefaultArgClass(1, 2);
138 DefaultArgClass tempWithExplictArg = DefaultArgClass(1, 2, 3);
140 ConstrWithCleanupsClass cwcNoArg;
141 ConstrWithCleanupsClass cwcOverrideArg(48);
142 ConstrWithCleanupsClass cwcExplicitArg(VirualDestrClass(56));
145 // CHECK: void test13() {
146 // CHECK: _Atomic(int) i;
147 // CHECK: __c11_atomic_init(&i, 0);
148 // CHECK: __c11_atomic_load(&i, 0);
152 __c11_atomic_init(&i, 0);
153 __c11_atomic_load(&i, 0);
157 // CHECK: void test14() {
165 struct X { union { int x; } x; };
169 // CHECK: float test15() {
170 // CHECK: return __builtin_asinf(1.F);
172 // CHECK-NOT: extern "C"
174 return __builtin_asinf(1.0F);
180 explicit operator bool();
185 // CHECK-NEXT: {{^[ ]*operator}} void *();
186 // CHECK-NEXT: {{^[ ]*explicit}} operator bool();
193 // CHECK: bar(a & b);
204 // CHECK: {{\[\[clang::fallthrough\]\]}}
205 [[clang::fallthrough]];
213 // CHECK: struct {{\[\[gnu::visibility\(\"hidden\"\)\]\]}} S;
214 struct [[gnu::visibility("hidden")]] S;
217 // CHECK: struct CXXFunctionalCastExprPrint {
218 // CHECK-NEXT: } fce = CXXFunctionalCastExprPrint{};
219 struct CXXFunctionalCastExprPrint {} fce = CXXFunctionalCastExprPrint{};
221 // CHECK: struct CXXTemporaryObjectExprPrint {
222 // CHECK-NEXT: CXXTemporaryObjectExprPrint();
223 // CHECK-NEXT: } toe = CXXTemporaryObjectExprPrint{};
224 struct CXXTemporaryObjectExprPrint { CXXTemporaryObjectExprPrint(); } toe = CXXTemporaryObjectExprPrint{};
227 // CHECK: template <typename T> struct Foo : T {
228 // CHECK: using T::operator-;
229 template <typename T> struct Foo : T {
234 namespace dont_crash_on_auto_vars {
235 struct T { enum E {X = 12ll }; };
237 struct { int I; } ADecl;
238 static const auto Y = T::X;
240 //CHECK: static const auto Y = T::X;
241 constexpr auto var = T::X;
242 //CHECK: constexpr auto var = T::X;