brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.7 KiB · d064dd6 Raw
259 lines · cpp
1// RUN: %clang_analyze_cc1 -std=c++14 -triple i386-apple-darwin10 -analyzer-config eagerly-assume=false -analyzer-checker=core.uninitialized.Assign,core.builtin,debug.ExprInspection,core.uninitialized.UndefReturn -verify %s2 3template <typename T>4void clang_analyzer_dump(T x);5void clang_analyzer_eval(int);6 7struct S {8  int a = 3;9};10S const sarr[2] = {};11void definit() {12  int i = 1;13  // FIXME: Should recognize that it is 3.14  clang_analyzer_eval(sarr[i].a); // expected-warning{{UNKNOWN}}15}16 17int const glob_arr1[3] = {};18void glob_array_index1() {19  clang_analyzer_eval(glob_arr1[0] == 0); // expected-warning{{TRUE}}20  clang_analyzer_eval(glob_arr1[1] == 0); // expected-warning{{TRUE}}21  clang_analyzer_eval(glob_arr1[2] == 0); // expected-warning{{TRUE}}22}23 24void glob_invalid_index1() {25  const int *ptr = glob_arr1;26  int idx = -42;27  auto x = ptr[idx]; // expected-warning{{uninitialized}}28}29 30void glob_symbolic_index1(int idx) {31  clang_analyzer_dump(glob_arr1[idx]); // expected-warning{{Unknown}}32}33 34int const glob_arr2[4] = {1, 2};35void glob_ptr_index1() {36  int const *ptr = glob_arr2;37  clang_analyzer_eval(ptr[0] == 1); // expected-warning{{TRUE}}38  clang_analyzer_eval(ptr[1] == 2); // expected-warning{{TRUE}}39  clang_analyzer_eval(ptr[2] == 0); // expected-warning{{TRUE}}40  clang_analyzer_eval(ptr[3] == 0); // expected-warning{{TRUE}}41  clang_analyzer_eval(ptr[4] == 0); // expected-warning{{UNDEFINED}}42}43 44void glob_invalid_index2() {45  const int *ptr = glob_arr2;46  int idx = 42;47  auto x = ptr[idx]; // expected-warning{{uninitialized}}48}49 50const float glob_arr3[] = {51    0.0000, 0.0235, 0.0470, 0.0706, 0.0941, 0.1176};52float no_warn_garbage_value() {53  return glob_arr3[0]; // no-warning (not meaningful)54}55 56int const glob_arr4[4][2] = {};57void glob_array_index2() {58  clang_analyzer_eval(glob_arr4[0][0] == 0); // expected-warning{{TRUE}}59  clang_analyzer_eval(glob_arr4[1][0] == 0); // expected-warning{{TRUE}}60  clang_analyzer_eval(glob_arr4[1][1] == 0); // expected-warning{{TRUE}}61}62 63void glob_invalid_index3() {64  int idx = -42;65  auto x = glob_arr4[1][idx]; // expected-warning{{uninitialized}}66}67 68void glob_invalid_index4() {69  const int *ptr = glob_arr4[1];70  int idx = -42;71  auto x = ptr[idx]; // expected-warning{{uninitialized}}72}73 74int const glob_arr5[4][2] = {{1}, 3, 4, 5};75void glob_array_index3() {76  clang_analyzer_eval(glob_arr5[0][0] == 1); // expected-warning{{TRUE}}77  clang_analyzer_eval(glob_arr5[0][1] == 0); // expected-warning{{TRUE}}78  clang_analyzer_eval(glob_arr5[1][0] == 3); // expected-warning{{TRUE}}79  clang_analyzer_eval(glob_arr5[1][1] == 4); // expected-warning{{TRUE}}80  clang_analyzer_eval(glob_arr5[2][0] == 5); // expected-warning{{TRUE}}81  clang_analyzer_eval(glob_arr5[2][1] == 0); // expected-warning{{TRUE}}82  clang_analyzer_eval(glob_arr5[3][0] == 0); // expected-warning{{TRUE}}83  clang_analyzer_eval(glob_arr5[3][1] == 0); // expected-warning{{TRUE}}84}85 86void glob_ptr_index2() {87  int const *ptr = glob_arr5[1];88  clang_analyzer_eval(ptr[0] == 3); // expected-warning{{TRUE}}89  clang_analyzer_eval(ptr[1] == 4); // expected-warning{{TRUE}}90  clang_analyzer_eval(ptr[2] == 5); // expected-warning{{UNDEFINED}}91  clang_analyzer_eval(ptr[3] == 0); // expected-warning{{UNDEFINED}}92  clang_analyzer_eval(ptr[4] == 0); // expected-warning{{UNDEFINED}}93}94 95void glob_invalid_index5() {96  int idx = -42;97  auto x = glob_arr5[1][idx]; // expected-warning{{uninitialized}}98}99 100void glob_invalid_index6() {101  int const *ptr = &glob_arr5[1][0];102  int idx = 42;103  auto x = ptr[idx]; // expected-warning{{uninitialized}}104}105 106extern const int glob_arr_no_init[10];107void glob_array_index4() {108  clang_analyzer_eval(glob_arr_no_init[2]); // expected-warning{{UNKNOWN}}109}110 111struct S2 {112  static const int arr_no_init[10];113};114void struct_arr_index1() {115  clang_analyzer_eval(S2::arr_no_init[2]); // expected-warning{{UNKNOWN}}116}117 118char const glob_arr6[5] = "123";119void glob_array_index5() {120  clang_analyzer_eval(glob_arr6[0] == '1');  // expected-warning{{TRUE}}121  clang_analyzer_eval(glob_arr6[1] == '2');  // expected-warning{{TRUE}}122  clang_analyzer_eval(glob_arr6[2] == '3');  // expected-warning{{TRUE}}123  clang_analyzer_eval(glob_arr6[3] == '\0'); // expected-warning{{TRUE}}124  clang_analyzer_eval(glob_arr6[4] == '\0'); // expected-warning{{TRUE}}125}126 127void glob_ptr_index3() {128  char const *ptr = glob_arr6;129  clang_analyzer_eval(ptr[-42] == '\0'); // expected-warning{{UNDEFINED}}130  clang_analyzer_eval(ptr[0] == '1');    // expected-warning{{TRUE}}131  clang_analyzer_eval(ptr[1] == '2');    // expected-warning{{TRUE}}132  clang_analyzer_eval(ptr[2] == '3');    // expected-warning{{TRUE}}133  clang_analyzer_eval(ptr[3] == '\0');   // expected-warning{{TRUE}}134  clang_analyzer_eval(ptr[4] == '\0');   // expected-warning{{TRUE}}135  clang_analyzer_eval(ptr[5] == '\0');   // expected-warning{{UNDEFINED}}136  clang_analyzer_eval(ptr[6] == '\0');   // expected-warning{{UNDEFINED}}137}138 139void glob_invalid_index7() {140  int idx = -42;141  auto x = glob_arr6[idx]; // expected-warning{{uninitialized}}142}143 144void glob_invalid_index8() {145  const char *ptr = glob_arr6;146  int idx = 42;147  auto x = ptr[idx]; // expected-warning{{uninitialized}}148}149 150char const glob_arr7[5] = {"123"};151void glob_array_index6() {152  clang_analyzer_eval(glob_arr7[0] == '1');  // expected-warning{{TRUE}}153  clang_analyzer_eval(glob_arr7[1] == '2');  // expected-warning{{TRUE}}154  clang_analyzer_eval(glob_arr7[2] == '3');  // expected-warning{{TRUE}}155  clang_analyzer_eval(glob_arr7[3] == '\0'); // expected-warning{{TRUE}}156  clang_analyzer_eval(glob_arr7[4] == '\0'); // expected-warning{{TRUE}}157}158 159void glob_invalid_index9() {160  int idx = -42;161  auto x = glob_arr7[idx]; // expected-warning{{uninitialized}}162}163 164void glob_invalid_index10() {165  const char *ptr = glob_arr7;166  int idx = 42;167  auto x = ptr[idx]; // expected-warning{{uninitialized}}168}169 170char const *const glob_ptr8 = "123";171void glob_ptr_index4() {172  clang_analyzer_eval(glob_ptr8[0] == '1');  // expected-warning{{TRUE}}173  clang_analyzer_eval(glob_ptr8[1] == '2');  // expected-warning{{TRUE}}174  clang_analyzer_eval(glob_ptr8[2] == '3');  // expected-warning{{TRUE}}175  clang_analyzer_eval(glob_ptr8[3] == '\0'); // expected-warning{{TRUE}}176  // FIXME: Should be UNDEFINED.177  // We should take into account a declaration in which the literal is used.178  clang_analyzer_eval(glob_ptr8[4] == '\0'); // expected-warning{{TRUE}}179}180 181void glob_invalid_index11() {182  int idx = -42;183  auto x = glob_ptr8[idx]; // expected-warning{{uninitialized}}184}185 186void glob_invalid_index12() {187  int idx = 42;188  // FIXME: Should warn {{uninitialized}}189  // We should take into account a declaration in which the literal is used.190  auto x = glob_ptr8[idx]; // no-warning191}192 193const char16_t *const glob_ptr9 = u"абв";194void glob_ptr_index5() {195  clang_analyzer_eval(glob_ptr9[0] == u'а'); // expected-warning{{TRUE}}196  clang_analyzer_eval(glob_ptr9[1] == u'б'); // expected-warning{{TRUE}}197  clang_analyzer_eval(glob_ptr9[2] == u'в'); // expected-warning{{TRUE}}198  clang_analyzer_eval(glob_ptr9[3] == '\0'); // expected-warning{{TRUE}}199}200 201const char32_t *const glob_ptr10 = U"\U0001F607\U0001F608\U0001F609";202void glob_ptr_index6() {203  clang_analyzer_eval(glob_ptr10[0] == U'\U0001F607'); // expected-warning{{TRUE}}204  clang_analyzer_eval(glob_ptr10[1] == U'\U0001F608'); // expected-warning{{TRUE}}205  clang_analyzer_eval(glob_ptr10[2] == U'\U0001F609'); // expected-warning{{TRUE}}206  clang_analyzer_eval(glob_ptr10[3] == '\0');          // expected-warning{{TRUE}}207}208 209const wchar_t *const glob_ptr11 = L"\123\u0041\xFF";210void glob_ptr_index7() {211  clang_analyzer_eval(glob_ptr11[0] == L'\123');   // expected-warning{{TRUE}}212  clang_analyzer_eval(glob_ptr11[1] == L'\u0041'); // expected-warning{{TRUE}}213  clang_analyzer_eval(glob_ptr11[2] == L'\xFF');   // expected-warning{{TRUE}}214  clang_analyzer_eval(glob_ptr11[3] == L'\0');     // expected-warning{{TRUE}}215}216 217const char *const glob_ptr12 = u8"abc";218void glob_ptr_index8() {219  clang_analyzer_eval(glob_ptr12[0] == 'a');  // expected-warning{{TRUE}}220  clang_analyzer_eval(glob_ptr12[1] == 'b');  // expected-warning{{TRUE}}221  clang_analyzer_eval(glob_ptr12[2] == 'c');  // expected-warning{{TRUE}}222  clang_analyzer_eval(glob_ptr12[3] == '\0'); // expected-warning{{TRUE}}223}224 225typedef int Int;226typedef Int const CInt;227typedef CInt Arr[2];228typedef Arr Arr2[4];229Arr2 glob_arr8 = {{1}, 3, 4, 5}; // const int[4][2]230void glob_array_typedef1() {231  clang_analyzer_eval(glob_arr8[0][0] == 1); // expected-warning{{TRUE}}232  clang_analyzer_eval(glob_arr8[0][1] == 0); // expected-warning{{TRUE}}233  clang_analyzer_eval(glob_arr8[1][0] == 3); // expected-warning{{TRUE}}234  clang_analyzer_eval(glob_arr8[1][1] == 4); // expected-warning{{TRUE}}235  clang_analyzer_eval(glob_arr8[2][0] == 5); // expected-warning{{TRUE}}236  clang_analyzer_eval(glob_arr8[2][1] == 0); // expected-warning{{TRUE}}237  clang_analyzer_eval(glob_arr8[3][0] == 0); // expected-warning{{TRUE}}238  clang_analyzer_eval(glob_arr8[3][1] == 0); // expected-warning{{TRUE}}239}240 241const int glob_arr9[2][4] = {{(1), 2, ((3)), 4}, 5, 6, (((7)))};242void glob_array_parentheses1() {243  clang_analyzer_eval(glob_arr9[0][0] == 1); // expected-warning{{TRUE}}244  clang_analyzer_eval(glob_arr9[0][1] == 2); // expected-warning{{TRUE}}245  clang_analyzer_eval(glob_arr9[0][2] == 3); // expected-warning{{TRUE}}246  clang_analyzer_eval(glob_arr9[0][3] == 4); // expected-warning{{TRUE}}247  clang_analyzer_eval(glob_arr9[1][0] == 5); // expected-warning{{TRUE}}248  clang_analyzer_eval(glob_arr9[1][1] == 6); // expected-warning{{TRUE}}249  clang_analyzer_eval(glob_arr9[1][2] == 7); // expected-warning{{TRUE}}250  clang_analyzer_eval(glob_arr9[1][3] == 0); // expected-warning{{TRUE}}251}252 253enum class E {};254const E glob[] = {{}};255void initlistWithinInitlist() {256  // no-crash257  clang_analyzer_dump(glob[0]); // expected-warning-re {{reg_${{[0-9]+}}<enum E Element{glob,0 S64b,enum E}>}}258}259