blob: 1cbfdd0beaa2c3a7962e2118e6bad5644115c5f6 [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-vrp1" } */
/* LLVM LOCAL test not applicable */
/* { dg-require-fdump "" } */
// Define this to see it work.
// #define WORK_WORK_WORK
#define THIRD
#ifdef THIRD
#define FIRST i < 0 ||
#define ORIG int
#define CAST
#else
#define FIRST
#ifdef WORK_WORK_WORK
#define ORIG unsigned int
#define CAST
#else
#define ORIG int
#define CAST (unsigned)
#endif // WORK_WORK_WORK
#endif // THIRD
struct array
{
const ORIG len;
int *data;
};
extern void call (ORIG);
void doit (array *a)
{
for (ORIG i = 0; i < a->len; ++i)
{
if (FIRST CAST (i) >= CAST (a->len))
throw 5;
call (a->data[i]);
}
}
/* VRP should remove all but 1 if() in the loop. */
/* { dg-final { scan-tree-dump-times "if " 1 "vrp1"} } */
/* { dg-final { cleanup-tree-dump "vrp1" } } */