68 lines
1.6 KiB
C
68 lines
1.6 KiB
C
/* Copyright (C) 2000 Free Software Foundation, Inc. */
|
|
|
|
/* { dg-do run } */
|
|
/* { dg-options "-trigraphs" } */
|
|
|
|
/* Test lexing of strings and character constants. */
|
|
|
|
#ifndef __WCHAR_TYPE__
|
|
#define __WCHAR_TYPE__ int
|
|
#endif
|
|
typedef __WCHAR_TYPE__ wchar_t;
|
|
|
|
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)
|
|
|
|
/* Escaped newlines. */
|
|
const char *str1 = "s\
|
|
t\
|
|
\
|
|
r??/
|
|
1";
|
|
|
|
const char x = '\
|
|
??/
|
|
b';
|
|
|
|
/* Test escaped terminators. */
|
|
const char *term = "\"\\\"\\";
|
|
const char termc = '\'';
|
|
const char *terms = "'";
|
|
|
|
/* Test wide strings and chars are lexed. */
|
|
const wchar_t wchar = L'w';
|
|
const wchar_t* wstring = L"wide string";
|
|
|
|
/* Test all 9 trigraphs embedded in a string. Test trigraphs do not
|
|
survive an embedded backslash newline. Test trigraphs preceded by
|
|
a '?' are still noticed. */
|
|
const char *t = "??/\??<??>??=??)??\
|
|
(??(??!??'??-???=???/
|
|
?-";
|
|
|
|
int main (int argc, char *argv[])
|
|
{
|
|
if (strcmp (str1, "str 1"))
|
|
err ("str1");
|
|
|
|
if (x != 'b')
|
|
err ("b");
|
|
|
|
/* We have to split the string up to avoid trigraph replacement
|
|
here. Split the 2 trigraphs after both 1 and 2 ?s; just doing
|
|
this exposed a bug in the initial release of the tokenized lexer. */
|
|
if (strcmp (t, "\\{}#]?" "?([|^~?#??" "-"))
|
|
err ("Embedded trigraphs");
|
|
|
|
if (term[0] != '"' || term[1] != '\\' || term[2] != '"'
|
|
|| term[3] != '\\' || term[4] != '\0')
|
|
err ("Escaped string terminators");
|
|
|
|
if (termc != terms[0])
|
|
err ("Escaped character constant terminator");
|
|
|
|
return 0;
|
|
}
|