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 \