(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
memcmp-6.c
       1  /* PR tree-optimization/96670 - ICE on memchr with an empty initializer
       2     { dg-do compile }
       3     { dg-options "-O -Wall -fdump-tree-optimized" } */
       4  
       5  struct {
       6    int i, j;
       7  } const s = { };
       8  
       9  const char a[sizeof s] = { };
      10  
      11  void memcmp_success_unused (void)
      12  {
      13    int n = (char *)&s.j - (char *)&s;
      14    char *p = (char *)&s;
      15    __builtin_memcmp (p, a, n);
      16    __builtin_memcmp (a, p, n);
      17  }
      18  
      19  void memcmp_success_used (void)
      20  {
      21    int n = (char *)&s.j - (char *)&s;
      22    char *p = (char *)&s;
      23    if (__builtin_memcmp (p, a, n)
      24        || __builtin_memcmp (a, p, n))
      25      __builtin_abort ();
      26  }
      27  
      28  void memcmp_fail_unused (void)
      29  {
      30    int n = (char *)&s.j - (char *)&s;
      31    char *p = (char *)&s;
      32    __builtin_memcmp (p, a, n);
      33    __builtin_memcmp (a, p, n);
      34  }
      35  
      36  void memcmp_fail_used (void)
      37  {
      38    int n = (char *)&s.j - (char *)&s;
      39    char *p = (char *)&s;
      40    if (__builtin_memcmp (p, a, n)
      41        || __builtin_memcmp (a, p, n))
      42      __builtin_abort ();
      43  }
      44  
      45  /* { dg-prune-output "\\\[-Wunused-value" }
      46     { dg-final { scan-tree-dump-not "abort" "optimized" } }
      47     { dg-final { scan-tree-dump-not "memcmp \\\(" "optimized" } } */