]>
Commit | Line | Data |
---|---|---|
6f966f06 SSF |
1 | /* { dg-do run } */ |
2 | /* { dg-options "-O2 -ftree-loop-distribution -fdump-tree-ldist-details" } */ | |
3 | /* { dg-final { scan-tree-dump-times "generated strlenQI\n" 3 "ldist" } } */ | |
4 | ||
5 | #include <assert.h> | |
6 | ||
7 | typedef __SIZE_TYPE__ size_t; | |
8 | extern void* malloc (size_t); | |
9 | extern void* memset (void*, int, size_t); | |
10 | ||
11 | __attribute__((noinline)) | |
12 | int test_pos (char *s) | |
13 | { | |
14 | int i; | |
15 | for (i=42; s[i]; ++i); | |
16 | return i; | |
17 | } | |
18 | ||
19 | __attribute__((noinline)) | |
20 | int test_neg (char *s) | |
21 | { | |
22 | int i; | |
23 | for (i=-42; s[i]; ++i); | |
24 | return i; | |
25 | } | |
26 | ||
27 | __attribute__((noinline)) | |
28 | int test_including_null_char (char *s) | |
29 | { | |
30 | int i; | |
31 | for (i=1; s[i-1]; ++i); | |
32 | return i; | |
33 | } | |
34 | ||
35 | int main(void) | |
36 | { | |
37 | void *p = malloc (1024); | |
38 | assert (p); | |
39 | memset (p, 0xf, 1024); | |
40 | char *s = (char *)p + 100; | |
41 | ||
42 | s[42+13] = 0; | |
43 | assert (test_pos (s) == 42+13); | |
44 | s[42+13] = 0xf; | |
45 | ||
46 | s[13] = 0; | |
47 | assert (test_neg (s) == 13); | |
48 | s[13] = 0xf; | |
49 | ||
50 | s[-13] = 0; | |
51 | assert (test_neg (s) == -13); | |
52 | s[-13] = 0xf; | |
53 | ||
54 | s[13] = 0; | |
55 | assert (test_including_null_char (s) == 13+1); | |
56 | ||
57 | return 0; | |
58 | } |