| // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -std=c++11 -verify %s |
| // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -std=c++17 -verify %s |
| #include "Inputs/system-header-simulator-cxx.h" |
| void clang_analyzer_eval(bool); |
| void flexibleArrayMember() |
| (Flex *)::operator new(__builtin_offsetof(Flex, contents) + sizeof(S) * size); |
| clang_analyzer_eval(S::c == 0); // expected-warning{{TRUE}} |
| new (&arr->contents[0]) S; |
| new (&arr->contents[1]) S; |
| new (&arr->contents[2]) S; |
| new (&arr->contents[3]) S; |
| clang_analyzer_eval(S::c == size); // expected-warning{{TRUE}} |
| clang_analyzer_eval(arr->contents[0].x == 0); // expected-warning{{TRUE}} |
| clang_analyzer_eval(arr->contents[1].x == 1); // expected-warning{{TRUE}} |
| clang_analyzer_eval(arr->contents[2].x == 2); // expected-warning{{TRUE}} |
| clang_analyzer_eval(arr->contents[3].x == 3); // expected-warning{{TRUE}} |
| clang_analyzer_eval(S::d == size); // expected-warning{{TRUE}} |