Merge branch 'vendor/DIFFUTILS'
[dragonfly.git] / contrib / gcc-8.0 / libcpp / pch.c
1 /* Part of CPP library.  (Precompiled header reading/writing.)
2    Copyright (C) 2000-2018 Free Software Foundation, Inc.
3
4 This program is free software; you can redistribute it and/or modify it
5 under the terms of the GNU General Public License as published by the
6 Free Software Foundation; either version 3, or (at your option) any
7 later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program; see the file COPYING3.  If not see
16 <http://www.gnu.org/licenses/>.  */
17
18 #include "config.h"
19 #include "system.h"
20 #include "cpplib.h"
21 #include "internal.h"
22 #include "hashtab.h"
23 #include "mkdeps.h"
24
25 static int write_macdef (cpp_reader *, cpp_hashnode *, void *);
26 static int save_idents (cpp_reader *, cpp_hashnode *, void *);
27 static hashval_t hashmem (const void *, size_t);
28 static hashval_t cpp_string_hash (const void *);
29 static int cpp_string_eq (const void *, const void *);
30 static int count_defs (cpp_reader *, cpp_hashnode *, void *);
31 static int comp_hashnodes (const void *, const void *);
32 static int collect_ht_nodes (cpp_reader *, cpp_hashnode *, void *);
33 static int write_defs (cpp_reader *, cpp_hashnode *, void *);
34 static int save_macros (cpp_reader *, cpp_hashnode *, void *);
35 static int _cpp_save_pushed_macros (cpp_reader *, FILE *);
36 static int _cpp_restore_pushed_macros (cpp_reader *, FILE *);
37
38 /* This structure represents a macro definition on disk.  */
39 struct macrodef_struct
40 {
41   unsigned int definition_length;
42   unsigned short name_length;
43   unsigned short flags;
44 };
45
46 /* This is how we write out a macro definition.
47    Suitable for being called by cpp_forall_identifiers.  */
48
49 static int
50 write_macdef (cpp_reader *pfile, cpp_hashnode *hn, void *file_p)
51 {
52   FILE *f = (FILE *) file_p;
53   switch (hn->type)
54     {
55     case NT_VOID:
56       if (! (hn->flags & NODE_POISONED))
57         return 1;
58       /* XXX Really fallthru?  */
59       /* FALLTHRU */
60
61     case NT_MACRO:
62       if ((hn->flags & NODE_BUILTIN)
63           && (!pfile->cb.user_builtin_macro
64               || !pfile->cb.user_builtin_macro (pfile, hn)))
65         return 1;
66
67       {
68         struct macrodef_struct s;
69         const unsigned char *defn;
70
71         s.name_length = NODE_LEN (hn);
72         s.flags = hn->flags & NODE_POISONED;
73
74         if (hn->type == NT_MACRO)
75           {
76             defn = cpp_macro_definition (pfile, hn);
77             s.definition_length = ustrlen (defn);
78           }
79         else
80           {
81             defn = NODE_NAME (hn);
82             s.definition_length = s.name_length;
83           }
84
85         if (fwrite (&s, sizeof (s), 1, f) != 1
86             || fwrite (defn, 1, s.definition_length, f) != s.definition_length)
87           {
88             cpp_errno (pfile, CPP_DL_ERROR,
89                        "while writing precompiled header");
90             return 0;
91           }
92       }
93       return 1;
94
95     case NT_ASSERTION:
96       /* Not currently implemented.  */
97       return 1;
98
99     default:
100       abort ();
101     }
102 }
103
104 /* This structure records the names of the defined macros.
105    It's also used as a callback structure for size_initial_idents
106    and save_idents.  */
107
108 struct cpp_savedstate
109 {
110   /* A hash table of the defined identifiers.  */
111   htab_t definedhash;
112   /* The size of the definitions of those identifiers (the size of
113      'definedstrs').  */
114   size_t hashsize;
115   /* Number of definitions */
116   size_t n_defs;
117   /* Array of definitions.  In cpp_write_pch_deps it is used for sorting.  */
118   cpp_hashnode **defs;
119   /* Space for the next definition.  Definitions are null-terminated
120      strings.  */
121   unsigned char *definedstrs;
122 };
123
124 /* Save this identifier into the state: put it in the hash table,
125    put the definition in 'definedstrs'.  */
126
127 static int
128 save_idents (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *hn, void *ss_p)
129 {
130   struct cpp_savedstate *const ss = (struct cpp_savedstate *)ss_p;
131
132   if (hn->type != NT_VOID)
133     {
134       struct cpp_string news;
135       void **slot;
136
137       news.len = NODE_LEN (hn);
138       news.text= NODE_NAME (hn);
139       slot = htab_find_slot (ss->definedhash, &news, INSERT);
140       if (*slot == NULL)
141         {
142           struct cpp_string *sp;
143           unsigned char *text;
144
145           sp = XNEW (struct cpp_string);
146           *slot = sp;
147
148           sp->len = NODE_LEN (hn);
149           sp->text = text = XNEWVEC (unsigned char, NODE_LEN (hn));
150           memcpy (text, NODE_NAME (hn), NODE_LEN (hn));
151         }
152     }
153
154   return 1;
155 }
156
157 /* Hash some memory in a generic way.  */
158
159 static hashval_t
160 hashmem (const void *p_p, size_t sz)
161 {
162   const unsigned char *p = (const unsigned char *)p_p;
163   size_t i;
164   hashval_t h;
165
166   h = 0;
167   for (i = 0; i < sz; i++)
168     h = h * 67 - (*p++ - 113);
169   return h;
170 }
171
172 /* Hash a cpp string for the hashtable machinery.  */
173
174 static hashval_t
175 cpp_string_hash (const void *a_p)
176 {
177   const struct cpp_string *a = (const struct cpp_string *) a_p;
178   return hashmem (a->text, a->len);
179 }
180
181 /* Compare two cpp strings for the hashtable machinery.  */
182
183 static int
184 cpp_string_eq (const void *a_p, const void *b_p)
185 {
186   const struct cpp_string *a = (const struct cpp_string *) a_p;
187   const struct cpp_string *b = (const struct cpp_string *) b_p;
188   return (a->len == b->len
189           && memcmp (a->text, b->text, a->len) == 0);
190 }
191
192 /* Free memory associated with cpp_string.  */
193
194 static void
195 cpp_string_free (void *a_p)
196 {
197   struct cpp_string *a = (struct cpp_string *) a_p;
198   free ((void *) a->text);
199   free (a);
200 }
201
202 /* Save the current definitions of the cpp_reader for dependency
203    checking purposes.  When writing a precompiled header, this should
204    be called at the same point in the compilation as cpp_valid_state
205    would be called when reading the precompiled header back in.  */
206
207 int
208 cpp_save_state (cpp_reader *r, FILE *f)
209 {
210   /* Save the list of non-void identifiers for the dependency checking.  */
211   r->savedstate = XNEW (struct cpp_savedstate);
212   r->savedstate->definedhash = htab_create (100, cpp_string_hash,
213                                             cpp_string_eq, cpp_string_free);
214   cpp_forall_identifiers (r, save_idents, r->savedstate);
215
216   /* Write out the list of defined identifiers.  */
217   cpp_forall_identifiers (r, write_macdef, f);
218
219   return 0;
220 }
221
222 /* Calculate the 'hashsize' field of the saved state.  */
223
224 static int
225 count_defs (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *hn, void *ss_p)
226 {
227   struct cpp_savedstate *const ss = (struct cpp_savedstate *)ss_p;
228
229   switch (hn->type)
230     {
231     case NT_MACRO:
232       if (hn->flags & NODE_BUILTIN)
233         return 1;
234
235       /* fall through.  */
236
237     case NT_VOID:
238       {
239         struct cpp_string news;
240         void **slot;
241
242         news.len = NODE_LEN (hn);
243         news.text = NODE_NAME (hn);
244         slot = (void **) htab_find (ss->definedhash, &news);
245         if (slot == NULL)
246           {
247             ss->hashsize += NODE_LEN (hn) + 1;
248             ss->n_defs += 1;
249           }
250       }
251       return 1;
252
253     case NT_ASSERTION:
254       /* Not currently implemented.  */
255       return 1;
256
257     default:
258       abort ();
259     }
260 }
261
262 /* Collect the identifiers into the state's string table.  */
263 static int
264 write_defs (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *hn, void *ss_p)
265 {
266   struct cpp_savedstate *const ss = (struct cpp_savedstate *)ss_p;
267
268   switch (hn->type)
269     {
270     case NT_MACRO:
271       if (hn->flags & NODE_BUILTIN)
272         return 1;
273
274       /* fall through.  */
275
276     case NT_VOID:
277       {
278         struct cpp_string news;
279         void **slot;
280
281         news.len = NODE_LEN (hn);
282         news.text = NODE_NAME (hn);
283         slot = (void **) htab_find (ss->definedhash, &news);
284         if (slot == NULL)
285           {
286             ss->defs[ss->n_defs] = hn;
287             ss->n_defs += 1;
288           }
289       }
290       return 1;
291
292     case NT_ASSERTION:
293       /* Not currently implemented.  */
294       return 1;
295
296     default:
297       abort ();
298     }
299 }
300
301 /* Comparison function for qsort.  The arguments point to pointers of
302    type ht_hashnode *.  */
303 static int
304 comp_hashnodes (const void *px, const void *py)
305 {
306   cpp_hashnode *x = *(cpp_hashnode **) px;
307   cpp_hashnode *y = *(cpp_hashnode **) py;
308   return ustrcmp (NODE_NAME (x), NODE_NAME (y));
309 }
310
311 /* Write out the remainder of the dependency information.  This should be
312    called after the PCH is ready to be saved.  */
313
314 int
315 cpp_write_pch_deps (cpp_reader *r, FILE *f)
316 {
317   struct macrodef_struct z;
318   struct cpp_savedstate *const ss = r->savedstate;
319   unsigned char *definedstrs;
320   size_t i;
321
322   /* Collect the list of identifiers which have been seen and
323      weren't defined to anything previously.  */
324   ss->hashsize = 0;
325   ss->n_defs = 0;
326   cpp_forall_identifiers (r, count_defs, ss);
327
328   ss->defs = XNEWVEC (cpp_hashnode *, ss->n_defs);
329   ss->n_defs = 0;
330   cpp_forall_identifiers (r, write_defs, ss);
331
332   /* Sort the list, copy it into a buffer, and write it out.  */
333   qsort (ss->defs, ss->n_defs, sizeof (cpp_hashnode *), &comp_hashnodes);
334   definedstrs = ss->definedstrs = XNEWVEC (unsigned char, ss->hashsize);
335   for (i = 0; i < ss->n_defs; ++i)
336     {
337       size_t len = NODE_LEN (ss->defs[i]);
338       memcpy (definedstrs, NODE_NAME (ss->defs[i]), len + 1);
339       definedstrs += len + 1;
340     }
341
342   memset (&z, 0, sizeof (z));
343   z.definition_length = ss->hashsize;
344   if (fwrite (&z, sizeof (z), 1, f) != 1
345       || fwrite (ss->definedstrs, ss->hashsize, 1, f) != 1)
346     {
347       cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header");
348       return -1;
349     }
350   free (ss->definedstrs);
351   free (ss->defs);
352   htab_delete (ss->definedhash);
353
354   /* Free the saved state.  */
355   free (ss);
356   r->savedstate = NULL;
357
358   /* Save the next value of __COUNTER__. */
359   if (fwrite (&r->counter, sizeof (r->counter), 1, f) != 1)
360     {
361       cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header");
362       return -1;
363     }
364
365   return 0;
366 }
367
368 /* Write out the definitions of the preprocessor, in a form suitable for
369    cpp_read_state.  */
370
371 int
372 cpp_write_pch_state (cpp_reader *r, FILE *f)
373 {
374   if (!r->deps)
375     r->deps = deps_init ();
376
377   if (deps_save (r->deps, f) != 0)
378     {
379       cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header");
380       return -1;
381     }
382
383   if (! _cpp_save_file_entries (r, f))
384     {
385       cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header");
386       return -1;
387     }
388
389   /* Save the next __COUNTER__ value.  When we include a precompiled header,
390      we need to start at the offset we would have if the header had been
391      included normally. */
392   if (fwrite (&r->counter, sizeof (r->counter), 1, f) != 1)
393     {
394       cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header");
395       return -1;
396     }
397
398   /* Write saved macros.  */
399   if (! _cpp_save_pushed_macros (r, f))
400     {
401       cpp_errno (r, CPP_DL_ERROR, "while writing precompiled header");
402       return -1;
403     }
404
405   return 0;
406 }
407
408 static int
409 _cpp_restore_pushed_macros (cpp_reader *r, FILE *f)
410 {
411   size_t count_saved = 0;
412   size_t i;
413   struct def_pragma_macro *p;
414   size_t nlen;
415   uchar *defn;
416   size_t defnlen;
417
418   if (fread (&count_saved, sizeof (count_saved), 1, f) != 1)
419     return 0;
420   if (! count_saved)
421     return 1;
422   for (i = 0; i < count_saved; i++)
423     {
424       if (fread (&nlen, sizeof (nlen), 1, f) != 1)
425         return 0;
426       p = XNEW (struct def_pragma_macro);
427       memset (p, 0, sizeof (struct def_pragma_macro));
428       p->name = XNEWVAR (char, nlen + 1);
429       p->name[nlen] = 0;
430       if (fread (p->name, nlen, 1, f) != 1)
431         return 0;
432       if (fread (&defnlen, sizeof (defnlen), 1, f) != 1)
433         return 0;
434       if (defnlen == 0)
435         p->is_undef = 1;
436       else
437         {
438           defn = XNEWVEC (uchar, defnlen + 1);
439           defn[defnlen] = 0;
440
441           if (fread (defn, defnlen, 1, f) != 1)
442             return 0;
443
444           p->definition = defn;
445           if (fread (&(p->line), sizeof (source_location), 1, f) != 1)
446             return 0;
447           defnlen = 0;
448           if (fread (&defnlen, sizeof (defnlen), 1, f) != 1)
449             return 0;
450           p->syshdr = ((defnlen & 1) != 0 ? 1 : 0);
451           p->used =  ((defnlen & 2) != 0 ? 1 : 0);
452         }
453
454       p->next = r->pushed_macros;
455       r->pushed_macros = p;
456     }
457   return 1;
458 }
459
460 static int
461 _cpp_save_pushed_macros (cpp_reader *r, FILE *f)
462 {
463   size_t count_saved = 0;
464   size_t i;
465   struct def_pragma_macro *p,**pp;
466   size_t defnlen;
467
468   /* Get count. */
469   p = r->pushed_macros;
470   while (p != NULL)
471     {
472       count_saved++;
473       p = p->next;
474     }
475   if (fwrite (&count_saved, sizeof (count_saved), 1, f) != 1)
476     return 0;
477   if (!count_saved)
478     return 1;
479
480   pp = (struct def_pragma_macro **) alloca (sizeof (struct def_pragma_macro *)
481                                             * count_saved);
482   /* Store them in reverse order.  */
483   p = r->pushed_macros;
484   i = count_saved;
485   while (p != NULL)
486     {
487       --i;
488       pp[i] = p;
489       p = p->next;
490     }
491   for (i = 0; i < count_saved; i++)
492     {
493       defnlen = strlen (pp[i]->name);
494       if (fwrite (&defnlen, sizeof (size_t), 1, f) != 1
495           || fwrite (pp[i]->name, defnlen, 1, f) != 1)
496         return 0;
497       if (pp[i]->is_undef)
498         {
499           defnlen = 0;
500           if (fwrite (&defnlen, sizeof (size_t), 1, f) != 1)
501             return 0;
502         }
503       else
504         {
505           defnlen = ustrlen (pp[i]->definition);
506           if (fwrite (&defnlen, sizeof (size_t), 1, f) != 1
507               || fwrite (pp[i]->definition, defnlen, 1, f) != 1)
508             return 0;
509           if (fwrite (&(pp[i]->line), sizeof (source_location), 1, f) != 1)
510             return 0;
511           defnlen = 0;
512           defnlen |= (pp[i]->syshdr != 0 ? 1 : 0);
513           defnlen |= (pp[i]->used != 0 ? 2 : 0);
514           if (fwrite (&defnlen, sizeof (defnlen), 1, f) != 1)
515             return 0;
516         }
517     }
518   return 1;
519 }
520
521
522 /* Data structure to transform hash table nodes into a sorted list */
523
524 struct ht_node_list
525 {
526   /* Array of nodes */
527   cpp_hashnode **defs;
528   /* Number of nodes in the array */
529   size_t n_defs;
530   /* Size of the allocated array */
531   size_t asize;
532 };
533
534 /* Callback for collecting identifiers from hash table */
535
536 static int
537 collect_ht_nodes (cpp_reader *pfile ATTRIBUTE_UNUSED, cpp_hashnode *hn,
538                   void *nl_p)
539 {
540   struct ht_node_list *const nl = (struct ht_node_list *)nl_p;
541
542   if (hn->type != NT_VOID || hn->flags & NODE_POISONED)
543     {
544       if (nl->n_defs == nl->asize)
545         {
546           nl->asize *= 2;
547           nl->defs = XRESIZEVEC (cpp_hashnode *, nl->defs, nl->asize);
548         }
549
550       nl->defs[nl->n_defs] = hn;
551       ++nl->n_defs;
552     }
553   return 1;
554 }
555
556
557 /* Return nonzero if FD is a precompiled header which is consistent
558    with the preprocessor's current definitions.  It will be consistent
559    when:
560
561    - anything that was defined just before the PCH was generated
562      is defined the same way now; and
563    - anything that was not defined then, but is defined now, was not
564      used by the PCH.
565
566    NAME is used to print warnings if `warn_invalid_pch' is set in the
567    reader's flags.
568 */
569
570 int
571 cpp_valid_state (cpp_reader *r, const char *name, int fd)
572 {
573   struct macrodef_struct m;
574   size_t namebufsz = 256;
575   unsigned char *namebuf = XNEWVEC (unsigned char, namebufsz);
576   unsigned char *undeftab = NULL;
577   struct ht_node_list nl = { 0, 0, 0 };
578   unsigned char *first, *last;
579   unsigned int i;
580   unsigned int counter;
581
582   /* Read in the list of identifiers that must be defined
583      Check that they are defined in the same way.  */
584   for (;;)
585     {
586       cpp_hashnode *h;
587       const unsigned char *newdefn;
588
589       if (read (fd, &m, sizeof (m)) != sizeof (m))
590         goto error;
591
592       if (m.name_length == 0)
593         break;
594
595       /* If this file is already preprocessed, there won't be any
596          macros defined, and that's OK.  */
597       if (CPP_OPTION (r, preprocessed))
598         {
599           if (lseek (fd, m.definition_length, SEEK_CUR) == -1)
600             goto error;
601           continue;
602         }
603
604       if (m.definition_length > namebufsz)
605         {
606           free (namebuf);
607           namebufsz = m.definition_length + 256;
608           namebuf = XNEWVEC (unsigned char, namebufsz);
609         }
610
611       if ((size_t)read (fd, namebuf, m.definition_length)
612           != m.definition_length)
613         goto error;
614
615       h = cpp_lookup (r, namebuf, m.name_length);
616       if (m.flags & NODE_POISONED
617           || h->flags & NODE_POISONED)
618         {
619           if (CPP_OPTION (r, warn_invalid_pch))
620             cpp_warning_syshdr (r, CPP_W_INVALID_PCH,
621                                 "%s: not used because `%.*s' is poisoned",
622                                 name, m.name_length, namebuf);
623           goto fail;
624         }
625
626       if (h->type != NT_MACRO)
627         {
628           /* It's ok if __GCC_HAVE_DWARF2_CFI_ASM becomes undefined,
629              as in, when the PCH file is created with -g and we're
630              attempting to use it without -g.  Restoring the PCH file
631              is supposed to bring in this definition *and* enable the
632              generation of call frame information, so that precompiled
633              definitions that take this macro into account, to decide
634              what asm to emit, won't issue .cfi directives when the
635              compiler doesn't.  */
636           if (!(h->flags & NODE_USED)
637               && m.name_length == sizeof ("__GCC_HAVE_DWARF2_CFI_ASM") - 1
638               && !memcmp (namebuf, "__GCC_HAVE_DWARF2_CFI_ASM", m.name_length))
639             continue;
640
641           if (CPP_OPTION (r, warn_invalid_pch))
642             cpp_warning_syshdr (r, CPP_W_INVALID_PCH,
643                                 "%s: not used because `%.*s' not defined",
644                                 name, m.name_length, namebuf);
645           goto fail;
646         }
647
648       newdefn = cpp_macro_definition (r, h);
649
650       if (m.definition_length != ustrlen (newdefn)
651           || memcmp (namebuf, newdefn, m.definition_length) != 0)
652         {
653           if (CPP_OPTION (r, warn_invalid_pch))
654             cpp_warning_syshdr (r, CPP_W_INVALID_PCH,
655                "%s: not used because `%.*s' defined as `%s' not `%.*s'",
656                        name, m.name_length, namebuf, newdefn + m.name_length,
657                        m.definition_length - m.name_length,
658                        namebuf +  m.name_length);
659           goto fail;
660         }
661     }
662   free (namebuf);
663   namebuf = NULL;
664
665   /* Read in the list of identifiers that must not be defined.
666      Check that they really aren't.  */
667   undeftab = XNEWVEC (unsigned char, m.definition_length);
668   if ((size_t) read (fd, undeftab, m.definition_length) != m.definition_length)
669     goto error;
670
671   /* Collect identifiers from the current hash table.  */
672   nl.n_defs = 0;
673   nl.asize = 10;
674   nl.defs = XNEWVEC (cpp_hashnode *, nl.asize);
675   cpp_forall_identifiers (r, &collect_ht_nodes, &nl);
676   qsort (nl.defs, nl.n_defs, sizeof (cpp_hashnode *), &comp_hashnodes);
677
678   /* Loop through nl.defs and undeftab, both of which are sorted lists.
679      There should be no matches.  */
680   first = undeftab;
681   last = undeftab + m.definition_length;
682   i = 0;
683
684   while (first < last && i < nl.n_defs)
685     {
686       int cmp = ustrcmp (first, NODE_NAME (nl.defs[i]));
687
688       if (cmp < 0)
689         first += ustrlen (first) + 1;
690       else if (cmp > 0)
691         ++i;
692       else
693         {
694           if (CPP_OPTION (r, warn_invalid_pch))
695             cpp_warning_syshdr (r, CPP_W_INVALID_PCH,
696                                 "%s: not used because `%s' is defined",
697                                 name, first);
698           goto fail;
699         }
700     }
701
702   free(nl.defs);
703   nl.defs = NULL;
704   free (undeftab);
705   undeftab = NULL;
706
707   /* Read in the next value of __COUNTER__.
708      Check that (a) __COUNTER__ was not used in the pch or (b) __COUNTER__
709      has not been used in this translation unit. */
710   if (read (fd, &counter, sizeof (counter)) != sizeof (counter))
711     goto error;
712   if (counter && r->counter)
713     {
714       if (CPP_OPTION (r, warn_invalid_pch))
715         cpp_warning_syshdr (r, CPP_W_INVALID_PCH,
716                             "%s: not used because `__COUNTER__' is invalid",
717                             name);
718       goto fail;
719     }
720
721   /* We win!  */
722   return 0;
723
724  error:
725   cpp_errno (r, CPP_DL_ERROR, "while reading precompiled header");
726
727  fail:
728   free (namebuf);
729   free (undeftab);
730   free (nl.defs);
731   return 1;
732 }
733
734 /* Save all the existing macros.  */
735
736 struct save_macro_data
737 {
738   uchar **defns;
739   size_t count;
740   size_t array_size;
741   char **saved_pragmas;
742 };
743
744 /* Save the definition of a single macro, so that it will persist
745    across a PCH restore.  Because macro data is in GCed memory, which
746    will be blown away by PCH, it must be temporarily copied to
747    malloced memory.  (The macros will refer to identifier nodes which
748    are also GCed and so on, so the copying is done by turning them
749    into self-contained strings.)  The assumption is that most macro
750    definitions will come from the PCH file, not from the compilation
751    before the PCH file is loaded, so it doesn't matter that this is
752    a little expensive.
753
754    It would reduce the cost even further if macros defined in the PCH
755    file were not saved in this way, but this is not done (yet), except
756    for builtins, and for #assert by default.  */
757
758 static int
759 save_macros (cpp_reader *r, cpp_hashnode *h, void *data_p)
760 {
761   struct save_macro_data *data = (struct save_macro_data *)data_p;
762
763   if ((h->flags & NODE_BUILTIN)
764       && h->type == NT_MACRO
765       && r->cb.user_builtin_macro)
766     r->cb.user_builtin_macro (r, h);
767
768   if (h->type != NT_VOID
769       && (h->flags & NODE_BUILTIN) == 0)
770     {
771       if (data->count == data->array_size)
772         {
773           data->array_size *= 2;
774           data->defns = XRESIZEVEC (uchar *, data->defns, (data->array_size));
775         }
776
777       switch (h->type)
778         {
779         case NT_ASSERTION:
780           /* Not currently implemented.  */
781           return 1;
782
783         case NT_MACRO:
784           {
785             const uchar * defn = cpp_macro_definition (r, h);
786             size_t defnlen = ustrlen (defn);
787
788             data->defns[data->count] = (uchar *) xmemdup (defn, defnlen,
789                                                           defnlen + 2);
790             data->defns[data->count][defnlen] = '\n';
791           }
792           break;
793
794         default:
795           abort ();
796         }
797       data->count++;
798     }
799   return 1;
800 }
801
802 /* Prepare to restore the state, by saving the currently-defined
803    macros in 'data'.  */
804
805 void
806 cpp_prepare_state (cpp_reader *r, struct save_macro_data **data)
807 {
808   struct save_macro_data *d = XNEW (struct save_macro_data);
809
810   d->array_size = 512;
811   d->defns = XNEWVEC (uchar *, d->array_size);
812   d->count = 0;
813   cpp_forall_identifiers (r, save_macros, d);
814   d->saved_pragmas = _cpp_save_pragma_names (r);
815   *data = d;
816 }
817
818 /* Given a precompiled header that was previously determined to be valid,
819    apply all its definitions (and undefinitions) to the current state.
820    DEPNAME is passed to deps_restore.  */
821
822 int
823 cpp_read_state (cpp_reader *r, const char *name, FILE *f,
824                 struct save_macro_data *data)
825 {
826   size_t i;
827   struct lexer_state old_state;
828   unsigned int counter;
829
830   /* Restore spec_nodes, which will be full of references to the old
831      hashtable entries and so will now be invalid.  */
832   {
833     struct spec_nodes *s = &r->spec_nodes;
834     s->n_defined        = cpp_lookup (r, DSC("defined"));
835     s->n_true           = cpp_lookup (r, DSC("true"));
836     s->n_false          = cpp_lookup (r, DSC("false"));
837     s->n__VA_ARGS__     = cpp_lookup (r, DSC("__VA_ARGS__"));
838     s->n__VA_OPT__      = cpp_lookup (r, DSC("__VA_OPT__"));
839     s->n__has_include__ = cpp_lookup (r, DSC("__has_include__"));
840     s->n__has_include_next__ = cpp_lookup (r, DSC("__has_include_next__"));
841   }
842
843   old_state = r->state;
844   r->state.in_directive = 1;
845   r->state.prevent_expansion = 1;
846   r->state.angled_headers = 0;
847
848   /* Run through the carefully-saved macros, insert them.  */
849   for (i = 0; i < data->count; i++)
850     {
851       cpp_hashnode *h;
852       size_t namelen;
853       uchar *defn;
854
855       namelen = ustrcspn (data->defns[i], "( \n");
856       h = cpp_lookup (r, data->defns[i], namelen);
857       defn = data->defns[i] + namelen;
858
859       /* The PCH file is valid, so we know that if there is a definition
860          from the PCH file it must be the same as the one we had
861          originally, and so do not need to restore it.  */
862       if (h->type == NT_VOID)
863         {
864           if (cpp_push_buffer (r, defn, ustrchr (defn, '\n') - defn, true)
865               != NULL)
866             {
867               _cpp_clean_line (r);
868               if (!_cpp_create_definition (r, h))
869                 abort ();
870               _cpp_pop_buffer (r);
871             }
872           else
873             abort ();
874         }
875
876       free (data->defns[i]);
877     }
878   r->state = old_state;
879
880   _cpp_restore_pragma_names (r, data->saved_pragmas);
881
882   free (data);
883
884   if (deps_restore (r->deps, f, CPP_OPTION (r, restore_pch_deps) ? name : NULL)
885       != 0)
886     goto error;
887
888   if (! _cpp_read_file_entries (r, f))
889     goto error;
890
891   if (fread (&counter, sizeof (counter), 1, f) != 1)
892     goto error;
893
894   if (!r->counter)
895     r->counter = counter;
896
897   /* Read pushed macros. */
898   if (! _cpp_restore_pushed_macros (r, f))
899     goto error;
900   return 0;
901
902  error:
903   cpp_errno (r, CPP_DL_ERROR, "while reading precompiled header");
904   return -1;
905 }