187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// RUN: %clang_cc1 -triple %ms_abi_triple -ast-print %s -std=gnu++11 | FileCheck %s 2a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedman 3a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedman// CHECK: r; 4a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedman// CHECK-NEXT: (r->method()); 5a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedmanstruct MyClass 6a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedman{ 7a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedman void method() {} 8a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedman}; 9a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedman 10a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedmanstruct Reference 11a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedman{ 12a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedman MyClass* object; 13a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedman MyClass* operator ->() { return object; } 14a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedman}; 15a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedman 1625c9bc117d8825dce7911f6fddf3725d1914a7c6Eli Friedmanvoid test1() { 17a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedman Reference r; 18a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedman (r->method()); 19a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedman} 20a143a9dcebea2ade67a2e9de1a939fbb70964015Eli Friedman 21915c07db05375d563187f8b75fa4f766a5220b75Eli Friedman// CHECK: if (int a = 1) 22915c07db05375d563187f8b75fa4f766a5220b75Eli Friedman// CHECK: while (int a = 1) 23915c07db05375d563187f8b75fa4f766a5220b75Eli Friedman// CHECK: switch (int a = 1) 24915c07db05375d563187f8b75fa4f766a5220b75Eli Friedman 2525c9bc117d8825dce7911f6fddf3725d1914a7c6Eli Friedmanvoid test2() 26915c07db05375d563187f8b75fa4f766a5220b75Eli Friedman{ 27915c07db05375d563187f8b75fa4f766a5220b75Eli Friedman if (int a = 1) { } 28915c07db05375d563187f8b75fa4f766a5220b75Eli Friedman while (int a = 1) { } 29915c07db05375d563187f8b75fa4f766a5220b75Eli Friedman switch (int a = 1) { } 30915c07db05375d563187f8b75fa4f766a5220b75Eli Friedman} 31915c07db05375d563187f8b75fa4f766a5220b75Eli Friedman 32d03ef04ed32e9c9d7c714e8f1b31693c5b907dd2Eli Friedman// CHECK: new (1) int; 33d03ef04ed32e9c9d7c714e8f1b31693c5b907dd2Eli Friedmanvoid *operator new (typeof(sizeof(1)), int, int = 2); 3425c9bc117d8825dce7911f6fddf3725d1914a7c6Eli Friedmanvoid test3() { 35d03ef04ed32e9c9d7c714e8f1b31693c5b907dd2Eli Friedman new (1) int; 36d03ef04ed32e9c9d7c714e8f1b31693c5b907dd2Eli Friedman} 37d03ef04ed32e9c9d7c714e8f1b31693c5b907dd2Eli Friedman 38d03ef04ed32e9c9d7c714e8f1b31693c5b907dd2Eli Friedman// CHECK: new X; 39d03ef04ed32e9c9d7c714e8f1b31693c5b907dd2Eli Friedmanstruct X { 40d03ef04ed32e9c9d7c714e8f1b31693c5b907dd2Eli Friedman void *operator new (typeof(sizeof(1)), int = 2); 41d03ef04ed32e9c9d7c714e8f1b31693c5b907dd2Eli Friedman}; 4225c9bc117d8825dce7911f6fddf3725d1914a7c6Eli Friedmanvoid test4() { new X; } 43eafa9d4d0d8b97f006dbd19c1e51d14663c8c5c3Eli Friedman 44eafa9d4d0d8b97f006dbd19c1e51d14663c8c5c3Eli Friedman// CHECK: for (int i = 2097, j = 42; false;) 4525c9bc117d8825dce7911f6fddf3725d1914a7c6Eli Friedmanvoid test5() { 46eafa9d4d0d8b97f006dbd19c1e51d14663c8c5c3Eli Friedman for (int i = 2097, j = 42; false;) {} 47eafa9d4d0d8b97f006dbd19c1e51d14663c8c5c3Eli Friedman} 4825c9bc117d8825dce7911f6fddf3725d1914a7c6Eli Friedman 4925c9bc117d8825dce7911f6fddf3725d1914a7c6Eli Friedman// CHECK: test6fn((int &)y); 5025c9bc117d8825dce7911f6fddf3725d1914a7c6Eli Friedmanvoid test6fn(int& x); 5125c9bc117d8825dce7911f6fddf3725d1914a7c6Eli Friedmanvoid test6() { 5225c9bc117d8825dce7911f6fddf3725d1914a7c6Eli Friedman unsigned int y = 0; 5325c9bc117d8825dce7911f6fddf3725d1914a7c6Eli Friedman test6fn((int&)y); 5425c9bc117d8825dce7911f6fddf3725d1914a7c6Eli Friedman} 55e1aebe1e3aabe955e3805e994647e5e31dcc4d8cEli Friedman 560e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: S s(1, 2); 57e1aebe1e3aabe955e3805e994647e5e31dcc4d8cEli Friedman 58e1aebe1e3aabe955e3805e994647e5e31dcc4d8cEli Friedmantemplate <class S> void test7() 59e1aebe1e3aabe955e3805e994647e5e31dcc4d8cEli Friedman{ 60e1aebe1e3aabe955e3805e994647e5e31dcc4d8cEli Friedman S s( 1,2 ); 61e1aebe1e3aabe955e3805e994647e5e31dcc4d8cEli Friedman} 62e1aebe1e3aabe955e3805e994647e5e31dcc4d8cEli Friedman 63a7a38cb64e0781b8489332cedcfae9c8f95ba22eEli Friedman 64a7a38cb64e0781b8489332cedcfae9c8f95ba22eEli Friedman// CHECK: t.~T(); 65a7a38cb64e0781b8489332cedcfae9c8f95ba22eEli Friedman 66a7a38cb64e0781b8489332cedcfae9c8f95ba22eEli Friedmantemplate <typename T> void test8(T t) { t.~T(); } 67a45451d0959501c7d82582c61571a29cfdacdb0bEli Friedman 68a45451d0959501c7d82582c61571a29cfdacdb0bEli Friedman 6987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK: enum E 70a45451d0959501c7d82582c61571a29cfdacdb0bEli Friedman// CHECK-NEXT: A, 71a45451d0959501c7d82582c61571a29cfdacdb0bEli Friedman// CHECK-NEXT: B, 72a45451d0959501c7d82582c61571a29cfdacdb0bEli Friedman// CHECK-NEXT: C 73a45451d0959501c7d82582c61571a29cfdacdb0bEli Friedman// CHECK-NEXT: }; 74a45451d0959501c7d82582c61571a29cfdacdb0bEli Friedman// CHECK-NEXT: {{^[ ]+}}E a = A; 75a45451d0959501c7d82582c61571a29cfdacdb0bEli Friedman 76a45451d0959501c7d82582c61571a29cfdacdb0bEli Friedmanstruct test9 77a45451d0959501c7d82582c61571a29cfdacdb0bEli Friedman{ 78a45451d0959501c7d82582c61571a29cfdacdb0bEli Friedman void f() 79a45451d0959501c7d82582c61571a29cfdacdb0bEli Friedman { 80a45451d0959501c7d82582c61571a29cfdacdb0bEli Friedman enum E { A, B, C }; 81a45451d0959501c7d82582c61571a29cfdacdb0bEli Friedman E a = A; 82a45451d0959501c7d82582c61571a29cfdacdb0bEli Friedman } 83a45451d0959501c7d82582c61571a29cfdacdb0bEli Friedman}; 840a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenko 850a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenkonamespace test10 { 860a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenko namespace M { 870a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenko template<typename T> 880a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenko struct X { 890a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenko enum { value }; 900a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenko }; 910a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenko } 920a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenko} 930a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenko 940a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenkotypedef int INT; 950a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenko 960a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenko// CHECK: test11 970a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenko// CHECK-NEXT: return test10::M::X<INT>::value; 980a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenkoint test11() { 990a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenko return test10::M::X<INT>::value; 1000a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenko} 1010a04cbd98f65827918e857e7ab5597676b9d8e3bDmitri Gribenko 1025250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko 1035250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenkostruct DefaultArgClass 1045250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko{ 1055250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko DefaultArgClass(int a = 1) {} 106d3bb9ffb9aa3c78ac9b525f5c8071c5a7c5309d4Rafael Espindola DefaultArgClass(int a, int b, int c = 1) {} 1075250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko}; 1085250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko 1095250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenkostruct NoArgClass 1105250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko{ 1115250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko NoArgClass() {} 1125250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko}; 1135250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko 11493aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenkostruct VirualDestrClass 11593aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenko{ 11693aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenko VirualDestrClass(int arg); 11793aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenko virtual ~VirualDestrClass(); 11893aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenko}; 11993aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenko 12093aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenkostruct ConstrWithCleanupsClass 12193aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenko{ 12293aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenko ConstrWithCleanupsClass(const VirualDestrClass& cplx = VirualDestrClass(42)); 12393aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenko}; 12493aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenko 1255250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko// CHECK: test12 1265250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko// CHECK-NEXT: DefaultArgClass useDefaultArg; 1275250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko// CHECK-NEXT: DefaultArgClass overrideDefaultArg(1); 128d3bb9ffb9aa3c78ac9b525f5c8071c5a7c5309d4Rafael Espindola// CHECK-NEXT: DefaultArgClass(1, 2); 129d3bb9ffb9aa3c78ac9b525f5c8071c5a7c5309d4Rafael Espindola// CHECK-NEXT: DefaultArgClass(1, 2, 3); 1305250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko// CHECK-NEXT: NoArgClass noArg; 13193aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenko// CHECK-NEXT: ConstrWithCleanupsClass cwcNoArg; 13293aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenko// CHECK-NEXT: ConstrWithCleanupsClass cwcOverrideArg(48); 13393aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenko// CHECK-NEXT: ConstrWithCleanupsClass cwcExplicitArg(VirualDestrClass(56)); 1345250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenkovoid test12() { 1355250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko DefaultArgClass useDefaultArg; 1365250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko DefaultArgClass overrideDefaultArg(1); 137d3bb9ffb9aa3c78ac9b525f5c8071c5a7c5309d4Rafael Espindola DefaultArgClass tempWithDefaultArg = DefaultArgClass(1, 2); 138d3bb9ffb9aa3c78ac9b525f5c8071c5a7c5309d4Rafael Espindola DefaultArgClass tempWithExplictArg = DefaultArgClass(1, 2, 3); 1395250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko NoArgClass noArg; 14093aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenko ConstrWithCleanupsClass cwcNoArg; 14193aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenko ConstrWithCleanupsClass cwcOverrideArg(48); 14293aa2db250a0e67192ab2a5417e4dfd5530d6f56Dmitri Gribenko ConstrWithCleanupsClass cwcExplicitArg(VirualDestrClass(56)); 1435250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko} 1445250e2b24f7288fb31dc6357831fcbc4ced26693Dmitri Gribenko 14528fff5394fc9521ec0ee1d4f7ef4cca5e4f78071Richard Smith// CHECK: void test13() { 14628fff5394fc9521ec0ee1d4f7ef4cca5e4f78071Richard Smith// CHECK: _Atomic(int) i; 14728fff5394fc9521ec0ee1d4f7ef4cca5e4f78071Richard Smith// CHECK: __c11_atomic_init(&i, 0); 14828fff5394fc9521ec0ee1d4f7ef4cca5e4f78071Richard Smith// CHECK: __c11_atomic_load(&i, 0); 14928fff5394fc9521ec0ee1d4f7ef4cca5e4f78071Richard Smith// CHECK: } 15028fff5394fc9521ec0ee1d4f7ef4cca5e4f78071Richard Smithvoid test13() { 15128fff5394fc9521ec0ee1d4f7ef4cca5e4f78071Richard Smith _Atomic(int) i; 15228fff5394fc9521ec0ee1d4f7ef4cca5e4f78071Richard Smith __c11_atomic_init(&i, 0); 15328fff5394fc9521ec0ee1d4f7ef4cca5e4f78071Richard Smith __c11_atomic_load(&i, 0); 15428fff5394fc9521ec0ee1d4f7ef4cca5e4f78071Richard Smith} 15528fff5394fc9521ec0ee1d4f7ef4cca5e4f78071Richard Smith 15642acc0c357557574514814863cab950f23cbff5eEli Friedman 15742acc0c357557574514814863cab950f23cbff5eEli Friedman// CHECK: void test14() { 15842acc0c357557574514814863cab950f23cbff5eEli Friedman// CHECK: struct X { 15942acc0c357557574514814863cab950f23cbff5eEli Friedman// CHECK: union { 16042acc0c357557574514814863cab950f23cbff5eEli Friedman// CHECK: int x; 16142acc0c357557574514814863cab950f23cbff5eEli Friedman// CHECK: } x; 16242acc0c357557574514814863cab950f23cbff5eEli Friedman// CHECK: }; 16342acc0c357557574514814863cab950f23cbff5eEli Friedman// CHECK: } 16442acc0c357557574514814863cab950f23cbff5eEli Friedmanvoid test14() { 16542acc0c357557574514814863cab950f23cbff5eEli Friedman struct X { union { int x; } x; }; 16642acc0c357557574514814863cab950f23cbff5eEli Friedman} 167651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 168651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 169651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: float test15() { 170651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: return __builtin_asinf(1.F); 171651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: } 172651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NOT: extern "C" 173651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesfloat test15() { 174651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return __builtin_asinf(1.0F); 175651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 176651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 177651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace PR18776 { 178651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct A { 179651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines operator void *(); 180651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines explicit operator bool(); 181651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines A operator&(A); 182651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 183651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 184651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: struct A 185651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: {{^[ ]*operator}} void *(); 186651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK-NEXT: {{^[ ]*explicit}} operator bool(); 187651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 188651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid bar(void *); 189651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 190651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid foo() { 191651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines A a, b; 192651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines bar(a & b); 193651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: bar(a & b); 194651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (a & b) 195651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: if (a & b) 196651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return; 197651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 198651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 1996bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 2006bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesnamespace { 2016bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid test(int i) { 2026bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines switch (i) { 2036bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case 1: 2046bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // CHECK: {{\[\[clang::fallthrough\]\]}} 2056bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines [[clang::fallthrough]]; 2066bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case 2: 2076bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines break; 2086bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 2096bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 2106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 211176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 212176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesnamespace { 213176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// CHECK: struct {{\[\[gnu::visibility\(\"hidden\"\)\]\]}} S; 214176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct [[gnu::visibility("hidden")]] S; 215176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 2160e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 2170e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: struct CXXFunctionalCastExprPrint fce = CXXFunctionalCastExprPrint{}; 2180e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct CXXFunctionalCastExprPrint {} fce = CXXFunctionalCastExprPrint{}; 2190e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 2200e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: struct CXXTemporaryObjectExprPrint toe = CXXTemporaryObjectExprPrint{}; 2210e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesstruct CXXTemporaryObjectExprPrint { CXXTemporaryObjectExprPrint(); } toe = CXXTemporaryObjectExprPrint{}; 22287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 22387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainarnamespace PR24872 { 22487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK: template <typename T> struct Foo : T { 22587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar// CHECK: using T::operator-; 22687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainartemplate <typename T> struct Foo : T { 22787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar using T::operator-; 22887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar}; 22987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 2304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarnamespace dont_crash_on_auto_vars { 2324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct T { enum E {X = 12ll }; }; 2334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct S { 2344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar struct { int I; } ADecl; 2354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar static const auto Y = T::X; 2364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 2374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar//CHECK: static const auto Y = T::X; 2384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarconstexpr auto var = T::X; 2394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar//CHECK: constexpr auto var = T::X; 2404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 241