brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 4acdaaf Raw
81 lines · cpp
1// RUN: %clang_analyze_cc1 \2// RUN:   -analyzer-checker=core,debug.ExprInspection %s -verify3 4// These test cases demonstrate lack of Static Analyzer features.5// The FIXME: tags indicate where we expect different output.6 7// Handle constructors within new[].8 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[].13 14void clang_analyzer_eval(bool);15 16struct init_with_list {17  int a;18  init_with_list() : a(1) {}19};20 21struct init_in_body {22  int a;23  init_in_body() { a = 1; }24};25 26struct init_default_member {27  int a = 1;28};29 30void test_automatic() {31 32  init_with_list a1;33  init_in_body a2;34  init_default_member a3;35 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}}39}40 41void test_dynamic() {42 43  auto *a1 = new init_with_list;44  auto *a2 = new init_in_body;45  auto *a3 = new init_default_member;46 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}}50 51  delete a1;52  delete a2;53  delete a3;54}55 56void test_automatic_aggregate() {57 58  init_with_list a1[1];59  init_in_body a2[1];60  init_default_member a3[1];61 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}}65}66 67void test_dynamic_aggregate() {68 69  auto *a1 = new init_with_list[1];70  auto *a2 = new init_in_body[1];71  auto *a3 = new init_default_member[1];72 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}}76 77  delete[] a1;78  delete[] a2;79  delete[] a3;80}81