[clang] Handle __declspec() attributes in using
[llvm-project.git] / clang / test / Analysis / handle_constructors_with_new_array.cpp
blobf0027ede93713634414f4efda7084a68bc087075
1 // RUN: %clang_cc1 -fsyntax-only -analyze \
2 // RUN: -analyzer-checker=core,debug.ExprInspection %s -verify
4 // These test cases demonstrate lack of Static Analyzer features.
5 // The FIXME: tags indicate where we expect different output.
7 // Handle constructors within new[].
9 // When an array of objects is allocated using the operator new[],
10 // constructors for all elements of the array are called.
11 // We should model (potentially some of) such evaluations,
12 // and the same applies for destructors called from operator delete[].
14 void clang_analyzer_eval(bool);
16 struct init_with_list {
17 int a;
18 init_with_list() : a(1) {}
21 struct init_in_body {
22 int a;
23 init_in_body() { a = 1; }
26 struct init_default_member {
27 int a = 1;
30 void test_automatic() {
32 init_with_list a1;
33 init_in_body a2;
34 init_default_member a3;
36 clang_analyzer_eval(a1.a == 1); // expected-warning {{TRUE}}
37 clang_analyzer_eval(a2.a == 1); // expected-warning {{TRUE}}
38 clang_analyzer_eval(a3.a == 1); // expected-warning {{TRUE}}
41 void test_dynamic() {
43 auto *a1 = new init_with_list;
44 auto *a2 = new init_in_body;
45 auto *a3 = new init_default_member;
47 clang_analyzer_eval(a1->a == 1); // expected-warning {{TRUE}}
48 clang_analyzer_eval(a2->a == 1); // expected-warning {{TRUE}}
49 clang_analyzer_eval(a3->a == 1); // expected-warning {{TRUE}}
51 delete a1;
52 delete a2;
53 delete a3;
56 void test_automatic_aggregate() {
58 init_with_list a1[1];
59 init_in_body a2[1];
60 init_default_member a3[1];
62 clang_analyzer_eval(a1[0].a == 1); // expected-warning {{TRUE}}
63 clang_analyzer_eval(a2[0].a == 1); // expected-warning {{TRUE}}
64 clang_analyzer_eval(a3[0].a == 1); // expected-warning {{TRUE}}
67 void test_dynamic_aggregate() {
69 auto *a1 = new init_with_list[1];
70 auto *a2 = new init_in_body[1];
71 auto *a3 = new init_default_member[1];
73 clang_analyzer_eval(a1[0].a == 1); // expected-warning {{TRUE}}
74 clang_analyzer_eval(a2[0].a == 1); // expected-warning {{TRUE}}
75 clang_analyzer_eval(a3[0].a == 1); // expected-warning {{TRUE}}
77 delete[] a1;
78 delete[] a2;
79 delete[] a3;