blob: e51d88e9ff927b60361c08daf56f36166076ce8c [file] [log] [blame]
/* 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" } */
}