blob: 666ca21b94f4bf4520609d0294f05f8d9fc46823 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
/* Copyright (C) 2004 Free Software Foundation.
Test strlen on const variables initialized to string literals.
Written by Jakub Jelinek, 9/14/2004. */
extern void abort (void);
extern __SIZE_TYPE__ strlen (const char *);
extern char *strcpy (char *, const char *);
static const char bar[] = "Hello, World!";
static const char baz[] = "hello, world?";
static const char larger[20] = "short string";
extern int inside_main;
int l1 = 1;
int x = 6;
void
main_test(void)
{
#ifdef __OPTIMIZE__
const char *foo;
int i;
#endif
if (strlen (bar) != 13)
abort ();
if (strlen (bar + 3) != 10)
abort ();
if (strlen (&bar[6]) != 7)
abort ();
if (strlen (bar + (x++ & 7)) != 7)
abort ();
if (x != 7)
abort ();
#ifdef __OPTIMIZE__
foo = bar;
for (i = 0; i < 4; ++i)
{
if (i == l1 - 1)
foo = "HELLO, WORLD!";
else if (i == l1)
foo = bar;
else if (i == l1 + 1)
foo = "hello, world!";
else
foo = baz;
}
if (strlen (foo) != 13)
abort ();
#endif
if (strlen (larger) != 12)
abort ();
if (strlen (&larger[10]) != 2)
abort ();
inside_main = 0;
/* This will result in strlen call, because larger
array is bigger than its initializer. */
if (strlen (larger + (x++ & 7)) != 5)
abort ();
if (x != 8)
abort ();
inside_main = 1;
}
|