(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
uninit-pred-12.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O -Wmaybe-uninitialized -fdump-tree-uninit1" } */
       3  
       4  extern unsigned bar (void);
       5  extern void quux (void);
       6  int z;
       7  unsigned foo (unsigned v, int y, int w)
       8  {
       9    unsigned u;
      10    if (v != 1)
      11      u = bar ();
      12  
      13    // Prevent the "dom" pass from changing the CFG layout based on the inference
      14    // 'if (v != 1) is false then (v != 2) is true'.  (Now it would have to
      15    // duplicate the loop in order to do so, which is deemed expensive.)
      16    for (int i = 0; i < 10; i++)
      17      quux ();
      18  
      19    // This variantion from uninit-pred-11.c caused compute_control_dep_chain
      20    // to run into a defect, producing z != 0 && v != 1, omitting !(i<10)
      21    // from the path predicate
      22    if (w)
      23      {
      24        if (y)
      25  	z = 1;
      26        if (v != 1)
      27  	return u;       /* { dg-bogus "may be used uninitialized" } */
      28      }
      29  
      30    return 0;
      31  }
      32  
      33  /* Make sure predicate analysis picked up the loop exit condition.  */
      34  /* { dg-final { scan-tree-dump "AND \\(NOT \\((ivtmp|doloop)" "uninit1" } } */