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