/* Copyright (C) 2004 Free Software Foundation.
|
/* Copyright (C) 2004 Free Software Foundation.
|
|
|
Test strlen on const variables initialized to string literals.
|
Test strlen on const variables initialized to string literals.
|
|
|
Written by Jakub Jelinek, 9/14/2004. */
|
Written by Jakub Jelinek, 9/14/2004. */
|
|
|
extern void abort (void);
|
extern void abort (void);
|
extern __SIZE_TYPE__ strlen (const char *);
|
extern __SIZE_TYPE__ strlen (const char *);
|
extern char *strcpy (char *, const char *);
|
extern char *strcpy (char *, const char *);
|
static const char bar[] = "Hello, World!";
|
static const char bar[] = "Hello, World!";
|
static const char baz[] = "hello, world?";
|
static const char baz[] = "hello, world?";
|
static const char larger[20] = "short string";
|
static const char larger[20] = "short string";
|
extern volatile int inside_main;
|
extern volatile int inside_main;
|
|
|
int l1 = 1;
|
int l1 = 1;
|
int x = 6;
|
int x = 6;
|
|
|
void
|
void
|
main_test(void)
|
main_test(void)
|
{
|
{
|
#ifdef __OPTIMIZE__
|
#ifdef __OPTIMIZE__
|
const char *foo;
|
const char *foo;
|
int i;
|
int i;
|
#endif
|
#endif
|
|
|
if (strlen (bar) != 13)
|
if (strlen (bar) != 13)
|
abort ();
|
abort ();
|
|
|
if (strlen (bar + 3) != 10)
|
if (strlen (bar + 3) != 10)
|
abort ();
|
abort ();
|
|
|
if (strlen (&bar[6]) != 7)
|
if (strlen (&bar[6]) != 7)
|
abort ();
|
abort ();
|
|
|
if (strlen (bar + (x++ & 7)) != 7)
|
if (strlen (bar + (x++ & 7)) != 7)
|
abort ();
|
abort ();
|
if (x != 7)
|
if (x != 7)
|
abort ();
|
abort ();
|
|
|
#ifdef __OPTIMIZE__
|
#ifdef __OPTIMIZE__
|
foo = bar;
|
foo = bar;
|
for (i = 0; i < 4; ++i)
|
for (i = 0; i < 4; ++i)
|
{
|
{
|
if (i == l1 - 1)
|
if (i == l1 - 1)
|
foo = "HELLO, WORLD!";
|
foo = "HELLO, WORLD!";
|
else if (i == l1)
|
else if (i == l1)
|
foo = bar;
|
foo = bar;
|
else if (i == l1 + 1)
|
else if (i == l1 + 1)
|
foo = "hello, world!";
|
foo = "hello, world!";
|
else
|
else
|
foo = baz;
|
foo = baz;
|
}
|
}
|
if (strlen (foo) != 13)
|
if (strlen (foo) != 13)
|
abort ();
|
abort ();
|
#endif
|
#endif
|
|
|
if (strlen (larger) != 12)
|
if (strlen (larger) != 12)
|
abort ();
|
abort ();
|
if (strlen (&larger[10]) != 2)
|
if (strlen (&larger[10]) != 2)
|
abort ();
|
abort ();
|
|
|
inside_main = 0;
|
inside_main = 0;
|
/* This will result in strlen call, because larger
|
/* This will result in strlen call, because larger
|
array is bigger than its initializer. */
|
array is bigger than its initializer. */
|
if (strlen (larger + (x++ & 7)) != 5)
|
if (strlen (larger + (x++ & 7)) != 5)
|
abort ();
|
abort ();
|
if (x != 8)
|
if (x != 8)
|
abort ();
|
abort ();
|
inside_main = 1;
|
inside_main = 1;
|
}
|
}
|
|
|