Skip to content

[analyzer] Add more C++ list initializer tests and regroup #129182

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
154 changes: 0 additions & 154 deletions clang/test/Analysis/initialization.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,105 +4,6 @@ template <typename T>
void clang_analyzer_dump(T x);
void clang_analyzer_eval(int);

struct S {
int a = 3;
};
S const sarr[2] = {};
void definit() {
int i = 1;
// FIXME: Should recognize that it is 3.
clang_analyzer_eval(sarr[i].a); // expected-warning{{UNKNOWN}}
}

int const glob_arr1[3] = {};
void glob_array_index1() {
clang_analyzer_eval(glob_arr1[0] == 0); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr1[1] == 0); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr1[2] == 0); // expected-warning{{TRUE}}
}

void glob_invalid_index1() {
const int *ptr = glob_arr1;
int idx = -42;
auto x = ptr[idx]; // expected-warning{{uninitialized}}
}

void glob_symbolic_index1(int idx) {
clang_analyzer_dump(glob_arr1[idx]); // expected-warning{{Unknown}}
}

int const glob_arr2[4] = {1, 2};
void glob_ptr_index1() {
int const *ptr = glob_arr2;
clang_analyzer_eval(ptr[0] == 1); // expected-warning{{TRUE}}
clang_analyzer_eval(ptr[1] == 2); // expected-warning{{TRUE}}
clang_analyzer_eval(ptr[2] == 0); // expected-warning{{TRUE}}
clang_analyzer_eval(ptr[3] == 0); // expected-warning{{TRUE}}
clang_analyzer_eval(ptr[4] == 0); // expected-warning{{UNDEFINED}}
}

void glob_invalid_index2() {
const int *ptr = glob_arr2;
int idx = 42;
auto x = ptr[idx]; // expected-warning{{uninitialized}}
}

const float glob_arr3[] = {
0.0000, 0.0235, 0.0470, 0.0706, 0.0941, 0.1176};
float no_warn_garbage_value() {
return glob_arr3[0]; // no-warning (not meaningful)
}

int const glob_arr4[4][2] = {};
void glob_array_index2() {
clang_analyzer_eval(glob_arr4[0][0] == 0); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr4[1][0] == 0); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr4[1][1] == 0); // expected-warning{{TRUE}}
}

void glob_invalid_index3() {
int idx = -42;
auto x = glob_arr4[1][idx]; // expected-warning{{uninitialized}}
}

void glob_invalid_index4() {
const int *ptr = glob_arr4[1];
int idx = -42;
auto x = ptr[idx]; // expected-warning{{uninitialized}}
}

int const glob_arr5[4][2] = {{1}, 3, 4, 5};
void glob_array_index3() {
clang_analyzer_eval(glob_arr5[0][0] == 1); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr5[0][1] == 0); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr5[1][0] == 3); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr5[1][1] == 4); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr5[2][0] == 5); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr5[2][1] == 0); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr5[3][0] == 0); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr5[3][1] == 0); // expected-warning{{TRUE}}
}

void glob_ptr_index2() {
int const *ptr = glob_arr5[1];
clang_analyzer_eval(ptr[0] == 3); // expected-warning{{TRUE}}
clang_analyzer_eval(ptr[1] == 4); // expected-warning{{TRUE}}
clang_analyzer_eval(ptr[2] == 5); // expected-warning{{UNDEFINED}}
clang_analyzer_eval(ptr[3] == 0); // expected-warning{{UNDEFINED}}
clang_analyzer_eval(ptr[4] == 0); // expected-warning{{UNDEFINED}}
}

void glob_invalid_index5() {
int idx = -42;
auto x = glob_arr5[1][idx]; // expected-warning{{uninitialized}}
}

void glob_invalid_index6() {
int const *ptr = &glob_arr5[1][0];
int idx = 42;
auto x = ptr[idx]; // expected-warning{{uninitialized}}
}

extern const int glob_arr_no_init[10];
void glob_array_index4() {
clang_analyzer_eval(glob_arr_no_init[2]); // expected-warning{{UNKNOWN}}
Expand Down Expand Up @@ -147,26 +48,6 @@ void glob_invalid_index8() {
auto x = ptr[idx]; // expected-warning{{uninitialized}}
}

char const glob_arr7[5] = {"123"};
void glob_array_index6() {
clang_analyzer_eval(glob_arr7[0] == '1'); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr7[1] == '2'); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr7[2] == '3'); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr7[3] == '\0'); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr7[4] == '\0'); // expected-warning{{TRUE}}
}

void glob_invalid_index9() {
int idx = -42;
auto x = glob_arr7[idx]; // expected-warning{{uninitialized}}
}

void glob_invalid_index10() {
const char *ptr = glob_arr7;
int idx = 42;
auto x = ptr[idx]; // expected-warning{{uninitialized}}
}

char const *const glob_ptr8 = "123";
void glob_ptr_index4() {
clang_analyzer_eval(glob_ptr8[0] == '1'); // expected-warning{{TRUE}}
Expand Down Expand Up @@ -221,38 +102,3 @@ void glob_ptr_index8() {
clang_analyzer_eval(glob_ptr12[2] == 'c'); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_ptr12[3] == '\0'); // expected-warning{{TRUE}}
}

typedef int Int;
typedef Int const CInt;
typedef CInt Arr[2];
typedef Arr Arr2[4];
Arr2 glob_arr8 = {{1}, 3, 4, 5}; // const int[4][2]
void glob_array_typedef1() {
clang_analyzer_eval(glob_arr8[0][0] == 1); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr8[0][1] == 0); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr8[1][0] == 3); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr8[1][1] == 4); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr8[2][0] == 5); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr8[2][1] == 0); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr8[3][0] == 0); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr8[3][1] == 0); // expected-warning{{TRUE}}
}

const int glob_arr9[2][4] = {{(1), 2, ((3)), 4}, 5, 6, (((7)))};
void glob_array_parentheses1() {
clang_analyzer_eval(glob_arr9[0][0] == 1); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr9[0][1] == 2); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr9[0][2] == 3); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr9[0][3] == 4); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr9[1][0] == 5); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr9[1][1] == 6); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr9[1][2] == 7); // expected-warning{{TRUE}}
clang_analyzer_eval(glob_arr9[1][3] == 0); // expected-warning{{TRUE}}
}

enum class E {};
const E glob[] = {{}};
void initlistWithinInitlist() {
// no-crash
clang_analyzer_dump(glob[0]); // expected-warning-re {{reg_${{[0-9]+}}<enum E Element{glob,0 S64b,enum E}>}}
}
Loading