/* { dg-additional-options "-Wno-analyzer-too-complex" } */ #include extern int get (void); /* In theory each of p0...p1 can be in various malloc states, independently, so the total combined number of states at any program point within the loop is NUM_VARS * NUM_STATES. */ void test (void) { void *p0, *p1; void **pp; while (get ()) { switch (get ()) { default: case 0: pp = &p0; break; case 1: pp = &p1; break; } switch (get ()) { default: case 0: *pp = malloc (16); /* { dg-warning "leak" "" { xfail *-*-* } } */ // TODO: xfail break; case 1: free (*pp); break; case 2: /* no-op. */ break; } } }