1*b032e3ffSisuckatcs // RUN: %clang_analyze_cc1 %s \ 2*b032e3ffSisuckatcs // RUN: -analyzer-checker=debug.AnalysisOrder \ 3*b032e3ffSisuckatcs // RUN: -analyzer-config debug.AnalysisOrder:PreCall=true \ 4*b032e3ffSisuckatcs // RUN: -analyzer-config debug.AnalysisOrder:PostCall=true \ 5*b032e3ffSisuckatcs // RUN: 2>&1 | FileCheck %s 6*b032e3ffSisuckatcs 7*b032e3ffSisuckatcs // This test ensures that eval::Call event will be triggered for constructors. 8*b032e3ffSisuckatcs 9*b032e3ffSisuckatcs class C { 10*b032e3ffSisuckatcs public: C()11*b032e3ffSisuckatcs C(){}; 12*b032e3ffSisuckatcs }; 13*b032e3ffSisuckatcs stack()14*b032e3ffSisuckatcsvoid stack() { 15*b032e3ffSisuckatcs C arr[4]; 16*b032e3ffSisuckatcs C *arr2 = new C[4]; 17*b032e3ffSisuckatcs C arr3[2][2]; 18*b032e3ffSisuckatcs } 19*b032e3ffSisuckatcs 20*b032e3ffSisuckatcs // C arr[4]; 21*b032e3ffSisuckatcs // CHECK: PreCall (C::C) [CXXConstructorCall] 22*b032e3ffSisuckatcs // CHECK-NEXT: PostCall (C::C) [CXXConstructorCall] 23*b032e3ffSisuckatcs // CHECK-NEXT: PreCall (C::C) [CXXConstructorCall] 24*b032e3ffSisuckatcs // CHECK-NEXT: PostCall (C::C) [CXXConstructorCall] 25*b032e3ffSisuckatcs // CHECK-NEXT: PreCall (C::C) [CXXConstructorCall] 26*b032e3ffSisuckatcs // CHECK-NEXT: PostCall (C::C) [CXXConstructorCall] 27*b032e3ffSisuckatcs // CHECK-NEXT: PreCall (C::C) [CXXConstructorCall] 28*b032e3ffSisuckatcs // CHECK-NEXT: PostCall (C::C) [CXXConstructorCall] 29*b032e3ffSisuckatcs // 30*b032e3ffSisuckatcs // C *arr2 = new C[4]; 31*b032e3ffSisuckatcs // CHECK-NEXT: PreCall (operator new[]) [CXXAllocatorCall] 32*b032e3ffSisuckatcs // CHECK-NEXT: PostCall (operator new[]) [CXXAllocatorCall] 33*b032e3ffSisuckatcs // CHECK-NEXT: PreCall (C::C) [CXXConstructorCall] 34*b032e3ffSisuckatcs // CHECK-NEXT: PostCall (C::C) [CXXConstructorCall] 35*b032e3ffSisuckatcs // CHECK-NEXT: PreCall (C::C) [CXXConstructorCall] 36*b032e3ffSisuckatcs // CHECK-NEXT: PostCall (C::C) [CXXConstructorCall] 37*b032e3ffSisuckatcs // CHECK-NEXT: PreCall (C::C) [CXXConstructorCall] 38*b032e3ffSisuckatcs // CHECK-NEXT: PostCall (C::C) [CXXConstructorCall] 39*b032e3ffSisuckatcs // CHECK-NEXT: PreCall (C::C) [CXXConstructorCall] 40*b032e3ffSisuckatcs // CHECK-NEXT: PostCall (C::C) [CXXConstructorCall] 41*b032e3ffSisuckatcs // 42*b032e3ffSisuckatcs // C arr3[2][2]; 43*b032e3ffSisuckatcs // CHECK-NEXT: PreCall (C::C) [CXXConstructorCall] 44*b032e3ffSisuckatcs // CHECK-NEXT: PostCall (C::C) [CXXConstructorCall] 45*b032e3ffSisuckatcs // CHECK-NEXT: PreCall (C::C) [CXXConstructorCall] 46*b032e3ffSisuckatcs // CHECK-NEXT: PostCall (C::C) [CXXConstructorCall] 47*b032e3ffSisuckatcs // CHECK-NEXT: PreCall (C::C) [CXXConstructorCall] 48*b032e3ffSisuckatcs // CHECK-NEXT: PostCall (C::C) [CXXConstructorCall] 49*b032e3ffSisuckatcs // CHECK-NEXT: PreCall (C::C) [CXXConstructorCall] 50*b032e3ffSisuckatcs // CHECK-NEXT: PostCall (C::C) [CXXConstructorCall] 51