PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / builtins / strlen-3.c
blob666ca21b94f4bf4520609d0294f05f8d9fc46823
1 /* Copyright (C) 2004 Free Software Foundation.
3 Test strlen on const variables initialized to string literals.
5 Written by Jakub Jelinek, 9/14/2004. */
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;
15 int l1 = 1;
16 int x = 6;
18 void
19 main_test(void)
21 #ifdef __OPTIMIZE__
22 const char *foo;
23 int i;
24 #endif
26 if (strlen (bar) != 13)
27 abort ();
29 if (strlen (bar + 3) != 10)
30 abort ();
32 if (strlen (&bar[6]) != 7)
33 abort ();
35 if (strlen (bar + (x++ & 7)) != 7)
36 abort ();
37 if (x != 7)
38 abort ();
40 #ifdef __OPTIMIZE__
41 foo = bar;
42 for (i = 0; i < 4; ++i)
44 if (i == l1 - 1)
45 foo = "HELLO, WORLD!";
46 else if (i == l1)
47 foo = bar;
48 else if (i == l1 + 1)
49 foo = "hello, world!";
50 else
51 foo = baz;
53 if (strlen (foo) != 13)
54 abort ();
55 #endif
57 if (strlen (larger) != 12)
58 abort ();
59 if (strlen (&larger[10]) != 2)
60 abort ();
62 inside_main = 0;
63 /* This will result in strlen call, because larger
64 array is bigger than its initializer. */
65 if (strlen (larger + (x++ & 7)) != 5)
66 abort ();
67 if (x != 8)
68 abort ();
69 inside_main = 1;