re PR c/7652 (-Wswitch-break : Warn if a switch case falls through)
[platform/upstream/gcc.git] / libcpp / lex.c
1 /* CPP Library - lexical analysis.
2    Copyright (C) 2000-2016 Free Software Foundation, Inc.
3    Contributed by Per Bothner, 1994-95.
4    Based on CCCP program by Paul Rubin, June 1986
5    Adapted to ANSI C, Richard Stallman, Jan 1987
6    Broken out to separate file, Zack Weinberg, Mar 2000
7
8 This program is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 3, or (at your option) any
11 later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "cpplib.h"
25 #include "internal.h"
26
27 enum spell_type
28 {
29   SPELL_OPERATOR = 0,
30   SPELL_IDENT,
31   SPELL_LITERAL,
32   SPELL_NONE
33 };
34
35 struct token_spelling
36 {
37   enum spell_type category;
38   const unsigned char *name;
39 };
40
41 static const unsigned char *const digraph_spellings[] =
42 { UC"%:", UC"%:%:", UC"<:", UC":>", UC"<%", UC"%>" };
43
44 #define OP(e, s) { SPELL_OPERATOR, UC s  },
45 #define TK(e, s) { SPELL_ ## s,    UC #e },
46 static const struct token_spelling token_spellings[N_TTYPES] = { TTYPE_TABLE };
47 #undef OP
48 #undef TK
49
50 #define TOKEN_SPELL(token) (token_spellings[(token)->type].category)
51 #define TOKEN_NAME(token) (token_spellings[(token)->type].name)
52
53 static void add_line_note (cpp_buffer *, const uchar *, unsigned int);
54 static int skip_line_comment (cpp_reader *);
55 static void skip_whitespace (cpp_reader *, cppchar_t);
56 static void lex_string (cpp_reader *, cpp_token *, const uchar *);
57 static void save_comment (cpp_reader *, cpp_token *, const uchar *, cppchar_t);
58 static void store_comment (cpp_reader *, cpp_token *);
59 static void create_literal (cpp_reader *, cpp_token *, const uchar *,
60                             unsigned int, enum cpp_ttype);
61 static bool warn_in_comment (cpp_reader *, _cpp_line_note *);
62 static int name_p (cpp_reader *, const cpp_string *);
63 static tokenrun *next_tokenrun (tokenrun *);
64
65 static _cpp_buff *new_buff (size_t);
66
67
68 /* Utility routine:
69
70    Compares, the token TOKEN to the NUL-terminated string STRING.
71    TOKEN must be a CPP_NAME.  Returns 1 for equal, 0 for unequal.  */
72 int
73 cpp_ideq (const cpp_token *token, const char *string)
74 {
75   if (token->type != CPP_NAME)
76     return 0;
77
78   return !ustrcmp (NODE_NAME (token->val.node.node), (const uchar *) string);
79 }
80
81 /* Record a note TYPE at byte POS into the current cleaned logical
82    line.  */
83 static void
84 add_line_note (cpp_buffer *buffer, const uchar *pos, unsigned int type)
85 {
86   if (buffer->notes_used == buffer->notes_cap)
87     {
88       buffer->notes_cap = buffer->notes_cap * 2 + 200;
89       buffer->notes = XRESIZEVEC (_cpp_line_note, buffer->notes,
90                                   buffer->notes_cap);
91     }
92
93   buffer->notes[buffer->notes_used].pos = pos;
94   buffer->notes[buffer->notes_used].type = type;
95   buffer->notes_used++;
96 }
97
98 \f
99 /* Fast path to find line special characters using optimized character
100    scanning algorithms.  Anything complicated falls back to the slow
101    path below.  Since this loop is very hot it's worth doing these kinds
102    of optimizations.
103
104    One of the paths through the ifdefs should provide 
105
106      const uchar *search_line_fast (const uchar *s, const uchar *end);
107
108    Between S and END, search for \n, \r, \\, ?.  Return a pointer to
109    the found character.
110
111    Note that the last character of the buffer is *always* a newline,
112    as forced by _cpp_convert_input.  This fact can be used to avoid
113    explicitly looking for the end of the buffer.  */
114
115 /* Configure gives us an ifdef test.  */
116 #ifndef WORDS_BIGENDIAN
117 #define WORDS_BIGENDIAN 0
118 #endif
119
120 /* We'd like the largest integer that fits into a register.  There's nothing
121    in <stdint.h> that gives us that.  For most hosts this is unsigned long,
122    but MS decided on an LLP64 model.  Thankfully when building with GCC we
123    can get the "real" word size.  */
124 #ifdef __GNUC__
125 typedef unsigned int word_type __attribute__((__mode__(__word__)));
126 #else
127 typedef unsigned long word_type;
128 #endif
129
130 /* The code below is only expecting sizes 4 or 8.
131    Die at compile-time if this expectation is violated.  */
132 typedef char check_word_type_size
133   [(sizeof(word_type) == 8 || sizeof(word_type) == 4) * 2 - 1];
134
135 /* Return X with the first N bytes forced to values that won't match one
136    of the interesting characters.  Note that NUL is not interesting.  */
137
138 static inline word_type
139 acc_char_mask_misalign (word_type val, unsigned int n)
140 {
141   word_type mask = -1;
142   if (WORDS_BIGENDIAN)
143     mask >>= n * 8;
144   else
145     mask <<= n * 8;
146   return val & mask;
147 }
148
149 /* Return X replicated to all byte positions within WORD_TYPE.  */
150
151 static inline word_type
152 acc_char_replicate (uchar x)
153 {
154   word_type ret;
155
156   ret = (x << 24) | (x << 16) | (x << 8) | x;
157   if (sizeof(word_type) == 8)
158     ret = (ret << 16 << 16) | ret;
159   return ret;
160 }
161
162 /* Return non-zero if some byte of VAL is (probably) C.  */
163
164 static inline word_type
165 acc_char_cmp (word_type val, word_type c)
166 {
167 #if defined(__GNUC__) && defined(__alpha__)
168   /* We can get exact results using a compare-bytes instruction.  
169      Get (val == c) via (0 >= (val ^ c)).  */
170   return __builtin_alpha_cmpbge (0, val ^ c);
171 #else
172   word_type magic = 0x7efefefeU;
173   if (sizeof(word_type) == 8)
174     magic = (magic << 16 << 16) | 0xfefefefeU;
175   magic |= 1;
176
177   val ^= c;
178   return ((val + magic) ^ ~val) & ~magic;
179 #endif
180 }
181
182 /* Given the result of acc_char_cmp is non-zero, return the index of
183    the found character.  If this was a false positive, return -1.  */
184
185 static inline int
186 acc_char_index (word_type cmp ATTRIBUTE_UNUSED,
187                 word_type val ATTRIBUTE_UNUSED)
188 {
189 #if defined(__GNUC__) && defined(__alpha__) && !WORDS_BIGENDIAN
190   /* The cmpbge instruction sets *bits* of the result corresponding to
191      matches in the bytes with no false positives.  */
192   return __builtin_ctzl (cmp);
193 #else
194   unsigned int i;
195
196   /* ??? It would be nice to force unrolling here,
197      and have all of these constants folded.  */
198   for (i = 0; i < sizeof(word_type); ++i)
199     {
200       uchar c;
201       if (WORDS_BIGENDIAN)
202         c = (val >> (sizeof(word_type) - i - 1) * 8) & 0xff;
203       else
204         c = (val >> i * 8) & 0xff;
205
206       if (c == '\n' || c == '\r' || c == '\\' || c == '?')
207         return i;
208     }
209
210   return -1;
211 #endif
212 }
213
214 /* A version of the fast scanner using bit fiddling techniques.
215  
216    For 32-bit words, one would normally perform 16 comparisons and
217    16 branches.  With this algorithm one performs 24 arithmetic
218    operations and one branch.  Whether this is faster with a 32-bit
219    word size is going to be somewhat system dependent.
220
221    For 64-bit words, we eliminate twice the number of comparisons
222    and branches without increasing the number of arithmetic operations.
223    It's almost certainly going to be a win with 64-bit word size.  */
224
225 static const uchar * search_line_acc_char (const uchar *, const uchar *)
226   ATTRIBUTE_UNUSED;
227
228 static const uchar *
229 search_line_acc_char (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
230 {
231   const word_type repl_nl = acc_char_replicate ('\n');
232   const word_type repl_cr = acc_char_replicate ('\r');
233   const word_type repl_bs = acc_char_replicate ('\\');
234   const word_type repl_qm = acc_char_replicate ('?');
235
236   unsigned int misalign;
237   const word_type *p;
238   word_type val, t;
239   
240   /* Align the buffer.  Mask out any bytes from before the beginning.  */
241   p = (word_type *)((uintptr_t)s & -sizeof(word_type));
242   val = *p;
243   misalign = (uintptr_t)s & (sizeof(word_type) - 1);
244   if (misalign)
245     val = acc_char_mask_misalign (val, misalign);
246
247   /* Main loop.  */
248   while (1)
249     {
250       t  = acc_char_cmp (val, repl_nl);
251       t |= acc_char_cmp (val, repl_cr);
252       t |= acc_char_cmp (val, repl_bs);
253       t |= acc_char_cmp (val, repl_qm);
254
255       if (__builtin_expect (t != 0, 0))
256         {
257           int i = acc_char_index (t, val);
258           if (i >= 0)
259             return (const uchar *)p + i;
260         }
261
262       val = *++p;
263     }
264 }
265
266 /* Disable on Solaris 2/x86 until the following problem can be properly
267    autoconfed:
268
269    The Solaris 10+ assembler tags objects with the instruction set
270    extensions used, so SSE4.2 executables cannot run on machines that
271    don't support that extension.  */
272
273 #if (GCC_VERSION >= 4005) && (__GNUC__ >= 5 || !defined(__PIC__)) && (defined(__i386__) || defined(__x86_64__)) && !(defined(__sun__) && defined(__svr4__))
274
275 /* Replicated character data to be shared between implementations.
276    Recall that outside of a context with vector support we can't
277    define compatible vector types, therefore these are all defined
278    in terms of raw characters.  */
279 static const char repl_chars[4][16] __attribute__((aligned(16))) = {
280   { '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n',
281     '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n' },
282   { '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r',
283     '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r' },
284   { '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\',
285     '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\' },
286   { '?', '?', '?', '?', '?', '?', '?', '?',
287     '?', '?', '?', '?', '?', '?', '?', '?' },
288 };
289
290 /* A version of the fast scanner using MMX vectorized byte compare insns.
291
292    This uses the PMOVMSKB instruction which was introduced with "MMX2",
293    which was packaged into SSE1; it is also present in the AMD MMX
294    extension.  Mark the function as using "sse" so that we emit a real
295    "emms" instruction, rather than the 3dNOW "femms" instruction.  */
296
297 static const uchar *
298 #ifndef __SSE__
299 __attribute__((__target__("sse")))
300 #endif
301 search_line_mmx (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
302 {
303   typedef char v8qi __attribute__ ((__vector_size__ (8)));
304   typedef int __m64 __attribute__ ((__vector_size__ (8), __may_alias__));
305
306   const v8qi repl_nl = *(const v8qi *)repl_chars[0];
307   const v8qi repl_cr = *(const v8qi *)repl_chars[1];
308   const v8qi repl_bs = *(const v8qi *)repl_chars[2];
309   const v8qi repl_qm = *(const v8qi *)repl_chars[3];
310
311   unsigned int misalign, found, mask;
312   const v8qi *p;
313   v8qi data, t, c;
314
315   /* Align the source pointer.  While MMX doesn't generate unaligned data
316      faults, this allows us to safely scan to the end of the buffer without
317      reading beyond the end of the last page.  */
318   misalign = (uintptr_t)s & 7;
319   p = (const v8qi *)((uintptr_t)s & -8);
320   data = *p;
321
322   /* Create a mask for the bytes that are valid within the first
323      16-byte block.  The Idea here is that the AND with the mask
324      within the loop is "free", since we need some AND or TEST
325      insn in order to set the flags for the branch anyway.  */
326   mask = -1u << misalign;
327
328   /* Main loop processing 8 bytes at a time.  */
329   goto start;
330   do
331     {
332       data = *++p;
333       mask = -1;
334
335     start:
336       t = __builtin_ia32_pcmpeqb(data, repl_nl);
337       c = __builtin_ia32_pcmpeqb(data, repl_cr);
338       t = (v8qi) __builtin_ia32_por ((__m64)t, (__m64)c);
339       c = __builtin_ia32_pcmpeqb(data, repl_bs);
340       t = (v8qi) __builtin_ia32_por ((__m64)t, (__m64)c);
341       c = __builtin_ia32_pcmpeqb(data, repl_qm);
342       t = (v8qi) __builtin_ia32_por ((__m64)t, (__m64)c);
343       found = __builtin_ia32_pmovmskb (t);
344       found &= mask;
345     }
346   while (!found);
347
348   __builtin_ia32_emms ();
349
350   /* FOUND contains 1 in bits for which we matched a relevant
351      character.  Conversion to the byte index is trivial.  */
352   found = __builtin_ctz(found);
353   return (const uchar *)p + found;
354 }
355
356 /* A version of the fast scanner using SSE2 vectorized byte compare insns.  */
357
358 static const uchar *
359 #ifndef __SSE2__
360 __attribute__((__target__("sse2")))
361 #endif
362 search_line_sse2 (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
363 {
364   typedef char v16qi __attribute__ ((__vector_size__ (16)));
365
366   const v16qi repl_nl = *(const v16qi *)repl_chars[0];
367   const v16qi repl_cr = *(const v16qi *)repl_chars[1];
368   const v16qi repl_bs = *(const v16qi *)repl_chars[2];
369   const v16qi repl_qm = *(const v16qi *)repl_chars[3];
370
371   unsigned int misalign, found, mask;
372   const v16qi *p;
373   v16qi data, t;
374
375   /* Align the source pointer.  */
376   misalign = (uintptr_t)s & 15;
377   p = (const v16qi *)((uintptr_t)s & -16);
378   data = *p;
379
380   /* Create a mask for the bytes that are valid within the first
381      16-byte block.  The Idea here is that the AND with the mask
382      within the loop is "free", since we need some AND or TEST
383      insn in order to set the flags for the branch anyway.  */
384   mask = -1u << misalign;
385
386   /* Main loop processing 16 bytes at a time.  */
387   goto start;
388   do
389     {
390       data = *++p;
391       mask = -1;
392
393     start:
394       t  = __builtin_ia32_pcmpeqb128(data, repl_nl);
395       t |= __builtin_ia32_pcmpeqb128(data, repl_cr);
396       t |= __builtin_ia32_pcmpeqb128(data, repl_bs);
397       t |= __builtin_ia32_pcmpeqb128(data, repl_qm);
398       found = __builtin_ia32_pmovmskb128 (t);
399       found &= mask;
400     }
401   while (!found);
402
403   /* FOUND contains 1 in bits for which we matched a relevant
404      character.  Conversion to the byte index is trivial.  */
405   found = __builtin_ctz(found);
406   return (const uchar *)p + found;
407 }
408
409 #ifdef HAVE_SSE4
410 /* A version of the fast scanner using SSE 4.2 vectorized string insns.  */
411
412 static const uchar *
413 #ifndef __SSE4_2__
414 __attribute__((__target__("sse4.2")))
415 #endif
416 search_line_sse42 (const uchar *s, const uchar *end)
417 {
418   typedef char v16qi __attribute__ ((__vector_size__ (16)));
419   static const v16qi search = { '\n', '\r', '?', '\\' };
420
421   uintptr_t si = (uintptr_t)s;
422   uintptr_t index;
423
424   /* Check for unaligned input.  */
425   if (si & 15)
426     {
427       v16qi sv;
428
429       if (__builtin_expect (end - s < 16, 0)
430           && __builtin_expect ((si & 0xfff) > 0xff0, 0))
431         {
432           /* There are less than 16 bytes left in the buffer, and less
433              than 16 bytes left on the page.  Reading 16 bytes at this
434              point might generate a spurious page fault.  Defer to the
435              SSE2 implementation, which already handles alignment.  */
436           return search_line_sse2 (s, end);
437         }
438
439       /* ??? The builtin doesn't understand that the PCMPESTRI read from
440          memory need not be aligned.  */
441       sv = __builtin_ia32_loaddqu ((const char *) s);
442       index = __builtin_ia32_pcmpestri128 (search, 4, sv, 16, 0);
443
444       if (__builtin_expect (index < 16, 0))
445         goto found;
446
447       /* Advance the pointer to an aligned address.  We will re-scan a
448          few bytes, but we no longer need care for reading past the
449          end of a page, since we're guaranteed a match.  */
450       s = (const uchar *)((si + 15) & -16);
451     }
452
453   /* Main loop, processing 16 bytes at a time.  */
454 #ifdef __GCC_ASM_FLAG_OUTPUTS__
455   while (1)
456     {
457       char f;
458
459       /* By using inline assembly instead of the builtin,
460          we can use the result, as well as the flags set.  */
461       __asm ("%vpcmpestri\t$0, %2, %3"
462              : "=c"(index), "=@ccc"(f)
463              : "m"(*s), "x"(search), "a"(4), "d"(16));
464       if (f)
465         break;
466       
467       s += 16;
468     }
469 #else
470   s -= 16;
471   /* By doing the whole loop in inline assembly,
472      we can make proper use of the flags set.  */
473   __asm (      ".balign 16\n"
474         "0:     add $16, %1\n"
475         "       %vpcmpestri\t$0, (%1), %2\n"
476         "       jnc 0b"
477         : "=&c"(index), "+r"(s)
478         : "x"(search), "a"(4), "d"(16));
479 #endif
480
481  found:
482   return s + index;
483 }
484
485 #else
486 /* Work around out-dated assemblers without sse4 support.  */
487 #define search_line_sse42 search_line_sse2
488 #endif
489
490 /* Check the CPU capabilities.  */
491
492 #include "../gcc/config/i386/cpuid.h"
493
494 typedef const uchar * (*search_line_fast_type) (const uchar *, const uchar *);
495 static search_line_fast_type search_line_fast;
496
497 #define HAVE_init_vectorized_lexer 1
498 static inline void
499 init_vectorized_lexer (void)
500 {
501   unsigned dummy, ecx = 0, edx = 0;
502   search_line_fast_type impl = search_line_acc_char;
503   int minimum = 0;
504
505 #if defined(__SSE4_2__)
506   minimum = 3;
507 #elif defined(__SSE2__)
508   minimum = 2;
509 #elif defined(__SSE__)
510   minimum = 1;
511 #endif
512
513   if (minimum == 3)
514     impl = search_line_sse42;
515   else if (__get_cpuid (1, &dummy, &dummy, &ecx, &edx) || minimum == 2)
516     {
517       if (minimum == 3 || (ecx & bit_SSE4_2))
518         impl = search_line_sse42;
519       else if (minimum == 2 || (edx & bit_SSE2))
520         impl = search_line_sse2;
521       else if (minimum == 1 || (edx & bit_SSE))
522         impl = search_line_mmx;
523     }
524   else if (__get_cpuid (0x80000001, &dummy, &dummy, &dummy, &edx))
525     {
526       if (minimum == 1
527           || (edx & (bit_MMXEXT | bit_CMOV)) == (bit_MMXEXT | bit_CMOV))
528         impl = search_line_mmx;
529     }
530
531   search_line_fast = impl;
532 }
533
534 #elif defined(_ARCH_PWR8) && defined(__ALTIVEC__)
535
536 /* A vection of the fast scanner using AltiVec vectorized byte compares
537    and VSX unaligned loads (when VSX is available).  This is otherwise
538    the same as the pre-GCC 5 version.  */
539
540 ATTRIBUTE_NO_SANITIZE_UNDEFINED
541 static const uchar *
542 search_line_fast (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
543 {
544   typedef __attribute__((altivec(vector))) unsigned char vc;
545
546   const vc repl_nl = {
547     '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', 
548     '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n'
549   };
550   const vc repl_cr = {
551     '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', 
552     '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r'
553   };
554   const vc repl_bs = {
555     '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', 
556     '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\'
557   };
558   const vc repl_qm = {
559     '?', '?', '?', '?', '?', '?', '?', '?', 
560     '?', '?', '?', '?', '?', '?', '?', '?', 
561   };
562   const vc zero = { 0 };
563
564   vc data, t;
565
566   /* Main loop processing 16 bytes at a time.  */
567   do
568     {
569       vc m_nl, m_cr, m_bs, m_qm;
570
571       data = *((const vc *)s);
572       s += 16;
573
574       m_nl = (vc) __builtin_vec_cmpeq(data, repl_nl);
575       m_cr = (vc) __builtin_vec_cmpeq(data, repl_cr);
576       m_bs = (vc) __builtin_vec_cmpeq(data, repl_bs);
577       m_qm = (vc) __builtin_vec_cmpeq(data, repl_qm);
578       t = (m_nl | m_cr) | (m_bs | m_qm);
579
580       /* T now contains 0xff in bytes for which we matched one of the relevant
581          characters.  We want to exit the loop if any byte in T is non-zero.
582          Below is the expansion of vec_any_ne(t, zero).  */
583     }
584   while (!__builtin_vec_vcmpeq_p(/*__CR6_LT_REV*/3, t, zero));
585
586   /* Restore s to to point to the 16 bytes we just processed.  */
587   s -= 16;
588
589   {
590 #define N  (sizeof(vc) / sizeof(long))
591
592     union {
593       vc v;
594       /* Statically assert that N is 2 or 4.  */
595       unsigned long l[(N == 2 || N == 4) ? N : -1];
596     } u;
597     unsigned long l, i = 0;
598
599     u.v = t;
600
601     /* Find the first word of T that is non-zero.  */
602     switch (N)
603       {
604       case 4:
605         l = u.l[i++];
606         if (l != 0)
607           break;
608         s += sizeof(unsigned long);
609         l = u.l[i++];
610         if (l != 0)
611           break;
612         s += sizeof(unsigned long);
613         /* FALLTHRU */
614       case 2:
615         l = u.l[i++];
616         if (l != 0)
617           break;
618         s += sizeof(unsigned long);
619         l = u.l[i];
620       }
621
622     /* L now contains 0xff in bytes for which we matched one of the
623        relevant characters.  We can find the byte index by finding
624        its bit index and dividing by 8.  */
625 #ifdef __BIG_ENDIAN__
626     l = __builtin_clzl(l) >> 3;
627 #else
628     l = __builtin_ctzl(l) >> 3;
629 #endif
630     return s + l;
631
632 #undef N
633   }
634 }
635
636 #elif (GCC_VERSION >= 4005) && defined(__ALTIVEC__) && defined (__BIG_ENDIAN__)
637
638 /* A vection of the fast scanner using AltiVec vectorized byte compares.
639    This cannot be used for little endian because vec_lvsl/lvsr are
640    deprecated for little endian and the code won't work properly.  */
641 /* ??? Unfortunately, attribute(target("altivec")) is not yet supported,
642    so we can't compile this function without -maltivec on the command line
643    (or implied by some other switch).  */
644
645 static const uchar *
646 search_line_fast (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
647 {
648   typedef __attribute__((altivec(vector))) unsigned char vc;
649
650   const vc repl_nl = {
651     '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', 
652     '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n'
653   };
654   const vc repl_cr = {
655     '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r', 
656     '\r', '\r', '\r', '\r', '\r', '\r', '\r', '\r'
657   };
658   const vc repl_bs = {
659     '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\', 
660     '\\', '\\', '\\', '\\', '\\', '\\', '\\', '\\'
661   };
662   const vc repl_qm = {
663     '?', '?', '?', '?', '?', '?', '?', '?', 
664     '?', '?', '?', '?', '?', '?', '?', '?', 
665   };
666   const vc ones = {
667     -1, -1, -1, -1, -1, -1, -1, -1,
668     -1, -1, -1, -1, -1, -1, -1, -1,
669   };
670   const vc zero = { 0 };
671
672   vc data, mask, t;
673
674   /* Altivec loads automatically mask addresses with -16.  This lets us
675      issue the first load as early as possible.  */
676   data = __builtin_vec_ld(0, (const vc *)s);
677
678   /* Discard bytes before the beginning of the buffer.  Do this by
679      beginning with all ones and shifting in zeros according to the
680      mis-alignment.  The LVSR instruction pulls the exact shift we
681      want from the address.  */
682   mask = __builtin_vec_lvsr(0, s);
683   mask = __builtin_vec_perm(zero, ones, mask);
684   data &= mask;
685
686   /* While altivec loads mask addresses, we still need to align S so
687      that the offset we compute at the end is correct.  */
688   s = (const uchar *)((uintptr_t)s & -16);
689
690   /* Main loop processing 16 bytes at a time.  */
691   goto start;
692   do
693     {
694       vc m_nl, m_cr, m_bs, m_qm;
695
696       s += 16;
697       data = __builtin_vec_ld(0, (const vc *)s);
698
699     start:
700       m_nl = (vc) __builtin_vec_cmpeq(data, repl_nl);
701       m_cr = (vc) __builtin_vec_cmpeq(data, repl_cr);
702       m_bs = (vc) __builtin_vec_cmpeq(data, repl_bs);
703       m_qm = (vc) __builtin_vec_cmpeq(data, repl_qm);
704       t = (m_nl | m_cr) | (m_bs | m_qm);
705
706       /* T now contains 0xff in bytes for which we matched one of the relevant
707          characters.  We want to exit the loop if any byte in T is non-zero.
708          Below is the expansion of vec_any_ne(t, zero).  */
709     }
710   while (!__builtin_vec_vcmpeq_p(/*__CR6_LT_REV*/3, t, zero));
711
712   {
713 #define N  (sizeof(vc) / sizeof(long))
714
715     union {
716       vc v;
717       /* Statically assert that N is 2 or 4.  */
718       unsigned long l[(N == 2 || N == 4) ? N : -1];
719     } u;
720     unsigned long l, i = 0;
721
722     u.v = t;
723
724     /* Find the first word of T that is non-zero.  */
725     switch (N)
726       {
727       case 4:
728         l = u.l[i++];
729         if (l != 0)
730           break;
731         s += sizeof(unsigned long);
732         l = u.l[i++];
733         if (l != 0)
734           break;
735         s += sizeof(unsigned long);
736       case 2:
737         l = u.l[i++];
738         if (l != 0)
739           break;
740         s += sizeof(unsigned long);
741         l = u.l[i];
742       }
743
744     /* L now contains 0xff in bytes for which we matched one of the
745        relevant characters.  We can find the byte index by finding
746        its bit index and dividing by 8.  */
747     l = __builtin_clzl(l) >> 3;
748     return s + l;
749
750 #undef N
751   }
752 }
753
754 #elif defined (__ARM_NEON)
755 #include "arm_neon.h"
756
757 static const uchar *
758 search_line_fast (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
759 {
760   const uint8x16_t repl_nl = vdupq_n_u8 ('\n');
761   const uint8x16_t repl_cr = vdupq_n_u8 ('\r');
762   const uint8x16_t repl_bs = vdupq_n_u8 ('\\');
763   const uint8x16_t repl_qm = vdupq_n_u8 ('?');
764   const uint8x16_t xmask = (uint8x16_t) vdupq_n_u64 (0x8040201008040201ULL);
765
766   unsigned int misalign, found, mask;
767   const uint8_t *p;
768   uint8x16_t data;
769
770   /* Align the source pointer.  */
771   misalign = (uintptr_t)s & 15;
772   p = (const uint8_t *)((uintptr_t)s & -16);
773   data = vld1q_u8 (p);
774
775   /* Create a mask for the bytes that are valid within the first
776      16-byte block.  The Idea here is that the AND with the mask
777      within the loop is "free", since we need some AND or TEST
778      insn in order to set the flags for the branch anyway.  */
779   mask = (-1u << misalign) & 0xffff;
780
781   /* Main loop, processing 16 bytes at a time.  */
782   goto start;
783
784   do
785     {
786       uint8x8_t l;
787       uint16x4_t m;
788       uint32x2_t n;
789       uint8x16_t t, u, v, w;
790
791       p += 16;
792       data = vld1q_u8 (p);
793       mask = 0xffff;
794
795     start:
796       t = vceqq_u8 (data, repl_nl);
797       u = vceqq_u8 (data, repl_cr);
798       v = vorrq_u8 (t, vceqq_u8 (data, repl_bs));
799       w = vorrq_u8 (u, vceqq_u8 (data, repl_qm));
800       t = vandq_u8 (vorrq_u8 (v, w), xmask);
801       l = vpadd_u8 (vget_low_u8 (t), vget_high_u8 (t));
802       m = vpaddl_u8 (l);
803       n = vpaddl_u16 (m);
804       
805       found = vget_lane_u32 ((uint32x2_t) vorr_u64 ((uint64x1_t) n, 
806               vshr_n_u64 ((uint64x1_t) n, 24)), 0);
807       found &= mask;
808     }
809   while (!found);
810
811   /* FOUND contains 1 in bits for which we matched a relevant
812      character.  Conversion to the byte index is trivial.  */
813   found = __builtin_ctz (found);
814   return (const uchar *)p + found;
815 }
816
817 #else
818
819 /* We only have one accellerated alternative.  Use a direct call so that
820    we encourage inlining.  */
821
822 #define search_line_fast  search_line_acc_char
823
824 #endif
825
826 /* Initialize the lexer if needed.  */
827
828 void
829 _cpp_init_lexer (void)
830 {
831 #ifdef HAVE_init_vectorized_lexer
832   init_vectorized_lexer ();
833 #endif
834 }
835
836 /* Returns with a logical line that contains no escaped newlines or
837    trigraphs.  This is a time-critical inner loop.  */
838 void
839 _cpp_clean_line (cpp_reader *pfile)
840 {
841   cpp_buffer *buffer;
842   const uchar *s;
843   uchar c, *d, *p;
844
845   buffer = pfile->buffer;
846   buffer->cur_note = buffer->notes_used = 0;
847   buffer->cur = buffer->line_base = buffer->next_line;
848   buffer->need_line = false;
849   s = buffer->next_line;
850
851   if (!buffer->from_stage3)
852     {
853       const uchar *pbackslash = NULL;
854
855       /* Fast path.  This is the common case of an un-escaped line with
856          no trigraphs.  The primary win here is by not writing any
857          data back to memory until we have to.  */
858       while (1)
859         {
860           /* Perform an optimized search for \n, \r, \\, ?.  */
861           s = search_line_fast (s, buffer->rlimit);
862
863           c = *s;
864           if (c == '\\')
865             {
866               /* Record the location of the backslash and continue.  */
867               pbackslash = s++;
868             }
869           else if (__builtin_expect (c == '?', 0))
870             {
871               if (__builtin_expect (s[1] == '?', false)
872                    && _cpp_trigraph_map[s[2]])
873                 {
874                   /* Have a trigraph.  We may or may not have to convert
875                      it.  Add a line note regardless, for -Wtrigraphs.  */
876                   add_line_note (buffer, s, s[2]);
877                   if (CPP_OPTION (pfile, trigraphs))
878                     {
879                       /* We do, and that means we have to switch to the
880                          slow path.  */
881                       d = (uchar *) s;
882                       *d = _cpp_trigraph_map[s[2]];
883                       s += 2;
884                       goto slow_path;
885                     }
886                 }
887               /* Not a trigraph.  Continue on fast-path.  */
888               s++;
889             }
890           else
891             break;
892         }
893
894       /* This must be \r or \n.  We're either done, or we'll be forced
895          to write back to the buffer and continue on the slow path.  */
896       d = (uchar *) s;
897
898       if (__builtin_expect (s == buffer->rlimit, false))
899         goto done;
900
901       /* DOS line ending? */
902       if (__builtin_expect (c == '\r', false) && s[1] == '\n')
903         {
904           s++;
905           if (s == buffer->rlimit)
906             goto done;
907         }
908
909       if (__builtin_expect (pbackslash == NULL, true))
910         goto done;
911
912       /* Check for escaped newline.  */
913       p = d;
914       while (is_nvspace (p[-1]))
915         p--;
916       if (p - 1 != pbackslash)
917         goto done;
918
919       /* Have an escaped newline; process it and proceed to
920          the slow path.  */
921       add_line_note (buffer, p - 1, p != d ? ' ' : '\\');
922       d = p - 2;
923       buffer->next_line = p - 1;
924
925     slow_path:
926       while (1)
927         {
928           c = *++s;
929           *++d = c;
930
931           if (c == '\n' || c == '\r')
932             {
933               /* Handle DOS line endings.  */
934               if (c == '\r' && s != buffer->rlimit && s[1] == '\n')
935                 s++;
936               if (s == buffer->rlimit)
937                 break;
938
939               /* Escaped?  */
940               p = d;
941               while (p != buffer->next_line && is_nvspace (p[-1]))
942                 p--;
943               if (p == buffer->next_line || p[-1] != '\\')
944                 break;
945
946               add_line_note (buffer, p - 1, p != d ? ' ': '\\');
947               d = p - 2;
948               buffer->next_line = p - 1;
949             }
950           else if (c == '?' && s[1] == '?' && _cpp_trigraph_map[s[2]])
951             {
952               /* Add a note regardless, for the benefit of -Wtrigraphs.  */
953               add_line_note (buffer, d, s[2]);
954               if (CPP_OPTION (pfile, trigraphs))
955                 {
956                   *d = _cpp_trigraph_map[s[2]];
957                   s += 2;
958                 }
959             }
960         }
961     }
962   else
963     {
964       while (*s != '\n' && *s != '\r')
965         s++;
966       d = (uchar *) s;
967
968       /* Handle DOS line endings.  */
969       if (*s == '\r' && s != buffer->rlimit && s[1] == '\n')
970         s++;
971     }
972
973  done:
974   *d = '\n';
975   /* A sentinel note that should never be processed.  */
976   add_line_note (buffer, d + 1, '\n');
977   buffer->next_line = s + 1;
978 }
979
980 /* Return true if the trigraph indicated by NOTE should be warned
981    about in a comment.  */
982 static bool
983 warn_in_comment (cpp_reader *pfile, _cpp_line_note *note)
984 {
985   const uchar *p;
986
987   /* Within comments we don't warn about trigraphs, unless the
988      trigraph forms an escaped newline, as that may change
989      behavior.  */
990   if (note->type != '/')
991     return false;
992
993   /* If -trigraphs, then this was an escaped newline iff the next note
994      is coincident.  */
995   if (CPP_OPTION (pfile, trigraphs))
996     return note[1].pos == note->pos;
997
998   /* Otherwise, see if this forms an escaped newline.  */
999   p = note->pos + 3;
1000   while (is_nvspace (*p))
1001     p++;
1002
1003   /* There might have been escaped newlines between the trigraph and the
1004      newline we found.  Hence the position test.  */
1005   return (*p == '\n' && p < note[1].pos);
1006 }
1007
1008 /* Process the notes created by add_line_note as far as the current
1009    location.  */
1010 void
1011 _cpp_process_line_notes (cpp_reader *pfile, int in_comment)
1012 {
1013   cpp_buffer *buffer = pfile->buffer;
1014
1015   for (;;)
1016     {
1017       _cpp_line_note *note = &buffer->notes[buffer->cur_note];
1018       unsigned int col;
1019
1020       if (note->pos > buffer->cur)
1021         break;
1022
1023       buffer->cur_note++;
1024       col = CPP_BUF_COLUMN (buffer, note->pos + 1);
1025
1026       if (note->type == '\\' || note->type == ' ')
1027         {
1028           if (note->type == ' ' && !in_comment)
1029             cpp_error_with_line (pfile, CPP_DL_WARNING, pfile->line_table->highest_line, col,
1030                                  "backslash and newline separated by space");
1031
1032           if (buffer->next_line > buffer->rlimit)
1033             {
1034               cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->line_table->highest_line, col,
1035                                    "backslash-newline at end of file");
1036               /* Prevent "no newline at end of file" warning.  */
1037               buffer->next_line = buffer->rlimit;
1038             }
1039
1040           buffer->line_base = note->pos;
1041           CPP_INCREMENT_LINE (pfile, 0);
1042         }
1043       else if (_cpp_trigraph_map[note->type])
1044         {
1045           if (CPP_OPTION (pfile, warn_trigraphs)
1046               && (!in_comment || warn_in_comment (pfile, note)))
1047             {
1048               if (CPP_OPTION (pfile, trigraphs))
1049                 cpp_warning_with_line (pfile, CPP_W_TRIGRAPHS,
1050                                        pfile->line_table->highest_line, col,
1051                                        "trigraph ??%c converted to %c",
1052                                        note->type,
1053                                        (int) _cpp_trigraph_map[note->type]);
1054               else
1055                 {
1056                   cpp_warning_with_line 
1057                     (pfile, CPP_W_TRIGRAPHS,
1058                      pfile->line_table->highest_line, col,
1059                      "trigraph ??%c ignored, use -trigraphs to enable",
1060                      note->type);
1061                 }
1062             }
1063         }
1064       else if (note->type == 0)
1065         /* Already processed in lex_raw_string.  */;
1066       else
1067         abort ();
1068     }
1069 }
1070
1071 /* Skip a C-style block comment.  We find the end of the comment by
1072    seeing if an asterisk is before every '/' we encounter.  Returns
1073    nonzero if comment terminated by EOF, zero otherwise.
1074
1075    Buffer->cur points to the initial asterisk of the comment.  */
1076 bool
1077 _cpp_skip_block_comment (cpp_reader *pfile)
1078 {
1079   cpp_buffer *buffer = pfile->buffer;
1080   const uchar *cur = buffer->cur;
1081   uchar c;
1082
1083   cur++;
1084   if (*cur == '/')
1085     cur++;
1086
1087   for (;;)
1088     {
1089       /* People like decorating comments with '*', so check for '/'
1090          instead for efficiency.  */
1091       c = *cur++;
1092
1093       if (c == '/')
1094         {
1095           if (cur[-2] == '*')
1096             break;
1097
1098           /* Warn about potential nested comments, but not if the '/'
1099              comes immediately before the true comment delimiter.
1100              Don't bother to get it right across escaped newlines.  */
1101           if (CPP_OPTION (pfile, warn_comments)
1102               && cur[0] == '*' && cur[1] != '/')
1103             {
1104               buffer->cur = cur;
1105               cpp_warning_with_line (pfile, CPP_W_COMMENTS,
1106                                      pfile->line_table->highest_line,
1107                                      CPP_BUF_COL (buffer),
1108                                      "\"/*\" within comment");
1109             }
1110         }
1111       else if (c == '\n')
1112         {
1113           unsigned int cols;
1114           buffer->cur = cur - 1;
1115           _cpp_process_line_notes (pfile, true);
1116           if (buffer->next_line >= buffer->rlimit)
1117             return true;
1118           _cpp_clean_line (pfile);
1119
1120           cols = buffer->next_line - buffer->line_base;
1121           CPP_INCREMENT_LINE (pfile, cols);
1122
1123           cur = buffer->cur;
1124         }
1125     }
1126
1127   buffer->cur = cur;
1128   _cpp_process_line_notes (pfile, true);
1129   return false;
1130 }
1131
1132 /* Skip a C++ line comment, leaving buffer->cur pointing to the
1133    terminating newline.  Handles escaped newlines.  Returns nonzero
1134    if a multiline comment.  */
1135 static int
1136 skip_line_comment (cpp_reader *pfile)
1137 {
1138   cpp_buffer *buffer = pfile->buffer;
1139   source_location orig_line = pfile->line_table->highest_line;
1140
1141   while (*buffer->cur != '\n')
1142     buffer->cur++;
1143
1144   _cpp_process_line_notes (pfile, true);
1145   return orig_line != pfile->line_table->highest_line;
1146 }
1147
1148 /* Skips whitespace, saving the next non-whitespace character.  */
1149 static void
1150 skip_whitespace (cpp_reader *pfile, cppchar_t c)
1151 {
1152   cpp_buffer *buffer = pfile->buffer;
1153   bool saw_NUL = false;
1154
1155   do
1156     {
1157       /* Horizontal space always OK.  */
1158       if (c == ' ' || c == '\t')
1159         ;
1160       /* Just \f \v or \0 left.  */
1161       else if (c == '\0')
1162         saw_NUL = true;
1163       else if (pfile->state.in_directive && CPP_PEDANTIC (pfile))
1164         cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->line_table->highest_line,
1165                              CPP_BUF_COL (buffer),
1166                              "%s in preprocessing directive",
1167                              c == '\f' ? "form feed" : "vertical tab");
1168
1169       c = *buffer->cur++;
1170     }
1171   /* We only want non-vertical space, i.e. ' ' \t \f \v \0.  */
1172   while (is_nvspace (c));
1173
1174   if (saw_NUL)
1175     cpp_error (pfile, CPP_DL_WARNING, "null character(s) ignored");
1176
1177   buffer->cur--;
1178 }
1179
1180 /* See if the characters of a number token are valid in a name (no
1181    '.', '+' or '-').  */
1182 static int
1183 name_p (cpp_reader *pfile, const cpp_string *string)
1184 {
1185   unsigned int i;
1186
1187   for (i = 0; i < string->len; i++)
1188     if (!is_idchar (string->text[i]))
1189       return 0;
1190
1191   return 1;
1192 }
1193
1194 /* After parsing an identifier or other sequence, produce a warning about
1195    sequences not in NFC/NFKC.  */
1196 static void
1197 warn_about_normalization (cpp_reader *pfile, 
1198                           const cpp_token *token,
1199                           const struct normalize_state *s)
1200 {
1201   if (CPP_OPTION (pfile, warn_normalize) < NORMALIZE_STATE_RESULT (s)
1202       && !pfile->state.skipping)
1203     {
1204       /* Make sure that the token is printed using UCNs, even
1205          if we'd otherwise happily print UTF-8.  */
1206       unsigned char *buf = XNEWVEC (unsigned char, cpp_token_len (token));
1207       size_t sz;
1208
1209       sz = cpp_spell_token (pfile, token, buf, false) - buf;
1210       if (NORMALIZE_STATE_RESULT (s) == normalized_C)
1211         cpp_warning_with_line (pfile, CPP_W_NORMALIZE, token->src_loc, 0,
1212                                "`%.*s' is not in NFKC", (int) sz, buf);
1213       else
1214         cpp_warning_with_line (pfile, CPP_W_NORMALIZE, token->src_loc, 0,
1215                                "`%.*s' is not in NFC", (int) sz, buf);
1216       free (buf);
1217     }
1218 }
1219
1220 /* Returns TRUE if the sequence starting at buffer->cur is invalid in
1221    an identifier.  FIRST is TRUE if this starts an identifier.  */
1222 static bool
1223 forms_identifier_p (cpp_reader *pfile, int first,
1224                     struct normalize_state *state)
1225 {
1226   cpp_buffer *buffer = pfile->buffer;
1227
1228   if (*buffer->cur == '$')
1229     {
1230       if (!CPP_OPTION (pfile, dollars_in_ident))
1231         return false;
1232
1233       buffer->cur++;
1234       if (CPP_OPTION (pfile, warn_dollars) && !pfile->state.skipping)
1235         {
1236           CPP_OPTION (pfile, warn_dollars) = 0;
1237           cpp_error (pfile, CPP_DL_PEDWARN, "'$' in identifier or number");
1238         }
1239
1240       return true;
1241     }
1242
1243   /* Is this a syntactically valid UCN?  */
1244   if (CPP_OPTION (pfile, extended_identifiers)
1245       && *buffer->cur == '\\'
1246       && (buffer->cur[1] == 'u' || buffer->cur[1] == 'U'))
1247     {
1248       cppchar_t s;
1249       buffer->cur += 2;
1250       if (_cpp_valid_ucn (pfile, &buffer->cur, buffer->rlimit, 1 + !first,
1251                           state, &s, NULL, NULL))
1252         return true;
1253       buffer->cur -= 2;
1254     }
1255
1256   return false;
1257 }
1258
1259 /* Helper function to get the cpp_hashnode of the identifier BASE.  */
1260 static cpp_hashnode *
1261 lex_identifier_intern (cpp_reader *pfile, const uchar *base)
1262 {
1263   cpp_hashnode *result;
1264   const uchar *cur;
1265   unsigned int len;
1266   unsigned int hash = HT_HASHSTEP (0, *base);
1267
1268   cur = base + 1;
1269   while (ISIDNUM (*cur))
1270     {
1271       hash = HT_HASHSTEP (hash, *cur);
1272       cur++;
1273     }
1274   len = cur - base;
1275   hash = HT_HASHFINISH (hash, len);
1276   result = CPP_HASHNODE (ht_lookup_with_hash (pfile->hash_table,
1277                                               base, len, hash, HT_ALLOC));
1278
1279   /* Rarely, identifiers require diagnostics when lexed.  */
1280   if (__builtin_expect ((result->flags & NODE_DIAGNOSTIC)
1281                         && !pfile->state.skipping, 0))
1282     {
1283       /* It is allowed to poison the same identifier twice.  */
1284       if ((result->flags & NODE_POISONED) && !pfile->state.poisoned_ok)
1285         cpp_error (pfile, CPP_DL_ERROR, "attempt to use poisoned \"%s\"",
1286                    NODE_NAME (result));
1287
1288       /* Constraint 6.10.3.5: __VA_ARGS__ should only appear in the
1289          replacement list of a variadic macro.  */
1290       if (result == pfile->spec_nodes.n__VA_ARGS__
1291           && !pfile->state.va_args_ok)
1292         {
1293           if (CPP_OPTION (pfile, cplusplus))
1294             cpp_error (pfile, CPP_DL_PEDWARN,
1295                        "__VA_ARGS__ can only appear in the expansion"
1296                        " of a C++11 variadic macro");
1297           else
1298             cpp_error (pfile, CPP_DL_PEDWARN,
1299                        "__VA_ARGS__ can only appear in the expansion"
1300                        " of a C99 variadic macro");
1301         }
1302
1303       /* For -Wc++-compat, warn about use of C++ named operators.  */
1304       if (result->flags & NODE_WARN_OPERATOR)
1305         cpp_warning (pfile, CPP_W_CXX_OPERATOR_NAMES,
1306                      "identifier \"%s\" is a special operator name in C++",
1307                      NODE_NAME (result));
1308     }
1309
1310   return result;
1311 }
1312
1313 /* Get the cpp_hashnode of an identifier specified by NAME in
1314    the current cpp_reader object.  If none is found, NULL is returned.  */
1315 cpp_hashnode *
1316 _cpp_lex_identifier (cpp_reader *pfile, const char *name)
1317 {
1318   cpp_hashnode *result;
1319   result = lex_identifier_intern (pfile, (uchar *) name);
1320   return result;
1321 }
1322
1323 /* Lex an identifier starting at BUFFER->CUR - 1.  */
1324 static cpp_hashnode *
1325 lex_identifier (cpp_reader *pfile, const uchar *base, bool starts_ucn,
1326                 struct normalize_state *nst, cpp_hashnode **spelling)
1327 {
1328   cpp_hashnode *result;
1329   const uchar *cur;
1330   unsigned int len;
1331   unsigned int hash = HT_HASHSTEP (0, *base);
1332
1333   cur = pfile->buffer->cur;
1334   if (! starts_ucn)
1335     {
1336       while (ISIDNUM (*cur))
1337         {
1338           hash = HT_HASHSTEP (hash, *cur);
1339           cur++;
1340         }
1341       NORMALIZE_STATE_UPDATE_IDNUM (nst, *(cur - 1));
1342     }
1343   pfile->buffer->cur = cur;
1344   if (starts_ucn || forms_identifier_p (pfile, false, nst))
1345     {
1346       /* Slower version for identifiers containing UCNs (or $).  */
1347       do {
1348         while (ISIDNUM (*pfile->buffer->cur))
1349           {
1350             NORMALIZE_STATE_UPDATE_IDNUM (nst, *pfile->buffer->cur);
1351             pfile->buffer->cur++;
1352           }
1353       } while (forms_identifier_p (pfile, false, nst));
1354       result = _cpp_interpret_identifier (pfile, base,
1355                                           pfile->buffer->cur - base);
1356       *spelling = cpp_lookup (pfile, base, pfile->buffer->cur - base);
1357     }
1358   else
1359     {
1360       len = cur - base;
1361       hash = HT_HASHFINISH (hash, len);
1362
1363       result = CPP_HASHNODE (ht_lookup_with_hash (pfile->hash_table,
1364                                                   base, len, hash, HT_ALLOC));
1365       *spelling = result;
1366     }
1367
1368   /* Rarely, identifiers require diagnostics when lexed.  */
1369   if (__builtin_expect ((result->flags & NODE_DIAGNOSTIC)
1370                         && !pfile->state.skipping, 0))
1371     {
1372       /* It is allowed to poison the same identifier twice.  */
1373       if ((result->flags & NODE_POISONED) && !pfile->state.poisoned_ok)
1374         cpp_error (pfile, CPP_DL_ERROR, "attempt to use poisoned \"%s\"",
1375                    NODE_NAME (result));
1376
1377       /* Constraint 6.10.3.5: __VA_ARGS__ should only appear in the
1378          replacement list of a variadic macro.  */
1379       if (result == pfile->spec_nodes.n__VA_ARGS__
1380           && !pfile->state.va_args_ok)
1381         {
1382           if (CPP_OPTION (pfile, cplusplus))
1383             cpp_error (pfile, CPP_DL_PEDWARN,
1384                        "__VA_ARGS__ can only appear in the expansion"
1385                        " of a C++11 variadic macro");
1386           else
1387             cpp_error (pfile, CPP_DL_PEDWARN,
1388                        "__VA_ARGS__ can only appear in the expansion"
1389                        " of a C99 variadic macro");
1390         }
1391
1392       /* For -Wc++-compat, warn about use of C++ named operators.  */
1393       if (result->flags & NODE_WARN_OPERATOR)
1394         cpp_warning (pfile, CPP_W_CXX_OPERATOR_NAMES,
1395                      "identifier \"%s\" is a special operator name in C++",
1396                      NODE_NAME (result));
1397     }
1398
1399   return result;
1400 }
1401
1402 /* Lex a number to NUMBER starting at BUFFER->CUR - 1.  */
1403 static void
1404 lex_number (cpp_reader *pfile, cpp_string *number,
1405             struct normalize_state *nst)
1406 {
1407   const uchar *cur;
1408   const uchar *base;
1409   uchar *dest;
1410
1411   base = pfile->buffer->cur - 1;
1412   do
1413     {
1414       cur = pfile->buffer->cur;
1415
1416       /* N.B. ISIDNUM does not include $.  */
1417       while (ISIDNUM (*cur) || *cur == '.' || DIGIT_SEP (*cur)
1418              || VALID_SIGN (*cur, cur[-1]))
1419         {
1420           NORMALIZE_STATE_UPDATE_IDNUM (nst, *cur);
1421           cur++;
1422         }
1423       /* A number can't end with a digit separator.  */
1424       while (cur > pfile->buffer->cur && DIGIT_SEP (cur[-1]))
1425         --cur;
1426
1427       pfile->buffer->cur = cur;
1428     }
1429   while (forms_identifier_p (pfile, false, nst));
1430
1431   number->len = cur - base;
1432   dest = _cpp_unaligned_alloc (pfile, number->len + 1);
1433   memcpy (dest, base, number->len);
1434   dest[number->len] = '\0';
1435   number->text = dest;
1436 }
1437
1438 /* Create a token of type TYPE with a literal spelling.  */
1439 static void
1440 create_literal (cpp_reader *pfile, cpp_token *token, const uchar *base,
1441                 unsigned int len, enum cpp_ttype type)
1442 {
1443   uchar *dest = _cpp_unaligned_alloc (pfile, len + 1);
1444
1445   memcpy (dest, base, len);
1446   dest[len] = '\0';
1447   token->type = type;
1448   token->val.str.len = len;
1449   token->val.str.text = dest;
1450 }
1451
1452 /* Subroutine of lex_raw_string: Append LEN chars from BASE to the buffer
1453    sequence from *FIRST_BUFF_P to LAST_BUFF_P.  */
1454
1455 static void
1456 bufring_append (cpp_reader *pfile, const uchar *base, size_t len,
1457                 _cpp_buff **first_buff_p, _cpp_buff **last_buff_p)
1458 {
1459   _cpp_buff *first_buff = *first_buff_p;
1460   _cpp_buff *last_buff = *last_buff_p;
1461
1462   if (first_buff == NULL)
1463     first_buff = last_buff = _cpp_get_buff (pfile, len);
1464   else if (len > BUFF_ROOM (last_buff))
1465     {
1466       size_t room = BUFF_ROOM (last_buff);
1467       memcpy (BUFF_FRONT (last_buff), base, room);
1468       BUFF_FRONT (last_buff) += room;
1469       base += room;
1470       len -= room;
1471       last_buff = _cpp_append_extend_buff (pfile, last_buff, len);
1472     }
1473
1474   memcpy (BUFF_FRONT (last_buff), base, len);
1475   BUFF_FRONT (last_buff) += len;
1476
1477   *first_buff_p = first_buff;
1478   *last_buff_p = last_buff;
1479 }
1480
1481
1482 /* Returns true if a macro has been defined.
1483    This might not work if compile with -save-temps,
1484    or preprocess separately from compilation.  */
1485
1486 static bool
1487 is_macro(cpp_reader *pfile, const uchar *base)
1488 {
1489   const uchar *cur = base;
1490   if (! ISIDST (*cur))
1491     return false;
1492   unsigned int hash = HT_HASHSTEP (0, *cur);
1493   ++cur;
1494   while (ISIDNUM (*cur))
1495     {
1496       hash = HT_HASHSTEP (hash, *cur);
1497       ++cur;
1498     }
1499   hash = HT_HASHFINISH (hash, cur - base);
1500
1501   cpp_hashnode *result = CPP_HASHNODE (ht_lookup_with_hash (pfile->hash_table,
1502                                         base, cur - base, hash, HT_NO_INSERT));
1503
1504   return !result ? false : (result->type == NT_MACRO);
1505 }
1506
1507
1508 /* Lexes a raw string.  The stored string contains the spelling, including
1509    double quotes, delimiter string, '(' and ')', any leading
1510    'L', 'u', 'U' or 'u8' and 'R' modifier.  It returns the type of the
1511    literal, or CPP_OTHER if it was not properly terminated.
1512
1513    The spelling is NUL-terminated, but it is not guaranteed that this
1514    is the first NUL since embedded NULs are preserved.  */
1515
1516 static void
1517 lex_raw_string (cpp_reader *pfile, cpp_token *token, const uchar *base,
1518                 const uchar *cur)
1519 {
1520   uchar raw_prefix[17];
1521   uchar temp_buffer[18];
1522   const uchar *orig_base;
1523   unsigned int raw_prefix_len = 0, raw_suffix_len = 0;
1524   enum raw_str_phase { RAW_STR_PREFIX, RAW_STR, RAW_STR_SUFFIX };
1525   raw_str_phase phase = RAW_STR_PREFIX;
1526   enum cpp_ttype type;
1527   size_t total_len = 0;
1528   /* Index into temp_buffer during phases other than RAW_STR,
1529      during RAW_STR phase 17 to tell BUF_APPEND that nothing should
1530      be appended to temp_buffer.  */
1531   size_t temp_buffer_len = 0;
1532   _cpp_buff *first_buff = NULL, *last_buff = NULL;
1533   size_t raw_prefix_start;
1534   _cpp_line_note *note = &pfile->buffer->notes[pfile->buffer->cur_note];
1535
1536   type = (*base == 'L' ? CPP_WSTRING :
1537           *base == 'U' ? CPP_STRING32 :
1538           *base == 'u' ? (base[1] == '8' ? CPP_UTF8STRING : CPP_STRING16)
1539           : CPP_STRING);
1540
1541 #define BUF_APPEND(STR,LEN)                                     \
1542       do {                                                      \
1543         bufring_append (pfile, (const uchar *)(STR), (LEN),     \
1544                         &first_buff, &last_buff);               \
1545         total_len += (LEN);                                     \
1546         if (__builtin_expect (temp_buffer_len < 17, 0)          \
1547             && (const uchar *)(STR) != base                     \
1548             && (LEN) <= 2)                                      \
1549           {                                                     \
1550             memcpy (temp_buffer + temp_buffer_len,              \
1551                     (const uchar *)(STR), (LEN));               \
1552             temp_buffer_len += (LEN);                           \
1553           }                                                     \
1554       } while (0);
1555
1556   orig_base = base;
1557   ++cur;
1558   raw_prefix_start = cur - base;
1559   for (;;)
1560     {
1561       cppchar_t c;
1562
1563       /* If we previously performed any trigraph or line splicing
1564          transformations, undo them in between the opening and closing
1565          double quote.  */
1566       while (note->pos < cur)
1567         ++note;
1568       for (; note->pos == cur; ++note)
1569         {
1570           switch (note->type)
1571             {
1572             case '\\':
1573             case ' ':
1574               /* Restore backslash followed by newline.  */
1575               BUF_APPEND (base, cur - base);
1576               base = cur;
1577               BUF_APPEND ("\\", 1);
1578             after_backslash:
1579               if (note->type == ' ')
1580                 {
1581                   /* GNU backslash whitespace newline extension.  FIXME
1582                      could be any sequence of non-vertical space.  When we
1583                      can properly restore any such sequence, we should mark
1584                      this note as handled so _cpp_process_line_notes
1585                      doesn't warn.  */
1586                   BUF_APPEND (" ", 1);
1587                 }
1588
1589               BUF_APPEND ("\n", 1);
1590               break;
1591
1592             case 0:
1593               /* Already handled.  */
1594               break;
1595
1596             default:
1597               if (_cpp_trigraph_map[note->type])
1598                 {
1599                   /* Don't warn about this trigraph in
1600                      _cpp_process_line_notes, since trigraphs show up as
1601                      trigraphs in raw strings.  */
1602                   uchar type = note->type;
1603                   note->type = 0;
1604
1605                   if (!CPP_OPTION (pfile, trigraphs))
1606                     /* If we didn't convert the trigraph in the first
1607                        place, don't do anything now either.  */
1608                     break;
1609
1610                   BUF_APPEND (base, cur - base);
1611                   base = cur;
1612                   BUF_APPEND ("??", 2);
1613
1614                   /* ??/ followed by newline gets two line notes, one for
1615                      the trigraph and one for the backslash/newline.  */
1616                   if (type == '/' && note[1].pos == cur)
1617                     {
1618                       if (note[1].type != '\\'
1619                           && note[1].type != ' ')
1620                         abort ();
1621                       BUF_APPEND ("/", 1);
1622                       ++note;
1623                       goto after_backslash;
1624                     }
1625                   else
1626                     {
1627                       /* Skip the replacement character.  */
1628                       base = ++cur;
1629                       BUF_APPEND (&type, 1);
1630                       c = type;
1631                       goto check_c;
1632                     }
1633                 }
1634               else
1635                 abort ();
1636               break;
1637             }
1638         }
1639       c = *cur++;
1640       if (__builtin_expect (temp_buffer_len < 17, 0))
1641         temp_buffer[temp_buffer_len++] = c;
1642
1643      check_c:
1644       if (phase == RAW_STR_PREFIX)
1645         {
1646           while (raw_prefix_len < temp_buffer_len)
1647             {
1648               raw_prefix[raw_prefix_len] = temp_buffer[raw_prefix_len];
1649               switch (raw_prefix[raw_prefix_len])
1650                 {
1651                 case ' ': case '(': case ')': case '\\': case '\t':
1652                 case '\v': case '\f': case '\n': default:
1653                   break;
1654                 /* Basic source charset except the above chars.  */
1655                 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
1656                 case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
1657                 case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
1658                 case 's': case 't': case 'u': case 'v': case 'w': case 'x':
1659                 case 'y': case 'z':
1660                 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
1661                 case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
1662                 case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
1663                 case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
1664                 case 'Y': case 'Z':
1665                 case '0': case '1': case '2': case '3': case '4': case '5':
1666                 case '6': case '7': case '8': case '9':
1667                 case '_': case '{': case '}': case '#': case '[': case ']':
1668                 case '<': case '>': case '%': case ':': case ';': case '.':
1669                 case '?': case '*': case '+': case '-': case '/': case '^':
1670                 case '&': case '|': case '~': case '!': case '=': case ',':
1671                 case '"': case '\'':
1672                   if (raw_prefix_len < 16)
1673                     {
1674                       raw_prefix_len++;
1675                       continue;
1676                     }
1677                   break;
1678                 }
1679
1680               if (raw_prefix[raw_prefix_len] != '(')
1681                 {
1682                   int col = CPP_BUF_COLUMN (pfile->buffer, cur) + 1;
1683                   if (raw_prefix_len == 16)
1684                     cpp_error_with_line (pfile, CPP_DL_ERROR, token->src_loc,
1685                                          col, "raw string delimiter longer "
1686                                               "than 16 characters");
1687                   else if (raw_prefix[raw_prefix_len] == '\n')
1688                     cpp_error_with_line (pfile, CPP_DL_ERROR, token->src_loc,
1689                                          col, "invalid new-line in raw "
1690                                               "string delimiter");
1691                   else
1692                     cpp_error_with_line (pfile, CPP_DL_ERROR, token->src_loc,
1693                                          col, "invalid character '%c' in "
1694                                               "raw string delimiter",
1695                                          (int) raw_prefix[raw_prefix_len]);
1696                   pfile->buffer->cur = orig_base + raw_prefix_start - 1;
1697                   create_literal (pfile, token, orig_base,
1698                                   raw_prefix_start - 1, CPP_OTHER);
1699                   if (first_buff)
1700                     _cpp_release_buff (pfile, first_buff);
1701                   return;
1702                 }
1703               raw_prefix[raw_prefix_len] = '"';
1704               phase = RAW_STR;
1705               /* Nothing should be appended to temp_buffer during
1706                  RAW_STR phase.  */
1707               temp_buffer_len = 17;
1708               break;
1709             }
1710           continue;
1711         }
1712       else if (phase == RAW_STR_SUFFIX)
1713         {
1714           while (raw_suffix_len <= raw_prefix_len
1715                  && raw_suffix_len < temp_buffer_len
1716                  && temp_buffer[raw_suffix_len] == raw_prefix[raw_suffix_len])
1717             raw_suffix_len++;
1718           if (raw_suffix_len > raw_prefix_len)
1719             break;
1720           if (raw_suffix_len == temp_buffer_len)
1721             continue;
1722           phase = RAW_STR;
1723           /* Nothing should be appended to temp_buffer during
1724              RAW_STR phase.  */
1725           temp_buffer_len = 17;
1726         }
1727       if (c == ')')
1728         {
1729           phase = RAW_STR_SUFFIX;
1730           raw_suffix_len = 0;
1731           temp_buffer_len = 0;
1732         }
1733       else if (c == '\n')
1734         {
1735           if (pfile->state.in_directive
1736               || (pfile->state.parsing_args
1737                   && pfile->buffer->next_line >= pfile->buffer->rlimit))
1738             {
1739               cur--;
1740               type = CPP_OTHER;
1741               cpp_error_with_line (pfile, CPP_DL_ERROR, token->src_loc, 0,
1742                                    "unterminated raw string");
1743               break;
1744             }
1745
1746           BUF_APPEND (base, cur - base);
1747
1748           if (pfile->buffer->cur < pfile->buffer->rlimit)
1749             CPP_INCREMENT_LINE (pfile, 0);
1750           pfile->buffer->need_line = true;
1751
1752           pfile->buffer->cur = cur-1;
1753           _cpp_process_line_notes (pfile, false);
1754           if (!_cpp_get_fresh_line (pfile))
1755             {
1756               source_location src_loc = token->src_loc;
1757               token->type = CPP_EOF;
1758               /* Tell the compiler the line number of the EOF token.  */
1759               token->src_loc = pfile->line_table->highest_line;
1760               token->flags = BOL;
1761               if (first_buff != NULL)
1762                 _cpp_release_buff (pfile, first_buff);
1763               cpp_error_with_line (pfile, CPP_DL_ERROR, src_loc, 0,
1764                                    "unterminated raw string");
1765               return;
1766             }
1767
1768           cur = base = pfile->buffer->cur;
1769           note = &pfile->buffer->notes[pfile->buffer->cur_note];
1770         }
1771     }
1772
1773   if (CPP_OPTION (pfile, user_literals))
1774     {
1775       /* If a string format macro, say from inttypes.h, is placed touching
1776          a string literal it could be parsed as a C++11 user-defined string
1777          literal thus breaking the program.
1778          Try to identify macros with is_macro. A warning is issued. */
1779       if (is_macro (pfile, cur))
1780         {
1781           /* Raise a warning, but do not consume subsequent tokens.  */
1782           if (CPP_OPTION (pfile, warn_literal_suffix) && !pfile->state.skipping)
1783             cpp_warning_with_line (pfile, CPP_W_LITERAL_SUFFIX,
1784                                    token->src_loc, 0,
1785                                    "invalid suffix on literal; C++11 requires "
1786                                    "a space between literal and string macro");
1787         }
1788       /* Grab user defined literal suffix.  */
1789       else if (ISIDST (*cur))
1790         {
1791           type = cpp_userdef_string_add_type (type);
1792           ++cur;
1793
1794           while (ISIDNUM (*cur))
1795             ++cur;
1796         }
1797     }
1798
1799   pfile->buffer->cur = cur;
1800   if (first_buff == NULL)
1801     create_literal (pfile, token, base, cur - base, type);
1802   else
1803     {
1804       uchar *dest = _cpp_unaligned_alloc (pfile, total_len + (cur - base) + 1);
1805
1806       token->type = type;
1807       token->val.str.len = total_len + (cur - base);
1808       token->val.str.text = dest;
1809       last_buff = first_buff;
1810       while (last_buff != NULL)
1811         {
1812           memcpy (dest, last_buff->base,
1813                   BUFF_FRONT (last_buff) - last_buff->base);
1814           dest += BUFF_FRONT (last_buff) - last_buff->base;
1815           last_buff = last_buff->next;
1816         }
1817       _cpp_release_buff (pfile, first_buff);
1818       memcpy (dest, base, cur - base);
1819       dest[cur - base] = '\0';
1820     }
1821 }
1822
1823 /* Lexes a string, character constant, or angle-bracketed header file
1824    name.  The stored string contains the spelling, including opening
1825    quote and any leading 'L', 'u', 'U' or 'u8' and optional
1826    'R' modifier.  It returns the type of the literal, or CPP_OTHER
1827    if it was not properly terminated, or CPP_LESS for an unterminated
1828    header name which must be relexed as normal tokens.
1829
1830    The spelling is NUL-terminated, but it is not guaranteed that this
1831    is the first NUL since embedded NULs are preserved.  */
1832 static void
1833 lex_string (cpp_reader *pfile, cpp_token *token, const uchar *base)
1834 {
1835   bool saw_NUL = false;
1836   const uchar *cur;
1837   cppchar_t terminator;
1838   enum cpp_ttype type;
1839
1840   cur = base;
1841   terminator = *cur++;
1842   if (terminator == 'L' || terminator == 'U')
1843     terminator = *cur++;
1844   else if (terminator == 'u')
1845     {
1846       terminator = *cur++;
1847       if (terminator == '8')
1848         terminator = *cur++;
1849     }
1850   if (terminator == 'R')
1851     {
1852       lex_raw_string (pfile, token, base, cur);
1853       return;
1854     }
1855   if (terminator == '"')
1856     type = (*base == 'L' ? CPP_WSTRING :
1857             *base == 'U' ? CPP_STRING32 :
1858             *base == 'u' ? (base[1] == '8' ? CPP_UTF8STRING : CPP_STRING16)
1859                          : CPP_STRING);
1860   else if (terminator == '\'')
1861     type = (*base == 'L' ? CPP_WCHAR :
1862             *base == 'U' ? CPP_CHAR32 :
1863             *base == 'u' ? (base[1] == '8' ? CPP_UTF8CHAR : CPP_CHAR16)
1864                          : CPP_CHAR);
1865   else
1866     terminator = '>', type = CPP_HEADER_NAME;
1867
1868   for (;;)
1869     {
1870       cppchar_t c = *cur++;
1871
1872       /* In #include-style directives, terminators are not escapable.  */
1873       if (c == '\\' && !pfile->state.angled_headers && *cur != '\n')
1874         cur++;
1875       else if (c == terminator)
1876         break;
1877       else if (c == '\n')
1878         {
1879           cur--;
1880           /* Unmatched quotes always yield undefined behavior, but
1881              greedy lexing means that what appears to be an unterminated
1882              header name may actually be a legitimate sequence of tokens.  */
1883           if (terminator == '>')
1884             {
1885               token->type = CPP_LESS;
1886               return;
1887             }
1888           type = CPP_OTHER;
1889           break;
1890         }
1891       else if (c == '\0')
1892         saw_NUL = true;
1893     }
1894
1895   if (saw_NUL && !pfile->state.skipping)
1896     cpp_error (pfile, CPP_DL_WARNING,
1897                "null character(s) preserved in literal");
1898
1899   if (type == CPP_OTHER && CPP_OPTION (pfile, lang) != CLK_ASM)
1900     cpp_error (pfile, CPP_DL_PEDWARN, "missing terminating %c character",
1901                (int) terminator);
1902
1903   if (CPP_OPTION (pfile, user_literals))
1904     {
1905       /* If a string format macro, say from inttypes.h, is placed touching
1906          a string literal it could be parsed as a C++11 user-defined string
1907          literal thus breaking the program.
1908          Try to identify macros with is_macro. A warning is issued. */
1909       if (is_macro (pfile, cur))
1910         {
1911           /* Raise a warning, but do not consume subsequent tokens.  */
1912           if (CPP_OPTION (pfile, warn_literal_suffix) && !pfile->state.skipping)
1913             cpp_warning_with_line (pfile, CPP_W_LITERAL_SUFFIX,
1914                                    token->src_loc, 0,
1915                                    "invalid suffix on literal; C++11 requires "
1916                                    "a space between literal and string macro");
1917         }
1918       /* Grab user defined literal suffix.  */
1919       else if (ISIDST (*cur))
1920         {
1921           type = cpp_userdef_char_add_type (type);
1922           type = cpp_userdef_string_add_type (type);
1923           ++cur;
1924
1925           while (ISIDNUM (*cur))
1926             ++cur;
1927         }
1928     }
1929   else if (CPP_OPTION (pfile, cpp_warn_cxx11_compat)
1930            && is_macro (pfile, cur)
1931            && !pfile->state.skipping)
1932     cpp_warning_with_line (pfile, CPP_W_CXX11_COMPAT,
1933                            token->src_loc, 0, "C++11 requires a space "
1934                            "between string literal and macro");
1935
1936   pfile->buffer->cur = cur;
1937   create_literal (pfile, token, base, cur - base, type);
1938 }
1939
1940 /* Return the comment table. The client may not make any assumption
1941    about the ordering of the table.  */
1942 cpp_comment_table *
1943 cpp_get_comments (cpp_reader *pfile)
1944 {
1945   return &pfile->comments;
1946 }
1947
1948 /* Append a comment to the end of the comment table. */
1949 static void 
1950 store_comment (cpp_reader *pfile, cpp_token *token) 
1951 {
1952   int len;
1953
1954   if (pfile->comments.allocated == 0)
1955     {
1956       pfile->comments.allocated = 256; 
1957       pfile->comments.entries = (cpp_comment *) xmalloc
1958         (pfile->comments.allocated * sizeof (cpp_comment));
1959     }
1960
1961   if (pfile->comments.count == pfile->comments.allocated)
1962     {
1963       pfile->comments.allocated *= 2;
1964       pfile->comments.entries = (cpp_comment *) xrealloc
1965         (pfile->comments.entries,
1966          pfile->comments.allocated * sizeof (cpp_comment));
1967     }
1968
1969   len = token->val.str.len;
1970
1971   /* Copy comment. Note, token may not be NULL terminated. */
1972   pfile->comments.entries[pfile->comments.count].comment = 
1973     (char *) xmalloc (sizeof (char) * (len + 1));
1974   memcpy (pfile->comments.entries[pfile->comments.count].comment,
1975           token->val.str.text, len);
1976   pfile->comments.entries[pfile->comments.count].comment[len] = '\0';
1977
1978   /* Set source location. */
1979   pfile->comments.entries[pfile->comments.count].sloc = token->src_loc;
1980
1981   /* Increment the count of entries in the comment table. */
1982   pfile->comments.count++;
1983 }
1984
1985 /* The stored comment includes the comment start and any terminator.  */
1986 static void
1987 save_comment (cpp_reader *pfile, cpp_token *token, const unsigned char *from,
1988               cppchar_t type)
1989 {
1990   unsigned char *buffer;
1991   unsigned int len, clen, i;
1992
1993   len = pfile->buffer->cur - from + 1; /* + 1 for the initial '/'.  */
1994
1995   /* C++ comments probably (not definitely) have moved past a new
1996      line, which we don't want to save in the comment.  */
1997   if (is_vspace (pfile->buffer->cur[-1]))
1998     len--;
1999
2000   /* If we are currently in a directive or in argument parsing, then
2001      we need to store all C++ comments as C comments internally, and
2002      so we need to allocate a little extra space in that case.
2003
2004      Note that the only time we encounter a directive here is
2005      when we are saving comments in a "#define".  */
2006   clen = ((pfile->state.in_directive || pfile->state.parsing_args)
2007           && type == '/') ? len + 2 : len;
2008
2009   buffer = _cpp_unaligned_alloc (pfile, clen);
2010
2011   token->type = CPP_COMMENT;
2012   token->val.str.len = clen;
2013   token->val.str.text = buffer;
2014
2015   buffer[0] = '/';
2016   memcpy (buffer + 1, from, len - 1);
2017
2018   /* Finish conversion to a C comment, if necessary.  */
2019   if ((pfile->state.in_directive || pfile->state.parsing_args) && type == '/')
2020     {
2021       buffer[1] = '*';
2022       buffer[clen - 2] = '*';
2023       buffer[clen - 1] = '/';
2024       /* As there can be in a C++ comments illegal sequences for C comments
2025          we need to filter them out.  */
2026       for (i = 2; i < (clen - 2); i++)
2027         if (buffer[i] == '/' && (buffer[i - 1] == '*' || buffer[i + 1] == '*'))
2028           buffer[i] = '|';
2029     }
2030
2031   /* Finally store this comment for use by clients of libcpp. */
2032   store_comment (pfile, token);
2033 }
2034
2035 /* Allocate COUNT tokens for RUN.  */
2036 void
2037 _cpp_init_tokenrun (tokenrun *run, unsigned int count)
2038 {
2039   run->base = XNEWVEC (cpp_token, count);
2040   run->limit = run->base + count;
2041   run->next = NULL;
2042 }
2043
2044 /* Returns the next tokenrun, or creates one if there is none.  */
2045 static tokenrun *
2046 next_tokenrun (tokenrun *run)
2047 {
2048   if (run->next == NULL)
2049     {
2050       run->next = XNEW (tokenrun);
2051       run->next->prev = run;
2052       _cpp_init_tokenrun (run->next, 250);
2053     }
2054
2055   return run->next;
2056 }
2057
2058 /* Return the number of not yet processed token in a given
2059    context.  */
2060 int
2061 _cpp_remaining_tokens_num_in_context (cpp_context *context)
2062 {
2063   if (context->tokens_kind == TOKENS_KIND_DIRECT)
2064     return (LAST (context).token - FIRST (context).token);
2065   else if (context->tokens_kind == TOKENS_KIND_INDIRECT
2066            || context->tokens_kind == TOKENS_KIND_EXTENDED)
2067     return (LAST (context).ptoken - FIRST (context).ptoken);
2068   else
2069       abort ();
2070 }
2071
2072 /* Returns the token present at index INDEX in a given context.  If
2073    INDEX is zero, the next token to be processed is returned.  */
2074 static const cpp_token*
2075 _cpp_token_from_context_at (cpp_context *context, int index)
2076 {
2077   if (context->tokens_kind == TOKENS_KIND_DIRECT)
2078     return &(FIRST (context).token[index]);
2079   else if (context->tokens_kind == TOKENS_KIND_INDIRECT
2080            || context->tokens_kind == TOKENS_KIND_EXTENDED)
2081     return FIRST (context).ptoken[index];
2082  else
2083    abort ();
2084 }
2085
2086 /* Look ahead in the input stream.  */
2087 const cpp_token *
2088 cpp_peek_token (cpp_reader *pfile, int index)
2089 {
2090   cpp_context *context = pfile->context;
2091   const cpp_token *peektok;
2092   int count;
2093
2094   /* First, scan through any pending cpp_context objects.  */
2095   while (context->prev)
2096     {
2097       ptrdiff_t sz = _cpp_remaining_tokens_num_in_context (context);
2098
2099       if (index < (int) sz)
2100         return _cpp_token_from_context_at (context, index);
2101       index -= (int) sz;
2102       context = context->prev;
2103     }
2104
2105   /* We will have to read some new tokens after all (and do so
2106      without invalidating preceding tokens).  */
2107   count = index;
2108   pfile->keep_tokens++;
2109
2110   /* For peeked tokens temporarily disable line_change reporting,
2111      until the tokens are parsed for real.  */
2112   void (*line_change) (cpp_reader *, const cpp_token *, int)
2113     = pfile->cb.line_change;
2114   pfile->cb.line_change = NULL;
2115
2116   do
2117     {
2118       peektok = _cpp_lex_token (pfile);
2119       if (peektok->type == CPP_EOF)
2120         {
2121           index--;
2122           break;
2123         }
2124     }
2125   while (index--);
2126
2127   _cpp_backup_tokens_direct (pfile, count - index);
2128   pfile->keep_tokens--;
2129   pfile->cb.line_change = line_change;
2130
2131   return peektok;
2132 }
2133
2134 /* Allocate a single token that is invalidated at the same time as the
2135    rest of the tokens on the line.  Has its line and col set to the
2136    same as the last lexed token, so that diagnostics appear in the
2137    right place.  */
2138 cpp_token *
2139 _cpp_temp_token (cpp_reader *pfile)
2140 {
2141   cpp_token *old, *result;
2142   ptrdiff_t sz = pfile->cur_run->limit - pfile->cur_token;
2143   ptrdiff_t la = (ptrdiff_t) pfile->lookaheads;
2144
2145   old = pfile->cur_token - 1;
2146   /* Any pre-existing lookaheads must not be clobbered.  */
2147   if (la)
2148     {
2149       if (sz <= la)
2150         {
2151           tokenrun *next = next_tokenrun (pfile->cur_run);
2152
2153           if (sz < la)
2154             memmove (next->base + 1, next->base,
2155                      (la - sz) * sizeof (cpp_token));
2156
2157           next->base[0] = pfile->cur_run->limit[-1];
2158         }
2159
2160       if (sz > 1)
2161         memmove (pfile->cur_token + 1, pfile->cur_token,
2162                  MIN (la, sz - 1) * sizeof (cpp_token));
2163     }
2164
2165   if (!sz && pfile->cur_token == pfile->cur_run->limit)
2166     {
2167       pfile->cur_run = next_tokenrun (pfile->cur_run);
2168       pfile->cur_token = pfile->cur_run->base;
2169     }
2170
2171   result = pfile->cur_token++;
2172   result->src_loc = old->src_loc;
2173   return result;
2174 }
2175
2176 /* Lex a token into RESULT (external interface).  Takes care of issues
2177    like directive handling, token lookahead, multiple include
2178    optimization and skipping.  */
2179 const cpp_token *
2180 _cpp_lex_token (cpp_reader *pfile)
2181 {
2182   cpp_token *result;
2183
2184   for (;;)
2185     {
2186       if (pfile->cur_token == pfile->cur_run->limit)
2187         {
2188           pfile->cur_run = next_tokenrun (pfile->cur_run);
2189           pfile->cur_token = pfile->cur_run->base;
2190         }
2191       /* We assume that the current token is somewhere in the current
2192          run.  */
2193       if (pfile->cur_token < pfile->cur_run->base
2194           || pfile->cur_token >= pfile->cur_run->limit)
2195         abort ();
2196
2197       if (pfile->lookaheads)
2198         {
2199           pfile->lookaheads--;
2200           result = pfile->cur_token++;
2201         }
2202       else
2203         result = _cpp_lex_direct (pfile);
2204
2205       if (result->flags & BOL)
2206         {
2207           /* Is this a directive.  If _cpp_handle_directive returns
2208              false, it is an assembler #.  */
2209           if (result->type == CPP_HASH
2210               /* 6.10.3 p 11: Directives in a list of macro arguments
2211                  gives undefined behavior.  This implementation
2212                  handles the directive as normal.  */
2213               && pfile->state.parsing_args != 1)
2214             {
2215               if (_cpp_handle_directive (pfile, result->flags & PREV_WHITE))
2216                 {
2217                   if (pfile->directive_result.type == CPP_PADDING)
2218                     continue;
2219                   result = &pfile->directive_result;
2220                 }
2221             }
2222           else if (pfile->state.in_deferred_pragma)
2223             result = &pfile->directive_result;
2224
2225           if (pfile->cb.line_change && !pfile->state.skipping)
2226             pfile->cb.line_change (pfile, result, pfile->state.parsing_args);
2227         }
2228
2229       /* We don't skip tokens in directives.  */
2230       if (pfile->state.in_directive || pfile->state.in_deferred_pragma)
2231         break;
2232
2233       /* Outside a directive, invalidate controlling macros.  At file
2234          EOF, _cpp_lex_direct takes care of popping the buffer, so we never
2235          get here and MI optimization works.  */
2236       pfile->mi_valid = false;
2237
2238       if (!pfile->state.skipping || result->type == CPP_EOF)
2239         break;
2240     }
2241
2242   return result;
2243 }
2244
2245 /* Returns true if a fresh line has been loaded.  */
2246 bool
2247 _cpp_get_fresh_line (cpp_reader *pfile)
2248 {
2249   int return_at_eof;
2250
2251   /* We can't get a new line until we leave the current directive.  */
2252   if (pfile->state.in_directive)
2253     return false;
2254
2255   for (;;)
2256     {
2257       cpp_buffer *buffer = pfile->buffer;
2258
2259       if (!buffer->need_line)
2260         return true;
2261
2262       if (buffer->next_line < buffer->rlimit)
2263         {
2264           _cpp_clean_line (pfile);
2265           return true;
2266         }
2267
2268       /* First, get out of parsing arguments state.  */
2269       if (pfile->state.parsing_args)
2270         return false;
2271
2272       /* End of buffer.  Non-empty files should end in a newline.  */
2273       if (buffer->buf != buffer->rlimit
2274           && buffer->next_line > buffer->rlimit
2275           && !buffer->from_stage3)
2276         {
2277           /* Clip to buffer size.  */
2278           buffer->next_line = buffer->rlimit;
2279         }
2280
2281       return_at_eof = buffer->return_at_eof;
2282       _cpp_pop_buffer (pfile);
2283       if (pfile->buffer == NULL || return_at_eof)
2284         return false;
2285     }
2286 }
2287
2288 #define IF_NEXT_IS(CHAR, THEN_TYPE, ELSE_TYPE)          \
2289   do                                                    \
2290     {                                                   \
2291       result->type = ELSE_TYPE;                         \
2292       if (*buffer->cur == CHAR)                         \
2293         buffer->cur++, result->type = THEN_TYPE;        \
2294     }                                                   \
2295   while (0)
2296
2297 /* Lex a token into pfile->cur_token, which is also incremented, to
2298    get diagnostics pointing to the correct location.
2299
2300    Does not handle issues such as token lookahead, multiple-include
2301    optimization, directives, skipping etc.  This function is only
2302    suitable for use by _cpp_lex_token, and in special cases like
2303    lex_expansion_token which doesn't care for any of these issues.
2304
2305    When meeting a newline, returns CPP_EOF if parsing a directive,
2306    otherwise returns to the start of the token buffer if permissible.
2307    Returns the location of the lexed token.  */
2308 cpp_token *
2309 _cpp_lex_direct (cpp_reader *pfile)
2310 {
2311   cppchar_t c;
2312   cpp_buffer *buffer;
2313   const unsigned char *comment_start;
2314   cpp_token *result = pfile->cur_token++;
2315
2316  fresh_line:
2317   result->flags = 0;
2318   buffer = pfile->buffer;
2319   if (buffer->need_line)
2320     {
2321       if (pfile->state.in_deferred_pragma)
2322         {
2323           result->type = CPP_PRAGMA_EOL;
2324           pfile->state.in_deferred_pragma = false;
2325           if (!pfile->state.pragma_allow_expansion)
2326             pfile->state.prevent_expansion--;
2327           return result;
2328         }
2329       if (!_cpp_get_fresh_line (pfile))
2330         {
2331           result->type = CPP_EOF;
2332           if (!pfile->state.in_directive)
2333             {
2334               /* Tell the compiler the line number of the EOF token.  */
2335               result->src_loc = pfile->line_table->highest_line;
2336               result->flags = BOL;
2337             }
2338           return result;
2339         }
2340       if (!pfile->keep_tokens)
2341         {
2342           pfile->cur_run = &pfile->base_run;
2343           result = pfile->base_run.base;
2344           pfile->cur_token = result + 1;
2345         }
2346       result->flags = BOL;
2347       if (pfile->state.parsing_args == 2)
2348         result->flags |= PREV_WHITE;
2349     }
2350   buffer = pfile->buffer;
2351  update_tokens_line:
2352   result->src_loc = pfile->line_table->highest_line;
2353
2354  skipped_white:
2355   if (buffer->cur >= buffer->notes[buffer->cur_note].pos
2356       && !pfile->overlaid_buffer)
2357     {
2358       _cpp_process_line_notes (pfile, false);
2359       result->src_loc = pfile->line_table->highest_line;
2360     }
2361   c = *buffer->cur++;
2362
2363   if (pfile->forced_token_location_p)
2364     result->src_loc = *pfile->forced_token_location_p;
2365   else
2366     result->src_loc = linemap_position_for_column (pfile->line_table,
2367                                           CPP_BUF_COLUMN (buffer, buffer->cur));
2368
2369   switch (c)
2370     {
2371     case ' ': case '\t': case '\f': case '\v': case '\0':
2372       result->flags |= PREV_WHITE;
2373       skip_whitespace (pfile, c);
2374       goto skipped_white;
2375
2376     case '\n':
2377       if (buffer->cur < buffer->rlimit)
2378         CPP_INCREMENT_LINE (pfile, 0);
2379       buffer->need_line = true;
2380       goto fresh_line;
2381
2382     case '0': case '1': case '2': case '3': case '4':
2383     case '5': case '6': case '7': case '8': case '9':
2384       {
2385         struct normalize_state nst = INITIAL_NORMALIZE_STATE;
2386         result->type = CPP_NUMBER;
2387         lex_number (pfile, &result->val.str, &nst);
2388         warn_about_normalization (pfile, result, &nst);
2389         break;
2390       }
2391
2392     case 'L':
2393     case 'u':
2394     case 'U':
2395     case 'R':
2396       /* 'L', 'u', 'U', 'u8' or 'R' may introduce wide characters,
2397          wide strings or raw strings.  */
2398       if (c == 'L' || CPP_OPTION (pfile, rliterals)
2399           || (c != 'R' && CPP_OPTION (pfile, uliterals)))
2400         {
2401           if ((*buffer->cur == '\'' && c != 'R')
2402               || *buffer->cur == '"'
2403               || (*buffer->cur == 'R'
2404                   && c != 'R'
2405                   && buffer->cur[1] == '"'
2406                   && CPP_OPTION (pfile, rliterals))
2407               || (*buffer->cur == '8'
2408                   && c == 'u'
2409                   && ((buffer->cur[1] == '"' || (buffer->cur[1] == '\''
2410                                 && CPP_OPTION (pfile, utf8_char_literals)))
2411                       || (buffer->cur[1] == 'R' && buffer->cur[2] == '"'
2412                           && CPP_OPTION (pfile, rliterals)))))
2413             {
2414               lex_string (pfile, result, buffer->cur - 1);
2415               break;
2416             }
2417         }
2418       /* Fall through.  */
2419
2420     case '_':
2421     case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
2422     case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
2423     case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
2424     case 's': case 't':           case 'v': case 'w': case 'x':
2425     case 'y': case 'z':
2426     case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
2427     case 'G': case 'H': case 'I': case 'J': case 'K':
2428     case 'M': case 'N': case 'O': case 'P': case 'Q':
2429     case 'S': case 'T':           case 'V': case 'W': case 'X':
2430     case 'Y': case 'Z':
2431       result->type = CPP_NAME;
2432       {
2433         struct normalize_state nst = INITIAL_NORMALIZE_STATE;
2434         result->val.node.node = lex_identifier (pfile, buffer->cur - 1, false,
2435                                                 &nst,
2436                                                 &result->val.node.spelling);
2437         warn_about_normalization (pfile, result, &nst);
2438       }
2439
2440       /* Convert named operators to their proper types.  */
2441       if (result->val.node.node->flags & NODE_OPERATOR)
2442         {
2443           result->flags |= NAMED_OP;
2444           result->type = (enum cpp_ttype) result->val.node.node->directive_index;
2445         }
2446       break;
2447
2448     case '\'':
2449     case '"':
2450       lex_string (pfile, result, buffer->cur - 1);
2451       break;
2452
2453     case '/':
2454       /* A potential block or line comment.  */
2455       comment_start = buffer->cur;
2456       c = *buffer->cur;
2457       
2458       if (c == '*')
2459         {
2460           if (_cpp_skip_block_comment (pfile))
2461             cpp_error (pfile, CPP_DL_ERROR, "unterminated comment");
2462         }
2463       else if (c == '/' && ! CPP_OPTION (pfile, traditional))
2464         {
2465           /* Don't warn for system headers.  */
2466           if (cpp_in_system_header (pfile))
2467             ;
2468           /* Warn about comments if pedantically GNUC89, and not
2469              in system headers.  */
2470           else if (CPP_OPTION (pfile, lang) == CLK_GNUC89
2471                    && CPP_PEDANTIC (pfile)
2472                    && ! buffer->warned_cplusplus_comments)
2473             {
2474               cpp_error (pfile, CPP_DL_PEDWARN,
2475                          "C++ style comments are not allowed in ISO C90");
2476               cpp_error (pfile, CPP_DL_PEDWARN,
2477                          "(this will be reported only once per input file)");
2478               buffer->warned_cplusplus_comments = 1;
2479             }
2480           /* Or if specifically desired via -Wc90-c99-compat.  */
2481           else if (CPP_OPTION (pfile, cpp_warn_c90_c99_compat) > 0
2482                    && ! CPP_OPTION (pfile, cplusplus)
2483                    && ! buffer->warned_cplusplus_comments)
2484             {
2485               cpp_error (pfile, CPP_DL_WARNING,
2486                          "C++ style comments are incompatible with C90");
2487               cpp_error (pfile, CPP_DL_WARNING,
2488                          "(this will be reported only once per input file)");
2489               buffer->warned_cplusplus_comments = 1;
2490             }
2491           /* In C89/C94, C++ style comments are forbidden.  */
2492           else if ((CPP_OPTION (pfile, lang) == CLK_STDC89
2493                     || CPP_OPTION (pfile, lang) == CLK_STDC94))
2494             {
2495               /* But don't be confused about valid code such as
2496                  - // immediately followed by *,
2497                  - // in a preprocessing directive,
2498                  - // in an #if 0 block.  */
2499               if (buffer->cur[1] == '*'
2500                   || pfile->state.in_directive
2501                   || pfile->state.skipping)
2502                 {
2503                   result->type = CPP_DIV;
2504                   break;
2505                 }
2506               else if (! buffer->warned_cplusplus_comments)
2507                 {
2508                   cpp_error (pfile, CPP_DL_ERROR,
2509                              "C++ style comments are not allowed in ISO C90");
2510                   cpp_error (pfile, CPP_DL_ERROR,
2511                              "(this will be reported only once per input "
2512                              "file)");
2513                   buffer->warned_cplusplus_comments = 1;
2514                 }
2515             }
2516           if (skip_line_comment (pfile) && CPP_OPTION (pfile, warn_comments))
2517             cpp_warning (pfile, CPP_W_COMMENTS, "multi-line comment");
2518         }
2519       else if (c == '=')
2520         {
2521           buffer->cur++;
2522           result->type = CPP_DIV_EQ;
2523           break;
2524         }
2525       else
2526         {
2527           result->type = CPP_DIV;
2528           break;
2529         }
2530
2531       if (!pfile->state.save_comments)
2532         {
2533           result->flags |= PREV_WHITE;
2534           goto update_tokens_line;
2535         }
2536
2537       /* Save the comment as a token in its own right.  */
2538       save_comment (pfile, result, comment_start, c);
2539       break;
2540
2541     case '<':
2542       if (pfile->state.angled_headers)
2543         {
2544           lex_string (pfile, result, buffer->cur - 1);
2545           if (result->type != CPP_LESS)
2546             break;
2547         }
2548
2549       result->type = CPP_LESS;
2550       if (*buffer->cur == '=')
2551         buffer->cur++, result->type = CPP_LESS_EQ;
2552       else if (*buffer->cur == '<')
2553         {
2554           buffer->cur++;
2555           IF_NEXT_IS ('=', CPP_LSHIFT_EQ, CPP_LSHIFT);
2556         }
2557       else if (CPP_OPTION (pfile, digraphs))
2558         {
2559           if (*buffer->cur == ':')
2560             {
2561               /* C++11 [2.5/3 lex.pptoken], "Otherwise, if the next
2562                  three characters are <:: and the subsequent character
2563                  is neither : nor >, the < is treated as a preprocessor
2564                  token by itself".  */
2565               if (CPP_OPTION (pfile, cplusplus)
2566                   && CPP_OPTION (pfile, lang) != CLK_CXX98
2567                   && CPP_OPTION (pfile, lang) != CLK_GNUCXX
2568                   && buffer->cur[1] == ':'
2569                   && buffer->cur[2] != ':' && buffer->cur[2] != '>')
2570                 break;
2571
2572               buffer->cur++;
2573               result->flags |= DIGRAPH;
2574               result->type = CPP_OPEN_SQUARE;
2575             }
2576           else if (*buffer->cur == '%')
2577             {
2578               buffer->cur++;
2579               result->flags |= DIGRAPH;
2580               result->type = CPP_OPEN_BRACE;
2581             }
2582         }
2583       break;
2584
2585     case '>':
2586       result->type = CPP_GREATER;
2587       if (*buffer->cur == '=')
2588         buffer->cur++, result->type = CPP_GREATER_EQ;
2589       else if (*buffer->cur == '>')
2590         {
2591           buffer->cur++;
2592           IF_NEXT_IS ('=', CPP_RSHIFT_EQ, CPP_RSHIFT);
2593         }
2594       break;
2595
2596     case '%':
2597       result->type = CPP_MOD;
2598       if (*buffer->cur == '=')
2599         buffer->cur++, result->type = CPP_MOD_EQ;
2600       else if (CPP_OPTION (pfile, digraphs))
2601         {
2602           if (*buffer->cur == ':')
2603             {
2604               buffer->cur++;
2605               result->flags |= DIGRAPH;
2606               result->type = CPP_HASH;
2607               if (*buffer->cur == '%' && buffer->cur[1] == ':')
2608                 buffer->cur += 2, result->type = CPP_PASTE, result->val.token_no = 0;
2609             }
2610           else if (*buffer->cur == '>')
2611             {
2612               buffer->cur++;
2613               result->flags |= DIGRAPH;
2614               result->type = CPP_CLOSE_BRACE;
2615             }
2616         }
2617       break;
2618
2619     case '.':
2620       result->type = CPP_DOT;
2621       if (ISDIGIT (*buffer->cur))
2622         {
2623           struct normalize_state nst = INITIAL_NORMALIZE_STATE;
2624           result->type = CPP_NUMBER;
2625           lex_number (pfile, &result->val.str, &nst);
2626           warn_about_normalization (pfile, result, &nst);
2627         }
2628       else if (*buffer->cur == '.' && buffer->cur[1] == '.')
2629         buffer->cur += 2, result->type = CPP_ELLIPSIS;
2630       else if (*buffer->cur == '*' && CPP_OPTION (pfile, cplusplus))
2631         buffer->cur++, result->type = CPP_DOT_STAR;
2632       break;
2633
2634     case '+':
2635       result->type = CPP_PLUS;
2636       if (*buffer->cur == '+')
2637         buffer->cur++, result->type = CPP_PLUS_PLUS;
2638       else if (*buffer->cur == '=')
2639         buffer->cur++, result->type = CPP_PLUS_EQ;
2640       break;
2641
2642     case '-':
2643       result->type = CPP_MINUS;
2644       if (*buffer->cur == '>')
2645         {
2646           buffer->cur++;
2647           result->type = CPP_DEREF;
2648           if (*buffer->cur == '*' && CPP_OPTION (pfile, cplusplus))
2649             buffer->cur++, result->type = CPP_DEREF_STAR;
2650         }
2651       else if (*buffer->cur == '-')
2652         buffer->cur++, result->type = CPP_MINUS_MINUS;
2653       else if (*buffer->cur == '=')
2654         buffer->cur++, result->type = CPP_MINUS_EQ;
2655       break;
2656
2657     case '&':
2658       result->type = CPP_AND;
2659       if (*buffer->cur == '&')
2660         buffer->cur++, result->type = CPP_AND_AND;
2661       else if (*buffer->cur == '=')
2662         buffer->cur++, result->type = CPP_AND_EQ;
2663       break;
2664
2665     case '|':
2666       result->type = CPP_OR;
2667       if (*buffer->cur == '|')
2668         buffer->cur++, result->type = CPP_OR_OR;
2669       else if (*buffer->cur == '=')
2670         buffer->cur++, result->type = CPP_OR_EQ;
2671       break;
2672
2673     case ':':
2674       result->type = CPP_COLON;
2675       if (*buffer->cur == ':' && CPP_OPTION (pfile, cplusplus))
2676         buffer->cur++, result->type = CPP_SCOPE;
2677       else if (*buffer->cur == '>' && CPP_OPTION (pfile, digraphs))
2678         {
2679           buffer->cur++;
2680           result->flags |= DIGRAPH;
2681           result->type = CPP_CLOSE_SQUARE;
2682         }
2683       break;
2684
2685     case '*': IF_NEXT_IS ('=', CPP_MULT_EQ, CPP_MULT); break;
2686     case '=': IF_NEXT_IS ('=', CPP_EQ_EQ, CPP_EQ); break;
2687     case '!': IF_NEXT_IS ('=', CPP_NOT_EQ, CPP_NOT); break;
2688     case '^': IF_NEXT_IS ('=', CPP_XOR_EQ, CPP_XOR); break;
2689     case '#': IF_NEXT_IS ('#', CPP_PASTE, CPP_HASH); result->val.token_no = 0; break;
2690
2691     case '?': result->type = CPP_QUERY; break;
2692     case '~': result->type = CPP_COMPL; break;
2693     case ',': result->type = CPP_COMMA; break;
2694     case '(': result->type = CPP_OPEN_PAREN; break;
2695     case ')': result->type = CPP_CLOSE_PAREN; break;
2696     case '[': result->type = CPP_OPEN_SQUARE; break;
2697     case ']': result->type = CPP_CLOSE_SQUARE; break;
2698     case '{': result->type = CPP_OPEN_BRACE; break;
2699     case '}': result->type = CPP_CLOSE_BRACE; break;
2700     case ';': result->type = CPP_SEMICOLON; break;
2701
2702       /* @ is a punctuator in Objective-C.  */
2703     case '@': result->type = CPP_ATSIGN; break;
2704
2705     case '$':
2706     case '\\':
2707       {
2708         const uchar *base = --buffer->cur;
2709         struct normalize_state nst = INITIAL_NORMALIZE_STATE;
2710
2711         if (forms_identifier_p (pfile, true, &nst))
2712           {
2713             result->type = CPP_NAME;
2714             result->val.node.node = lex_identifier (pfile, base, true, &nst,
2715                                                     &result->val.node.spelling);
2716             warn_about_normalization (pfile, result, &nst);
2717             break;
2718           }
2719         buffer->cur++;
2720       }
2721       /* FALLTHRU */
2722
2723     default:
2724       create_literal (pfile, result, buffer->cur - 1, 1, CPP_OTHER);
2725       break;
2726     }
2727
2728   source_range tok_range;
2729   tok_range.m_start = result->src_loc;
2730   if (result->src_loc >= RESERVED_LOCATION_COUNT)
2731     tok_range.m_finish
2732       = linemap_position_for_column (pfile->line_table,
2733                                      CPP_BUF_COLUMN (buffer, buffer->cur));
2734   else
2735     tok_range.m_finish = tok_range.m_start;
2736
2737   result->src_loc = COMBINE_LOCATION_DATA (pfile->line_table,
2738                                            result->src_loc,
2739                                            tok_range, NULL);
2740
2741   return result;
2742 }
2743
2744 /* An upper bound on the number of bytes needed to spell TOKEN.
2745    Does not include preceding whitespace.  */
2746 unsigned int
2747 cpp_token_len (const cpp_token *token)
2748 {
2749   unsigned int len;
2750
2751   switch (TOKEN_SPELL (token))
2752     {
2753     default:            len = 6;                                break;
2754     case SPELL_LITERAL: len = token->val.str.len;               break;
2755     case SPELL_IDENT:   len = NODE_LEN (token->val.node.node) * 10;     break;
2756     }
2757
2758   return len;
2759 }
2760
2761 /* Parse UTF-8 out of NAMEP and place a \U escape in BUFFER.
2762    Return the number of bytes read out of NAME.  (There are always
2763    10 bytes written to BUFFER.)  */
2764
2765 static size_t
2766 utf8_to_ucn (unsigned char *buffer, const unsigned char *name)
2767 {
2768   int j;
2769   int ucn_len = 0;
2770   int ucn_len_c;
2771   unsigned t;
2772   unsigned long utf32;
2773   
2774   /* Compute the length of the UTF-8 sequence.  */
2775   for (t = *name; t & 0x80; t <<= 1)
2776     ucn_len++;
2777   
2778   utf32 = *name & (0x7F >> ucn_len);
2779   for (ucn_len_c = 1; ucn_len_c < ucn_len; ucn_len_c++)
2780     {
2781       utf32 = (utf32 << 6) | (*++name & 0x3F);
2782       
2783       /* Ill-formed UTF-8.  */
2784       if ((*name & ~0x3F) != 0x80)
2785         abort ();
2786     }
2787   
2788   *buffer++ = '\\';
2789   *buffer++ = 'U';
2790   for (j = 7; j >= 0; j--)
2791     *buffer++ = "0123456789abcdef"[(utf32 >> (4 * j)) & 0xF];
2792   return ucn_len;
2793 }
2794
2795 /* Given a token TYPE corresponding to a digraph, return a pointer to
2796    the spelling of the digraph.  */
2797 static const unsigned char *
2798 cpp_digraph2name (enum cpp_ttype type)
2799 {
2800   return digraph_spellings[(int) type - (int) CPP_FIRST_DIGRAPH];
2801 }
2802
2803 /* Write the spelling of an identifier IDENT, using UCNs, to BUFFER.
2804    The buffer must already contain the enough space to hold the
2805    token's spelling.  Returns a pointer to the character after the
2806    last character written.  */
2807 unsigned char *
2808 _cpp_spell_ident_ucns (unsigned char *buffer, cpp_hashnode *ident)
2809 {
2810   size_t i;
2811   const unsigned char *name = NODE_NAME (ident);
2812           
2813   for (i = 0; i < NODE_LEN (ident); i++)
2814     if (name[i] & ~0x7F)
2815       {
2816         i += utf8_to_ucn (buffer, name + i) - 1;
2817         buffer += 10;
2818       }
2819     else
2820       *buffer++ = name[i];
2821
2822   return buffer;
2823 }
2824
2825 /* Write the spelling of a token TOKEN to BUFFER.  The buffer must
2826    already contain the enough space to hold the token's spelling.
2827    Returns a pointer to the character after the last character written.
2828    FORSTRING is true if this is to be the spelling after translation
2829    phase 1 (with the original spelling of extended identifiers), false
2830    if extended identifiers should always be written using UCNs (there is
2831    no option for always writing them in the internal UTF-8 form).
2832    FIXME: Would be nice if we didn't need the PFILE argument.  */
2833 unsigned char *
2834 cpp_spell_token (cpp_reader *pfile, const cpp_token *token,
2835                  unsigned char *buffer, bool forstring)
2836 {
2837   switch (TOKEN_SPELL (token))
2838     {
2839     case SPELL_OPERATOR:
2840       {
2841         const unsigned char *spelling;
2842         unsigned char c;
2843
2844         if (token->flags & DIGRAPH)
2845           spelling = cpp_digraph2name (token->type);
2846         else if (token->flags & NAMED_OP)
2847           goto spell_ident;
2848         else
2849           spelling = TOKEN_NAME (token);
2850
2851         while ((c = *spelling++) != '\0')
2852           *buffer++ = c;
2853       }
2854       break;
2855
2856     spell_ident:
2857     case SPELL_IDENT:
2858       if (forstring)
2859         {
2860           memcpy (buffer, NODE_NAME (token->val.node.spelling),
2861                   NODE_LEN (token->val.node.spelling));
2862           buffer += NODE_LEN (token->val.node.spelling);
2863         }
2864       else
2865         buffer = _cpp_spell_ident_ucns (buffer, token->val.node.node);
2866       break;
2867
2868     case SPELL_LITERAL:
2869       memcpy (buffer, token->val.str.text, token->val.str.len);
2870       buffer += token->val.str.len;
2871       break;
2872
2873     case SPELL_NONE:
2874       cpp_error (pfile, CPP_DL_ICE,
2875                  "unspellable token %s", TOKEN_NAME (token));
2876       break;
2877     }
2878
2879   return buffer;
2880 }
2881
2882 /* Returns TOKEN spelt as a null-terminated string.  The string is
2883    freed when the reader is destroyed.  Useful for diagnostics.  */
2884 unsigned char *
2885 cpp_token_as_text (cpp_reader *pfile, const cpp_token *token)
2886
2887   unsigned int len = cpp_token_len (token) + 1;
2888   unsigned char *start = _cpp_unaligned_alloc (pfile, len), *end;
2889
2890   end = cpp_spell_token (pfile, token, start, false);
2891   end[0] = '\0';
2892
2893   return start;
2894 }
2895
2896 /* Returns a pointer to a string which spells the token defined by
2897    TYPE and FLAGS.  Used by C front ends, which really should move to
2898    using cpp_token_as_text.  */
2899 const char *
2900 cpp_type2name (enum cpp_ttype type, unsigned char flags)
2901 {
2902   if (flags & DIGRAPH)
2903     return (const char *) cpp_digraph2name (type);
2904   else if (flags & NAMED_OP)
2905     return cpp_named_operator2name (type);
2906
2907   return (const char *) token_spellings[type].name;
2908 }
2909
2910 /* Writes the spelling of token to FP, without any preceding space.
2911    Separated from cpp_spell_token for efficiency - to avoid stdio
2912    double-buffering.  */
2913 void
2914 cpp_output_token (const cpp_token *token, FILE *fp)
2915 {
2916   switch (TOKEN_SPELL (token))
2917     {
2918     case SPELL_OPERATOR:
2919       {
2920         const unsigned char *spelling;
2921         int c;
2922
2923         if (token->flags & DIGRAPH)
2924           spelling = cpp_digraph2name (token->type);
2925         else if (token->flags & NAMED_OP)
2926           goto spell_ident;
2927         else
2928           spelling = TOKEN_NAME (token);
2929
2930         c = *spelling;
2931         do
2932           putc (c, fp);
2933         while ((c = *++spelling) != '\0');
2934       }
2935       break;
2936
2937     spell_ident:
2938     case SPELL_IDENT:
2939       {
2940         size_t i;
2941         const unsigned char * name = NODE_NAME (token->val.node.node);
2942         
2943         for (i = 0; i < NODE_LEN (token->val.node.node); i++)
2944           if (name[i] & ~0x7F)
2945             {
2946               unsigned char buffer[10];
2947               i += utf8_to_ucn (buffer, name + i) - 1;
2948               fwrite (buffer, 1, 10, fp);
2949             }
2950           else
2951             fputc (NODE_NAME (token->val.node.node)[i], fp);
2952       }
2953       break;
2954
2955     case SPELL_LITERAL:
2956       fwrite (token->val.str.text, 1, token->val.str.len, fp);
2957       break;
2958
2959     case SPELL_NONE:
2960       /* An error, most probably.  */
2961       break;
2962     }
2963 }
2964
2965 /* Compare two tokens.  */
2966 int
2967 _cpp_equiv_tokens (const cpp_token *a, const cpp_token *b)
2968 {
2969   if (a->type == b->type && a->flags == b->flags)
2970     switch (TOKEN_SPELL (a))
2971       {
2972       default:                  /* Keep compiler happy.  */
2973       case SPELL_OPERATOR:
2974         /* token_no is used to track where multiple consecutive ##
2975            tokens were originally located.  */
2976         return (a->type != CPP_PASTE || a->val.token_no == b->val.token_no);
2977       case SPELL_NONE:
2978         return (a->type != CPP_MACRO_ARG
2979                 || (a->val.macro_arg.arg_no == b->val.macro_arg.arg_no
2980                     && a->val.macro_arg.spelling == b->val.macro_arg.spelling));
2981       case SPELL_IDENT:
2982         return (a->val.node.node == b->val.node.node
2983                 && a->val.node.spelling == b->val.node.spelling);
2984       case SPELL_LITERAL:
2985         return (a->val.str.len == b->val.str.len
2986                 && !memcmp (a->val.str.text, b->val.str.text,
2987                             a->val.str.len));
2988       }
2989
2990   return 0;
2991 }
2992
2993 /* Returns nonzero if a space should be inserted to avoid an
2994    accidental token paste for output.  For simplicity, it is
2995    conservative, and occasionally advises a space where one is not
2996    needed, e.g. "." and ".2".  */
2997 int
2998 cpp_avoid_paste (cpp_reader *pfile, const cpp_token *token1,
2999                  const cpp_token *token2)
3000 {
3001   enum cpp_ttype a = token1->type, b = token2->type;
3002   cppchar_t c;
3003
3004   if (token1->flags & NAMED_OP)
3005     a = CPP_NAME;
3006   if (token2->flags & NAMED_OP)
3007     b = CPP_NAME;
3008
3009   c = EOF;
3010   if (token2->flags & DIGRAPH)
3011     c = digraph_spellings[(int) b - (int) CPP_FIRST_DIGRAPH][0];
3012   else if (token_spellings[b].category == SPELL_OPERATOR)
3013     c = token_spellings[b].name[0];
3014
3015   /* Quickly get everything that can paste with an '='.  */
3016   if ((int) a <= (int) CPP_LAST_EQ && c == '=')
3017     return 1;
3018
3019   switch (a)
3020     {
3021     case CPP_GREATER:   return c == '>';
3022     case CPP_LESS:      return c == '<' || c == '%' || c == ':';
3023     case CPP_PLUS:      return c == '+';
3024     case CPP_MINUS:     return c == '-' || c == '>';
3025     case CPP_DIV:       return c == '/' || c == '*'; /* Comments.  */
3026     case CPP_MOD:       return c == ':' || c == '>';
3027     case CPP_AND:       return c == '&';
3028     case CPP_OR:        return c == '|';
3029     case CPP_COLON:     return c == ':' || c == '>';
3030     case CPP_DEREF:     return c == '*';
3031     case CPP_DOT:       return c == '.' || c == '%' || b == CPP_NUMBER;
3032     case CPP_HASH:      return c == '#' || c == '%'; /* Digraph form.  */
3033     case CPP_NAME:      return ((b == CPP_NUMBER
3034                                  && name_p (pfile, &token2->val.str))
3035                                 || b == CPP_NAME
3036                                 || b == CPP_CHAR || b == CPP_STRING); /* L */
3037     case CPP_NUMBER:    return (b == CPP_NUMBER || b == CPP_NAME
3038                                 || c == '.' || c == '+' || c == '-');
3039                                       /* UCNs */
3040     case CPP_OTHER:     return ((token1->val.str.text[0] == '\\'
3041                                  && b == CPP_NAME)
3042                                 || (CPP_OPTION (pfile, objc)
3043                                     && token1->val.str.text[0] == '@'
3044                                     && (b == CPP_NAME || b == CPP_STRING)));
3045     case CPP_STRING:
3046     case CPP_WSTRING:
3047     case CPP_UTF8STRING:
3048     case CPP_STRING16:
3049     case CPP_STRING32:  return (CPP_OPTION (pfile, user_literals)
3050                                 && (b == CPP_NAME
3051                                     || (TOKEN_SPELL (token2) == SPELL_LITERAL
3052                                         && ISIDST (token2->val.str.text[0]))));
3053
3054     default:            break;
3055     }
3056
3057   return 0;
3058 }
3059
3060 /* Output all the remaining tokens on the current line, and a newline
3061    character, to FP.  Leading whitespace is removed.  If there are
3062    macros, special token padding is not performed.  */
3063 void
3064 cpp_output_line (cpp_reader *pfile, FILE *fp)
3065 {
3066   const cpp_token *token;
3067
3068   token = cpp_get_token (pfile);
3069   while (token->type != CPP_EOF)
3070     {
3071       cpp_output_token (token, fp);
3072       token = cpp_get_token (pfile);
3073       if (token->flags & PREV_WHITE)
3074         putc (' ', fp);
3075     }
3076
3077   putc ('\n', fp);
3078 }
3079
3080 /* Return a string representation of all the remaining tokens on the
3081    current line.  The result is allocated using xmalloc and must be
3082    freed by the caller.  */
3083 unsigned char *
3084 cpp_output_line_to_string (cpp_reader *pfile, const unsigned char *dir_name)
3085 {
3086   const cpp_token *token;
3087   unsigned int out = dir_name ? ustrlen (dir_name) : 0;
3088   unsigned int alloced = 120 + out;
3089   unsigned char *result = (unsigned char *) xmalloc (alloced);
3090
3091   /* If DIR_NAME is empty, there are no initial contents.  */
3092   if (dir_name)
3093     {
3094       sprintf ((char *) result, "#%s ", dir_name);
3095       out += 2;
3096     }
3097
3098   token = cpp_get_token (pfile);
3099   while (token->type != CPP_EOF)
3100     {
3101       unsigned char *last;
3102       /* Include room for a possible space and the terminating nul.  */
3103       unsigned int len = cpp_token_len (token) + 2;
3104
3105       if (out + len > alloced)
3106         {
3107           alloced *= 2;
3108           if (out + len > alloced)
3109             alloced = out + len;
3110           result = (unsigned char *) xrealloc (result, alloced);
3111         }
3112
3113       last = cpp_spell_token (pfile, token, &result[out], 0);
3114       out = last - result;
3115
3116       token = cpp_get_token (pfile);
3117       if (token->flags & PREV_WHITE)
3118         result[out++] = ' ';
3119     }
3120
3121   result[out] = '\0';
3122   return result;
3123 }
3124
3125 /* Memory buffers.  Changing these three constants can have a dramatic
3126    effect on performance.  The values here are reasonable defaults,
3127    but might be tuned.  If you adjust them, be sure to test across a
3128    range of uses of cpplib, including heavy nested function-like macro
3129    expansion.  Also check the change in peak memory usage (NJAMD is a
3130    good tool for this).  */
3131 #define MIN_BUFF_SIZE 8000
3132 #define BUFF_SIZE_UPPER_BOUND(MIN_SIZE) (MIN_BUFF_SIZE + (MIN_SIZE) * 3 / 2)
3133 #define EXTENDED_BUFF_SIZE(BUFF, MIN_EXTRA) \
3134         (MIN_EXTRA + ((BUFF)->limit - (BUFF)->cur) * 2)
3135
3136 #if MIN_BUFF_SIZE > BUFF_SIZE_UPPER_BOUND (0)
3137   #error BUFF_SIZE_UPPER_BOUND must be at least as large as MIN_BUFF_SIZE!
3138 #endif
3139
3140 /* Create a new allocation buffer.  Place the control block at the end
3141    of the buffer, so that buffer overflows will cause immediate chaos.  */
3142 static _cpp_buff *
3143 new_buff (size_t len)
3144 {
3145   _cpp_buff *result;
3146   unsigned char *base;
3147
3148   if (len < MIN_BUFF_SIZE)
3149     len = MIN_BUFF_SIZE;
3150   len = CPP_ALIGN (len);
3151
3152 #ifdef ENABLE_VALGRIND_ANNOTATIONS
3153   /* Valgrind warns about uses of interior pointers, so put _cpp_buff
3154      struct first.  */
3155   size_t slen = CPP_ALIGN2 (sizeof (_cpp_buff), 2 * DEFAULT_ALIGNMENT);
3156   base = XNEWVEC (unsigned char, len + slen);
3157   result = (_cpp_buff *) base;
3158   base += slen;
3159 #else
3160   base = XNEWVEC (unsigned char, len + sizeof (_cpp_buff));
3161   result = (_cpp_buff *) (base + len);
3162 #endif
3163   result->base = base;
3164   result->cur = base;
3165   result->limit = base + len;
3166   result->next = NULL;
3167   return result;
3168 }
3169
3170 /* Place a chain of unwanted allocation buffers on the free list.  */
3171 void
3172 _cpp_release_buff (cpp_reader *pfile, _cpp_buff *buff)
3173 {
3174   _cpp_buff *end = buff;
3175
3176   while (end->next)
3177     end = end->next;
3178   end->next = pfile->free_buffs;
3179   pfile->free_buffs = buff;
3180 }
3181
3182 /* Return a free buffer of size at least MIN_SIZE.  */
3183 _cpp_buff *
3184 _cpp_get_buff (cpp_reader *pfile, size_t min_size)
3185 {
3186   _cpp_buff *result, **p;
3187
3188   for (p = &pfile->free_buffs;; p = &(*p)->next)
3189     {
3190       size_t size;
3191
3192       if (*p == NULL)
3193         return new_buff (min_size);
3194       result = *p;
3195       size = result->limit - result->base;
3196       /* Return a buffer that's big enough, but don't waste one that's
3197          way too big.  */
3198       if (size >= min_size && size <= BUFF_SIZE_UPPER_BOUND (min_size))
3199         break;
3200     }
3201
3202   *p = result->next;
3203   result->next = NULL;
3204   result->cur = result->base;
3205   return result;
3206 }
3207
3208 /* Creates a new buffer with enough space to hold the uncommitted
3209    remaining bytes of BUFF, and at least MIN_EXTRA more bytes.  Copies
3210    the excess bytes to the new buffer.  Chains the new buffer after
3211    BUFF, and returns the new buffer.  */
3212 _cpp_buff *
3213 _cpp_append_extend_buff (cpp_reader *pfile, _cpp_buff *buff, size_t min_extra)
3214 {
3215   size_t size = EXTENDED_BUFF_SIZE (buff, min_extra);
3216   _cpp_buff *new_buff = _cpp_get_buff (pfile, size);
3217
3218   buff->next = new_buff;
3219   memcpy (new_buff->base, buff->cur, BUFF_ROOM (buff));
3220   return new_buff;
3221 }
3222
3223 /* Creates a new buffer with enough space to hold the uncommitted
3224    remaining bytes of the buffer pointed to by BUFF, and at least
3225    MIN_EXTRA more bytes.  Copies the excess bytes to the new buffer.
3226    Chains the new buffer before the buffer pointed to by BUFF, and
3227    updates the pointer to point to the new buffer.  */
3228 void
3229 _cpp_extend_buff (cpp_reader *pfile, _cpp_buff **pbuff, size_t min_extra)
3230 {
3231   _cpp_buff *new_buff, *old_buff = *pbuff;
3232   size_t size = EXTENDED_BUFF_SIZE (old_buff, min_extra);
3233
3234   new_buff = _cpp_get_buff (pfile, size);
3235   memcpy (new_buff->base, old_buff->cur, BUFF_ROOM (old_buff));
3236   new_buff->next = old_buff;
3237   *pbuff = new_buff;
3238 }
3239
3240 /* Free a chain of buffers starting at BUFF.  */
3241 void
3242 _cpp_free_buff (_cpp_buff *buff)
3243 {
3244   _cpp_buff *next;
3245
3246   for (; buff; buff = next)
3247     {
3248       next = buff->next;
3249 #ifdef ENABLE_VALGRIND_ANNOTATIONS
3250       free (buff);
3251 #else
3252       free (buff->base);
3253 #endif
3254     }
3255 }
3256
3257 /* Allocate permanent, unaligned storage of length LEN.  */
3258 unsigned char *
3259 _cpp_unaligned_alloc (cpp_reader *pfile, size_t len)
3260 {
3261   _cpp_buff *buff = pfile->u_buff;
3262   unsigned char *result = buff->cur;
3263
3264   if (len > (size_t) (buff->limit - result))
3265     {
3266       buff = _cpp_get_buff (pfile, len);
3267       buff->next = pfile->u_buff;
3268       pfile->u_buff = buff;
3269       result = buff->cur;
3270     }
3271
3272   buff->cur = result + len;
3273   return result;
3274 }
3275
3276 /* Allocate permanent, unaligned storage of length LEN from a_buff.
3277    That buffer is used for growing allocations when saving macro
3278    replacement lists in a #define, and when parsing an answer to an
3279    assertion in #assert, #unassert or #if (and therefore possibly
3280    whilst expanding macros).  It therefore must not be used by any
3281    code that they might call: specifically the lexer and the guts of
3282    the macro expander.
3283
3284    All existing other uses clearly fit this restriction: storing
3285    registered pragmas during initialization.  */
3286 unsigned char *
3287 _cpp_aligned_alloc (cpp_reader *pfile, size_t len)
3288 {
3289   _cpp_buff *buff = pfile->a_buff;
3290   unsigned char *result = buff->cur;
3291
3292   if (len > (size_t) (buff->limit - result))
3293     {
3294       buff = _cpp_get_buff (pfile, len);
3295       buff->next = pfile->a_buff;
3296       pfile->a_buff = buff;
3297       result = buff->cur;
3298     }
3299
3300   buff->cur = result + len;
3301   return result;
3302 }
3303
3304 /* Say which field of TOK is in use.  */
3305
3306 enum cpp_token_fld_kind
3307 cpp_token_val_index (const cpp_token *tok)
3308 {
3309   switch (TOKEN_SPELL (tok))
3310     {
3311     case SPELL_IDENT:
3312       return CPP_TOKEN_FLD_NODE;
3313     case SPELL_LITERAL:
3314       return CPP_TOKEN_FLD_STR;
3315     case SPELL_OPERATOR:
3316       if (tok->type == CPP_PASTE)
3317         return CPP_TOKEN_FLD_TOKEN_NO;
3318       else
3319         return CPP_TOKEN_FLD_NONE;
3320     case SPELL_NONE:
3321       if (tok->type == CPP_MACRO_ARG)
3322         return CPP_TOKEN_FLD_ARG_NO;
3323       else if (tok->type == CPP_PADDING)
3324         return CPP_TOKEN_FLD_SOURCE;
3325       else if (tok->type == CPP_PRAGMA)
3326         return CPP_TOKEN_FLD_PRAGMA;
3327       /* fall through */
3328     default:
3329       return CPP_TOKEN_FLD_NONE;
3330     }
3331 }
3332
3333 /* All tokens lexed in R after calling this function will be forced to have
3334    their source_location the same as the location referenced by P, until
3335    cpp_stop_forcing_token_locations is called for R.  */
3336
3337 void
3338 cpp_force_token_locations (cpp_reader *r, source_location *p)
3339 {
3340   r->forced_token_location_p = p;
3341 }
3342
3343 /* Go back to assigning locations naturally for lexed tokens.  */
3344
3345 void
3346 cpp_stop_forcing_token_locations (cpp_reader *r)
3347 {
3348   r->forced_token_location_p = NULL;
3349 }