1/*
2 *	'\\' has a special meaning on phase 2 if and only if it is immediately
3 * followed by '\n'.  In any other position it's left alone as any other
4 * character.
5 *
6 * [5.1.1.2(1.2)]:
7 *   Each instance of a backslash character (\) immediately followed by
8 *   a new-line character is deleted, splicing physical source lines to
9 *   form logical source lines.  Only the last backslash on any physical
10 *   source line shall be eligible for being part of such a splice.
11 *   A source file that is not empty shall end in a new-line character,
12 *   which shall not be immediately preceded by a backslash character
13 *   before any such splicing takes place.
14 *
15 * Note that this happens on the phase 2, before we even think of any
16 * tokens.  In other words, splicing is ignorant of and transparent for
17 * the rest of tokenizer.
18 */
19
20/*
21 * check-name: phase2-backslash
22 * check-command: sparse -E $file
23 *
24 * check-output-start
25
26"\a"
271
28D
29'\a'
30 * check-output-end
31 *
32 * check-error-start
33preprocessor/phase2-backslash.c:68:0: warning: backslash-newline at end of file
34 * check-error-end
35 */
36
37#define A(x) #x
38#define B(x) A(x)
39/* This should result in "\a" */
40B(\a)
41
42#define C\
43 1
44/* This should give 1 */
45C
46
47#define D\
481
49/* And this should give D, since '\n' is removed and we get no whitespace */
50D
51
52#define E '\\
53a'
54/* This should give '\a' - with no warnings issued */
55E
56
57/* This should give nothing */
58// junk \
59more junk
60
61/* This should also give nothing */
62/\
63* comment *\
64/
65
66/* And this should complain since final newline should not be eaten by '\\' */
67\
68