]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/testsuite/gcc.dg/builtin-memchr.c
Update copyright years.
[thirdparty/gcc.git] / gcc / testsuite / gcc.dg / builtin-memchr.c
CommitLineData
d3a46ecb
MS
1/* PR tree-optimization/86711 - wrong folding of memchr
2
3 Verify that memchr() of arrays initialized with 16-bit wide string
4 literals finds the nul only when it is present in the wide string.
5
6 { dg-do compile }
7 { dg-options "-O1 -Wall -fshort-wchar -fdump-tree-optimized" } */
8
9typedef __SIZE_TYPE__ size_t;
10typedef __WCHAR_TYPE__ wchar_t;
11
12extern void* memchr (const void*, int, size_t);
13extern int printf (const char*, ...);
14extern void abort (void);
15
16#define A(expr) \
17 ((expr) \
18 ? (void)0 \
19 : (printf ("assertion failed on line %i: %s\n", \
20 __LINE__, #expr), \
21 abort ()))
22
23static const wchar_t wc = L'1';
24static const wchar_t ws1[] = L"1";
25static const wchar_t ws2[2] = L"\x1234\x5678"; /* no terminating nul */
26static const wchar_t ws4[] = L"\x0012\x1200\x1234";
27
28void test_wide (void)
29{
30 int i0 = 0;
31 int i1 = i0 + 1;
32 int i2 = i1 + 1;
33
34 A (sizeof (wchar_t) == 2);
35
36 A (memchr (L"" + 1, 0, 0) == 0);
37 A (memchr (&wc + 1, 0, 0) == 0);
38 A (memchr (L"\x1234", 0, sizeof (wchar_t)) == 0);
39
40 A (memchr (L"" + i1, i0, i0) == 0);
41 A (memchr (&wc + i1, i0, i0) == 0);
42 A (memchr (L"\x1234", i0, sizeof (wchar_t)) == 0);
43
44 A (memchr (ws2, 0, sizeof ws2) == 0);
45 A (memchr (ws2, i0, sizeof ws2) == 0);
46
47 const size_t nb = sizeof ws4;
48 const size_t nwb = sizeof (wchar_t);
49
50 const char *pws1 = (const char*)ws1;
51 const char *pws4 = (const char*)ws4;
52
53#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
54 A (memchr (ws1, i0, sizeof ws1) == pws1 + 1);
55
56 A (memchr (&ws4[0], i0, nb) == pws4 + i1);
57 A (memchr (&ws4[1], i0, nb - i1 * nwb) == pws4 + i1 * nwb);
58 A (memchr (&ws4[2], i0, nb - i2 * nwb) == pws4 + i2 * nwb + i2);
59#else
60 A (memchr (ws1, i0, sizeof ws1) == pws1 + 0);
61
62 A (memchr (&ws4[0], i0, nb) == pws4 + 0);
63 A (memchr (&ws4[1], i0, nb - i1 * nwb) == pws4 + i1 * nwb + i1);
64 A (memchr (&ws4[2], i0, nb - i2 * nwb) == pws4 + i2 * nwb + i2);
65#endif
66}
67
68/* { dg-final { scan-tree-dump-not "abort" "optimized" } } */