1  /* { dg-options "-O2 -fdump-tree-dse-details -fno-tree-fre" } */
       2  
       3  
       4  #ifndef SCOPE
       5  #define SCOPE
       6  #endif
       7  
       8  extern void frob (char *);
       9  
      10  void g (char *s)
      11  {
      12    SCOPE char a[8];
      13    __builtin_strncpy (a, s, sizeof a);
      14    __builtin_memset (a, 0, sizeof a); 
      15    frob (a);
      16  }
      17  
      18  void h (char *s)
      19  {
      20    SCOPE char a[8];
      21    __builtin_memset (a, 0, sizeof a); 
      22    __builtin_strncpy (a, s, sizeof a);
      23    frob (a);
      24  }
      25  
      26  void i (char *s)
      27  {
      28    SCOPE char a[8];
      29    __builtin_strncpy (a, s, sizeof a);
      30    __builtin_memset (a, 0, sizeof a - 5); 
      31    frob (a);
      32  }
      33  
      34  void j (char *s)
      35  {
      36    SCOPE char a[8];
      37    __builtin_memset (a, 0, sizeof a); 
      38    __builtin_strncpy (a, s, sizeof a - 5);
      39    frob (a);
      40  }
      41  
      42  void l (char *s)
      43  {
      44    SCOPE char a[8];
      45    __builtin_strncpy (a, s, sizeof a);
      46    __builtin_memset (a + 2, 0, sizeof a - 2); 
      47    frob (a);
      48  }
      49  
      50  void m (char *s)
      51  {
      52    SCOPE char a[8];
      53    __builtin_memset (a, 0, sizeof a); 
      54    __builtin_strncpy (a + 2, s, sizeof a - 2);
      55    frob (a);
      56  }
      57  
      58  /* { dg-final { scan-tree-dump-times "Deleted dead call" 2 "dse1" } } */
      59  /* { dg-final { scan-tree-dump-times "Trimming statement " 4 "dse1" } } */
      60