Viewing file: strlen-3.c (1.55 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* 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) { inside_main = 1;
#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; /* The following call may or may not be folded depending on the optimization level, and when it isn't folded (such as may be the case with -Og) it may or may not result in a library call, depending on whether or not it's expanded inline (e.g., powerpc64 makes a call while x86_64 expands it inline). */ if (strlen (larger + (x++ & 7)) != 5) abort (); if (x != 8) abort (); inside_main = 1; }
|