1  /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */
       2  /* { dg-additional-options "-Wno-incompatible-pointer-types -Wno-analyzer-too-complex" } */
       3  /* TODO: ideally we shouldn't have -Wno-analyzer-too-complex above; it
       4     appears to be needed due to the recursion.  */
       5  
       6  struct tz {
       7    int qc;
       8  };
       9  
      10  struct wp {
      11    struct tz *p2;
      12  } *ov;
      13  
      14  struct dz {
      15    struct wp *r5;
      16  };
      17  
      18  void
      19  za (void);
      20  
      21  void
      22  h5 (struct dz *);
      23  
      24  int
      25  e7 (struct wp *f2)
      26  {
      27    return f2 == ov;
      28  }
      29  
      30  void
      31  wr (struct wp *sw)
      32  {
      33    if (sw != 0)
      34      za ();
      35  }
      36  
      37  void
      38  m6 (const struct dz *gq)
      39  {
      40    wr (gq->r5);
      41  
      42    asm ("" : "+m" (gq));
      43  
      44    if (0)
      45      {
      46        asm ("" : "+m" (gq->r5->p2->qc));
      47        asm ("" : "+m" (gq->r5->p2->qc));
      48      }
      49  
      50    asm ("" : "+m" (gq->r5->p2->qc));
      51  
      52    if (e7 (gq->r5))
      53      za ();
      54  }
      55  
      56  void
      57  ts (struct dz *cx)
      58  {
      59    struct dz nt;
      60  
      61    if (nt.r5) /* { dg-warning "use of uninitialized value 'nt.r5'" } */
      62      {
      63        m6 (cx);
      64        h5 (cx);
      65        ts (&cx);
      66      }
      67  }