57 lines
1.4 KiB
C
57 lines
1.4 KiB
C
/* Copyright (C) 2000 Free Software Foundation, Inc. */
|
|
|
|
/* { dg-do run } */
|
|
/* { dg-options "-std=c99 -pedantic-errors" } */
|
|
|
|
/* Tests a whole bunch of things are correctly stringified. */
|
|
|
|
extern int strcmp (const char *, const char *);
|
|
extern int puts (const char *);
|
|
extern void abort (void);
|
|
#define err(str) do { puts(str); abort(); } while (0)
|
|
|
|
#define str(x) #x
|
|
#define xstr(x) str(x)
|
|
#define strvar(...) #__VA_ARGS__
|
|
|
|
#define glibc_str(x) glibc_str2 (w, x)
|
|
#define glibc_str2(w, x) #x
|
|
#define ver GLIBC_2.2
|
|
|
|
int main (int argc, char *argv[])
|
|
{
|
|
str (\); /* { dg-warning "valid string" "str(\\)" } */
|
|
str (\\); /* OK. */
|
|
str (\\\); /* { dg-warning "valid string" "str(\\\\\\)" } */
|
|
|
|
/* This also serves as a useful test of the value of __INCLUDE_LEVEL. */
|
|
if (strcmp (xstr (__INCLUDE_LEVEL__), "0"))
|
|
err ("macro expansion");
|
|
|
|
if (strcmp(str (__INCLUDE_LEVEL__), "__INCLUDE_LEVEL__"))
|
|
err ("macro name");
|
|
|
|
if (strcmp(str(), "") || strcmp(str( ), ""))
|
|
err ("empty string");
|
|
|
|
if (strcmp(str ("s\n"), "\"s\\n\""))
|
|
err ("quoted string");
|
|
|
|
if (strcmp (str (a € b), "a \200 b"))
|
|
err ("unprintable char");
|
|
|
|
if (strcmp (str ( a b@ c ), "a b@ c"))
|
|
err ("internal whitespace");
|
|
|
|
if (strcmp (str(a \n), "a \n"))
|
|
err ("backslash token");
|
|
|
|
if (strcmp (strvar (foo, bar), "foo, bar"))
|
|
err ("variable arguments");
|
|
|
|
if (strcmp (glibc_str (ver), "GLIBC_2.2"))
|
|
err ("whitespace");
|
|
|
|
return 0;
|
|
}
|