1/* Copyright (C) 2000 Free Software Foundation, Inc. */ 2 3/* { dg-do run } */ 4/* { dg-options "-std=c99 -pedantic-errors" } */ 5 6/* Tests a whole bunch of things are correctly stringified. */ 7 8extern int strcmp (const char *, const char *); 9extern int puts (const char *); 10extern void abort (void); 11#define err(str) do { puts(str); abort(); } while (0) 12 13#define str(x) #x 14#define xstr(x) str(x) 15#define strvar(...) #__VA_ARGS__ 16 17#define glibc_str(x) glibc_str2 (w, x) 18#define glibc_str2(w, x) #x 19#define ver GLIBC_2.2 20 21int main (int argc, char *argv[]) 22{ 23 str (\); /* { dg-warning "valid string" "str(\\)" } */ 24 str (\\); /* OK. */ 25 str (\\\); /* { dg-warning "valid string" "str(\\\\\\)" } */ 26 27 /* This also serves as a useful test of the value of __INCLUDE_LEVEL. */ 28 if (strcmp (xstr (__INCLUDE_LEVEL__), "0")) 29 err ("macro expansion"); 30 31 if (strcmp(str (__INCLUDE_LEVEL__), "__INCLUDE_LEVEL__")) 32 err ("macro name"); 33 34 if (strcmp(str(), "") || strcmp(str( ), "")) 35 err ("empty string"); 36 37 if (strcmp(str ("s\n"), "\"s\\n\"")) 38 err ("quoted string"); 39 40 if (strcmp (str (a � b), "a \200 b")) 41 err ("unprintable char"); 42 43 if (strcmp (str ( a b@ c ), "a b@ c")) 44 err ("internal whitespace"); 45 46 if (strcmp (str(a \n), "a \n")) 47 err ("backslash token"); 48 49 if (strcmp (strvar (foo, bar), "foo, bar")) 50 err ("variable arguments"); 51 52 if (strcmp (glibc_str (ver), "GLIBC_2.2")) 53 err ("whitespace"); 54 55 return 0; 56} 57