(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
builtin-memchr-3.c
       1  /* Verify that memchr calls with a pointer to a constant character
       2     are folded as expected.
       3     { dg-do compile }
       4     { dg-options "-O1 -Wall -fdump-tree-gimple" } */
       5  
       6  typedef __SIZE_TYPE__  size_t;
       7  typedef __WCHAR_TYPE__ wchar_t;
       8  
       9  extern void* memchr (const void*, int, size_t);
      10  extern int printf (const char*, ...);
      11  extern void abort (void);
      12  
      13  #define A(expr)						\
      14    ((expr)						\
      15     ? (void)0						\
      16     : (printf ("assertion failed on line %i: %s\n",	\
      17  	      __LINE__, #expr),				\
      18        abort ()))
      19  
      20  const char nul = 0;
      21  const char cha = 'a';
      22  
      23  const char* const pnul = &nul;
      24  const char* const pcha = &cha;
      25  
      26  const struct
      27  {
      28    char c;
      29  } snul = { 0 },
      30    schb = { 'b' },
      31    sarr[] = {
      32    { 0 },
      33    { 'c' }
      34    };
      35  
      36  const char* const psarr0c = &sarr[0].c;
      37  const char* const psarr1c = &sarr[1].c;
      38  
      39  void test_memchr_cst_char (void)
      40  {
      41    A (&nul == memchr (&nul, 0, 1));
      42    A (!memchr (&nul, 'a', 1));
      43  
      44    A (&cha == memchr (&cha, 'a', 1));
      45    A (!memchr (&cha, 0, 1));
      46  
      47    A (&nul == memchr (pnul, 0, 1));
      48    A (!memchr (pnul, 'a', 1));
      49  
      50    A (&cha == memchr (pcha, 'a', 1));
      51    A (!memchr (pcha, 0, 1));
      52  
      53    A (&snul.c == memchr (&snul.c, 0, 1));
      54    A (!memchr (&snul.c, 'a', 1));
      55  
      56    A (&schb.c == memchr (&schb.c, 'b', 1));
      57    A (!memchr (&schb.c, 0, 1));
      58  
      59    A (&sarr[0].c == memchr (&sarr[0].c, 0, 1));
      60    A (!memchr (&sarr[0].c, 'a', 1));
      61  
      62    A (&sarr[1].c == memchr (&sarr[1].c, 'c', 1));
      63    A (!memchr (&sarr[1].c, 0, 1));
      64  
      65    A (&sarr[0].c == memchr (psarr0c, 0, 1));
      66    A (!memchr (psarr0c, 'a', 1));
      67  
      68    A (&sarr[1].c == memchr (psarr1c, 'c', 1));
      69    A (!memchr (psarr1c, 0, 1));
      70  }
      71  
      72  /* { dg-final { scan-tree-dump-not "abort" "gimple" } } */