Commit 38d34676 by Tom Tromey Committed by Tom Tromey

PR c++/32256, PR c++/32368:

gcc
	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.
gcc/testsuite
	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.

From-SVN: r129936
parent 9ae165a0
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
......@@ -3834,12 +3834,22 @@ DEF_VEC_ALLOC_P(function_p,heap);
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);
}
......@@ -3848,7 +3858,10 @@ push_cfun (struct function *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. */
......@@ -3922,7 +3935,11 @@ allocate_struct_function (tree fndecl)
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
// PR c++/32368
// { dg-options "-Wall -O" }
#include "pragma-system_header3.h"
int main()
{
return f();
}
#pragma GCC system_header
static inline int f()
{
int i;
return i;
}
// PR c++/32256
// { dg-options "-Wall" }
#include "pragma-system_header4.h"
void ok() { }
#pragma GCC system_header
int noreturn() { }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment