diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/c-lex.c | 1 | ||||
-rw-r--r-- | gcc/c-pragma.c | 24 | ||||
-rw-r--r-- | gcc/c-pragma.h | 3 |
4 files changed, 35 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c9f2d4ecbb3..c17bf4e4866 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Sat Sep 18 11:52:43 1999 Richard Henderson <rth@cygnus.com> + + * c-pragma.c (mark_align_stack): New. + (init_pragma): New. + * c-pragma.h (init_pragma): Declare it. + * c-lex.c (init_parse): Call it. + Sat Sep 18 15:20:38 1999 Alexandre Oliva <oliva@lsd.ic.unicamp.br> * configure.in: Pick up thread library on Solaris/x86 just diff --git a/gcc/c-lex.c b/gcc/c-lex.c index c4619c4ef5d..bd171abe248 100644 --- a/gcc/c-lex.c +++ b/gcc/c-lex.c @@ -254,6 +254,7 @@ init_parse (filename) #endif init_lex (); + init_pragma (); return filename; } diff --git a/gcc/c-pragma.c b/gcc/c-pragma.c index c002587b4f1..ba0c8367390 100644 --- a/gcc/c-pragma.c +++ b/gcc/c-pragma.c @@ -512,3 +512,27 @@ handle_pragma_token (string, token) return 1; } #endif /* HANDLE_GENERIC_PRAGMAS */ + +#ifdef HANDLE_PRAGMA_PACK_PUSH_POP +static void +mark_align_stack (p) + void *p; +{ + align_stack *a = (align_stack *) p; + + while (a) + { + ggc_mark_tree (a->id); + a = a->prev; + } +} +#endif + +void +init_pragma () +{ +#ifdef HANDLE_PRAGMA_PACK_PUSH_POP + ggc_add_root (&alignment_stack, 1, sizeof(alignment_stack), + mark_align_stack); +#endif +} diff --git a/gcc/c-pragma.h b/gcc/c-pragma.h index bfe7c1fe50a..0fbf77cb2ac 100644 --- a/gcc/c-pragma.h +++ b/gcc/c-pragma.h @@ -98,4 +98,7 @@ enum pragma_state extern int handle_pragma_token PROTO((const char *, tree)); #endif /* HANDLE_GENERIC_PRAGMAS */ + +extern void init_pragma PROTO((void)); + #endif /* _C_PRAGMA_H */ |