blob: b0353300395f3ae39b33924f3cdf2427bfad1d63 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
/* 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;
}
|