1 // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -std=c99 -verify %s
3 void clang_analyzer_eval(int);
5 void array_init(void) {
6 int a
[5] = {[4] = 29, [2] = 15, [0] = 4};
7 clang_analyzer_eval(a
[0] == 4); // expected-warning{{TRUE}}
8 clang_analyzer_eval(a
[1] == 0); // expected-warning{{TRUE}}
9 clang_analyzer_eval(a
[2] == 15); // expected-warning{{TRUE}}
10 clang_analyzer_eval(a
[3] == 0); // expected-warning{{TRUE}}
11 clang_analyzer_eval(a
[4] == 29); // expected-warning{{TRUE}}
12 int b
[5] = {[0 ... 2] = 1, [4] = 5};
13 clang_analyzer_eval(b
[0] == 1); // expected-warning{{TRUE}}
14 clang_analyzer_eval(b
[1] == 1); // expected-warning{{TRUE}}
15 clang_analyzer_eval(b
[2] == 1); // expected-warning{{TRUE}}
16 clang_analyzer_eval(b
[3] == 0); // expected-warning{{TRUE}}
17 clang_analyzer_eval(b
[4] == 5); // expected-warning{{TRUE}}
24 void struct_init(void) {
25 struct point p
= {.y
= 5, .x
= 3};
26 clang_analyzer_eval(p
.x
== 3); // expected-warning{{TRUE}}
27 clang_analyzer_eval(p
.y
== 5); // expected-warning{{TRUE}}
30 void array_of_struct(void) {
31 struct point ptarray
[3] = { [2].y
= 1, [2].x
= 2, [0].x
= 3 };
32 clang_analyzer_eval(ptarray
[0].x
== 3); // expected-warning{{TRUE}}
33 clang_analyzer_eval(ptarray
[0].y
== 0); // expected-warning{{TRUE}}
34 clang_analyzer_eval(ptarray
[1].x
== 0); // expected-warning{{TRUE}}
35 clang_analyzer_eval(ptarray
[1].y
== 0); // expected-warning{{TRUE}}
36 clang_analyzer_eval(ptarray
[2].x
== 2); // expected-warning{{TRUE}}
37 clang_analyzer_eval(ptarray
[2].y
== 1); // expected-warning{{TRUE}}