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" 27 1 28 D 29 '\a' 30 * check-output-end 31 * 32 * check-error-start 33 preprocessor/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" */ 40 B(\a) 41 42 #define C\ 43 1 44 /* This should give 1 */ 45 C 46 47 #define D\ 48 1 49 /* And this should give D, since '\n' is removed and we get no whitespace */ 50 D 51 52 #define E '\\ 53 a' 54 /* This should give '\a' - with no warnings issued */ 55 E 56 57 /* This should give nothing */ 58 // junk \ 59 more 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 \