annotate gcc/testsuite/gcc.c-torture/execute/builtins/strlen-3.c @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* Copyright (C) 2004 Free Software Foundation.
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 Test strlen on const variables initialized to string literals.
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 Written by Jakub Jelinek, 9/14/2004. */
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 extern void abort (void);
kono
parents:
diff changeset
8 extern __SIZE_TYPE__ strlen (const char *);
kono
parents:
diff changeset
9 extern char *strcpy (char *, const char *);
kono
parents:
diff changeset
10 static const char bar[] = "Hello, World!";
kono
parents:
diff changeset
11 static const char baz[] = "hello, world?";
kono
parents:
diff changeset
12 static const char larger[20] = "short string";
kono
parents:
diff changeset
13 extern int inside_main;
kono
parents:
diff changeset
14
kono
parents:
diff changeset
15 int l1 = 1;
kono
parents:
diff changeset
16 int x = 6;
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18 void
kono
parents:
diff changeset
19 main_test(void)
kono
parents:
diff changeset
20 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
21 inside_main = 1;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
22
111
kono
parents:
diff changeset
23 #ifdef __OPTIMIZE__
kono
parents:
diff changeset
24 const char *foo;
kono
parents:
diff changeset
25 int i;
kono
parents:
diff changeset
26 #endif
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 if (strlen (bar) != 13)
kono
parents:
diff changeset
29 abort ();
kono
parents:
diff changeset
30
kono
parents:
diff changeset
31 if (strlen (bar + 3) != 10)
kono
parents:
diff changeset
32 abort ();
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 if (strlen (&bar[6]) != 7)
kono
parents:
diff changeset
35 abort ();
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 if (strlen (bar + (x++ & 7)) != 7)
kono
parents:
diff changeset
38 abort ();
kono
parents:
diff changeset
39 if (x != 7)
kono
parents:
diff changeset
40 abort ();
kono
parents:
diff changeset
41
kono
parents:
diff changeset
42 #ifdef __OPTIMIZE__
kono
parents:
diff changeset
43 foo = bar;
kono
parents:
diff changeset
44 for (i = 0; i < 4; ++i)
kono
parents:
diff changeset
45 {
kono
parents:
diff changeset
46 if (i == l1 - 1)
kono
parents:
diff changeset
47 foo = "HELLO, WORLD!";
kono
parents:
diff changeset
48 else if (i == l1)
kono
parents:
diff changeset
49 foo = bar;
kono
parents:
diff changeset
50 else if (i == l1 + 1)
kono
parents:
diff changeset
51 foo = "hello, world!";
kono
parents:
diff changeset
52 else
kono
parents:
diff changeset
53 foo = baz;
kono
parents:
diff changeset
54 }
kono
parents:
diff changeset
55 if (strlen (foo) != 13)
kono
parents:
diff changeset
56 abort ();
kono
parents:
diff changeset
57 #endif
kono
parents:
diff changeset
58
kono
parents:
diff changeset
59 if (strlen (larger) != 12)
kono
parents:
diff changeset
60 abort ();
kono
parents:
diff changeset
61 if (strlen (&larger[10]) != 2)
kono
parents:
diff changeset
62 abort ();
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64 inside_main = 0;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
65 /* The following call may or may not be folded depending on
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
66 the optimization level, and when it isn't folded (such
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
67 as may be the case with -Og) it may or may not result in
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
68 a library call, depending on whether or not it's expanded
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
69 inline (e.g., powerpc64 makes a call while x86_64 expands
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
70 it inline). */
111
kono
parents:
diff changeset
71 if (strlen (larger + (x++ & 7)) != 5)
kono
parents:
diff changeset
72 abort ();
kono
parents:
diff changeset
73 if (x != 8)
kono
parents:
diff changeset
74 abort ();
kono
parents:
diff changeset
75 inside_main = 1;
kono
parents:
diff changeset
76 }