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" } } */