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 #define A(x) #x 21 #define B(x) A(x) 22 /* This should result in "\a" */ 23 /* XXX: currently sparse produces "a" */ 24 /* Partially fixed: now it gives "\\a", which is a separate problem */ 25 B(\a) 26 27 #define C\ 28 1 29 /* This should give 1 */ 30 C 31 32 #define D\ 33 1 34 /* And this should give D, since '\n' is removed and we get no whitespace */ 35 /* XXX: currently sparse produces 1 */ 36 /* Fixed */ 37 D 38 39 #define E '\\ 40 a' 41 /* This should give '\a' - with no warnings issued */ 42 /* XXX: currently sparse complains a lot and ends up producing a */ 43 /* Fixed */ 44 E 45 46 /* This should give nothing */ 47 /* XXX: currently sparse produces more junk */ 48 /* Fixed */ 49 // junk \ 50 more junk 51 52 /* This should also give nothing */ 53 /* XXX: currently sparse produces / * comment * / */ 54 /* Fixed */ 55 /\ 56 * comment *\ 57 / 58 59 /* And this should complain since final newline should not be eaten by '\\' */ 60 /* XXX: currently sparse does not notice */ 61 /* Fixed */ 62 \