xref: /llvm-project/clang/test/Analysis/cxxctr-array-evalcall-analysis-order.cpp (revision b032e3ff6121a969b2e90ad7bf493c2d5d7ac3a2)
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*b032e3ffSisuckatcs void 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