| /* Tests of brace-enclosed initializers |
| Some of these use the CONSTRUCTOR tree code, but it appears |
| only for a full zero-init; it appears that by the time the analyzer |
| runs that this initialization has been converted into field-wise |
| gimple assign stmts, with just "zero-init everything" CONSTRUCTORs |
| and "clobber" CONSTRUCTORs. */ |
| |
| #include "analyzer-decls.h" |
| |
| struct coord |
| { |
| int x; |
| int y; |
| }; |
| |
| struct tri |
| { |
| struct coord v[3]; |
| }; |
| |
| union iap |
| { |
| int i; |
| void *p; |
| }; |
| |
| void test_1 (void) |
| { |
| struct coord c = {3, 4}; |
| __analyzer_eval (c.x == 3); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c.y == 4); /* { dg-warning "TRUE" } */ |
| } |
| |
| void test_2 (void) |
| { |
| struct coord c = {3}; |
| __analyzer_eval (c.x == 3); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c.y == 0); /* { dg-warning "TRUE" } */ |
| } |
| |
| void test_3 (void) |
| { |
| struct coord c = {}; |
| __analyzer_eval (c.x == 0); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c.y == 0); /* { dg-warning "TRUE" } */ |
| } |
| |
| void test_4 (void) |
| { |
| int c[2] = {3, 4}; |
| __analyzer_eval (c[0] == 3); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[1] == 4); /* { dg-warning "TRUE" } */ |
| } |
| |
| void test_5 (void) |
| { |
| int c[2] = {3}; |
| __analyzer_eval (c[0] == 3); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[1] == 0); /* { dg-warning "TRUE" } */ |
| } |
| |
| void test_6 (void) |
| { |
| int c[2] = {}; |
| __analyzer_eval (c[0] == 0); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[1] == 0); /* { dg-warning "TRUE" } */ |
| } |
| |
| void test_7 (void) |
| { |
| struct coord c[2] = {{3, 4}, {5, 6}}; |
| __analyzer_eval (c[0].x == 3); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[0].y == 4); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[1].x == 5); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[1].y == 6); /* { dg-warning "TRUE" } */ |
| } |
| |
| void test_8 (void) |
| { |
| struct coord c[2] = {{3}, {5}}; |
| __analyzer_eval (c[0].x == 3); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[0].y == 0); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[1].x == 5); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[1].y == 0); /* { dg-warning "TRUE" } */ |
| } |
| |
| void test_9 (void) |
| { |
| struct coord c[2] = {{}, {}}; |
| __analyzer_eval (c[0].x == 0); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[0].y == 0); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[1].x == 0); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[1].y == 0); /* { dg-warning "TRUE" } */ |
| } |
| |
| void test_10 (void) |
| { |
| struct coord c[2] = {{.y = 4, .x = 3}, {5, 6}}; |
| __analyzer_eval (c[0].x == 3); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[0].y == 4); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[1].x == 5); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[1].y == 6); /* { dg-warning "TRUE" } */ |
| } |
| |
| void test_11 (void) |
| { |
| struct coord c[2] = {{.y = 4}, {5, 6}}; |
| __analyzer_eval (c[0].x == 0); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[0].y == 4); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[1].x == 5); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (c[1].y == 6); /* { dg-warning "TRUE" } */ |
| } |
| |
| void test_12 (void) |
| { |
| struct tri t = {}; |
| __analyzer_eval (t.v[0].x == 0); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (t.v[2].y == 0); /* { dg-warning "TRUE" } */ |
| } |
| |
| void test_13 (void) |
| { |
| struct tri t = {3, 4, 5, 6, 7, 8}; |
| __analyzer_eval (t.v[0].x == 3); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (t.v[0].y == 4); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (t.v[1].x == 5); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (t.v[1].y == 6); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (t.v[2].x == 7); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (t.v[2].y == 8); /* { dg-warning "TRUE" } */ |
| } |
| |
| void test_14 (void) |
| { |
| union iap u = {}; |
| __analyzer_eval (u.i == 0); /* { dg-warning "TRUE" } */ |
| } |