1253e80b019727451edb4cbcad71277fcbe05ff0eNico Weber// RUN: %clang_cc1 -ast-dump %s | FileCheck %s 2253e80b019727451edb4cbcad71277fcbe05ff0eNico Weber 3253e80b019727451edb4cbcad71277fcbe05ff0eNico Webertemplate<class T> 4253e80b019727451edb4cbcad71277fcbe05ff0eNico Weberclass P { 5253e80b019727451edb4cbcad71277fcbe05ff0eNico Weber public: 6253e80b019727451edb4cbcad71277fcbe05ff0eNico Weber P(T* t) {} 7253e80b019727451edb4cbcad71277fcbe05ff0eNico Weber}; 8253e80b019727451edb4cbcad71277fcbe05ff0eNico Weber 9253e80b019727451edb4cbcad71277fcbe05ff0eNico Webernamespace foo { 103a344f9fc7a62ad0a8d26b2a1ccf5e4989720d0cNico Weberclass A { public: A() {} }; 11253e80b019727451edb4cbcad71277fcbe05ff0eNico Weberenum B {}; 12253e80b019727451edb4cbcad71277fcbe05ff0eNico Webertypedef int C; 13253e80b019727451edb4cbcad71277fcbe05ff0eNico Weber} 14253e80b019727451edb4cbcad71277fcbe05ff0eNico Weber 15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// CHECK: VarDecl {{0x[0-9a-fA-F]+}} <line:16:1, col:36> col:15 ImplicitConstrArray 'foo::A [2]' 163a344f9fc7a62ad0a8d26b2a1ccf5e4989720d0cNico Weberstatic foo::A ImplicitConstrArray[2]; 173a344f9fc7a62ad0a8d26b2a1ccf5e4989720d0cNico Weber 18253e80b019727451edb4cbcad71277fcbe05ff0eNico Weberint main() { 190daaf32723ac78549c507c2a68a5300502703673Abramo Bagnara // CHECK: CXXNewExpr {{0x[0-9a-fA-F]+}} <col:19, col:28> 'foo::A *' 20253e80b019727451edb4cbcad71277fcbe05ff0eNico Weber P<foo::A> p14 = new foo::A; 210daaf32723ac78549c507c2a68a5300502703673Abramo Bagnara // CHECK: CXXNewExpr {{0x[0-9a-fA-F]+}} <col:19, col:28> 'foo::B *' 22253e80b019727451edb4cbcad71277fcbe05ff0eNico Weber P<foo::B> p24 = new foo::B; 23253e80b019727451edb4cbcad71277fcbe05ff0eNico Weber // CHECK: CXXNewExpr {{0x[0-9a-fA-F]+}} <col:19, col:28> 'foo::C *' 24253e80b019727451edb4cbcad71277fcbe05ff0eNico Weber P<foo::C> pr4 = new foo::C; 25253e80b019727451edb4cbcad71277fcbe05ff0eNico Weber} 2676f11c953adb0df7ed4c7776538a592435cd7463Nico Weber 2776f11c953adb0df7ed4c7776538a592435cd7463Nico Weberfoo::A getName() { 280daaf32723ac78549c507c2a68a5300502703673Abramo Bagnara // CHECK: CXXConstructExpr {{0x[0-9a-fA-F]+}} <col:10, col:17> 'foo::A' 2976f11c953adb0df7ed4c7776538a592435cd7463Nico Weber return foo::A(); 3076f11c953adb0df7ed4c7776538a592435cd7463Nico Weber} 31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid destruct(foo::A *a1, foo::A *a2, P<int> *p1) { 33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: MemberExpr {{0x[0-9a-fA-F]+}} <col:3, col:8> '<bound member function type>' ->~A 34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines a1->~A(); 35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: MemberExpr {{0x[0-9a-fA-F]+}} <col:3, col:16> '<bound member function type>' ->~A 36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines a2->foo::A::~A(); 37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines // CHECK: MemberExpr {{0x[0-9a-fA-F]+}} <col:3, col:13> '<bound member function type>' ->~P 38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines p1->~P<int>(); 39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 40