summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/c-lex.c1
-rw-r--r--gcc/c-pragma.c24
-rw-r--r--gcc/c-pragma.h3
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 */