(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
builtin-memchr-4.c
       1  /* PR tree-optimization/89772
       2     Verify that memchr calls with a pointer to a constant character
       3     are folded as expected.
       4     { dg-do compile }
       5     { dg-options "-O1 -Wall -fdump-tree-release_ssa" } */
       6  
       7  typedef __SIZE_TYPE__  size_t;
       8  typedef __WCHAR_TYPE__ wchar_t;
       9  
      10  extern void* memchr (const void*, int, size_t);
      11  extern int printf (const char*, ...);
      12  extern void abort (void);
      13  
      14  #define A(expr)						\
      15    ((expr)						\
      16     ? (void)0						\
      17     : (printf ("assertion failed on line %i: %s\n",	\
      18  	      __LINE__, #expr),				\
      19        abort ()))
      20  
      21  const char a[8] = {'a',0,'b'};
      22  const char b[3] = {'a','b'};
      23  const char c[8] = {'a','b','c'};
      24  
      25  void test_memchr_cst_char (void)
      26  {
      27    A (!memchr (a, 'c', 2));
      28    A (!memchr (a, 'c', 5));
      29    A (!memchr (a, 'c', sizeof a));
      30    A (&a[1] == memchr (a, 0, sizeof a));
      31  
      32    A (!memchr (b, 0, 2));
      33    A (&b[2] == memchr (b, 0, sizeof b));
      34  
      35    A (!memchr (c, 0, 2));
      36    A (&c[3] == memchr (c, 0, 4));
      37    A (&c[3] == memchr (c, 0, sizeof a));
      38  }
      39  
      40  /* { dg-final { scan-tree-dump-not "abort" "release_ssa" } } */