+2007-11-06 Tom Tromey <tromey@redhat.com>
+
+ PR c++/32256, PR c++/32368:
+ * function.c (saved_in_system_header): New global.
+ (push_cfun): Save in_system_header.
+ (pop_cfun): Restore in_system_header.
+ (push_struct_function): Save in_system_header.
+
2007-11-06 Douglas Gregor <doug.gregor@gmail.com>
PR c++/33977
static VEC(function_p,heap) *cfun_stack;
+/* We save the value of in_system_header here when pushing the first
+ function on the cfun stack, and we restore it from here when
+ popping the last function. */
+
+static bool saved_in_system_header;
+
/* Push the current cfun onto the stack, and set cfun to new_cfun. */
void
push_cfun (struct function *new_cfun)
{
+ if (cfun == NULL)
+ saved_in_system_header = in_system_header;
VEC_safe_push (function_p, heap, cfun_stack, cfun);
+ if (new_cfun)
+ in_system_header = DECL_IN_SYSTEM_HEADER (new_cfun->decl);
set_cfun (new_cfun);
}
void
pop_cfun (void)
{
- set_cfun (VEC_pop (function_p, cfun_stack));
+ struct function *new_cfun = VEC_pop (function_p, cfun_stack);
+ in_system_header = ((new_cfun == NULL) ? saved_in_system_header
+ : DECL_IN_SYSTEM_HEADER (new_cfun->decl));
+ set_cfun (new_cfun);
}
/* Return value of funcdef and increase it. */
void
push_struct_function (tree fndecl)
{
+ if (cfun == NULL)
+ saved_in_system_header = in_system_header;
VEC_safe_push (function_p, heap, cfun_stack, cfun);
+ if (fndecl)
+ in_system_header = DECL_IN_SYSTEM_HEADER (fndecl);
allocate_struct_function (fndecl);
}
+2007-11-06 Tom Tromey <tromey@redhat.com>
+
+ PR c++/32368:
+ * g++.dg/warn/pragma-system_header3.h: New.
+ * g++.dg/warn/pragma-system_header3.C: New.
+
+ PR c++/32256:
+ * g++.dg/warn/pragma-system_header4.C: New.
+ * g++.dg/warn/pragma-system_header4.h: New.
+
2007-11-06 Douglas Gregor <doug.gregor@gmail.com>
PR c++/33977