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> 2007-11-06 Douglas Gregor <doug.gregor@gmail.com>
PR c++/33977 PR c++/33977
...@@ -3834,12 +3834,22 @@ DEF_VEC_ALLOC_P(function_p,heap); ...@@ -3834,12 +3834,22 @@ DEF_VEC_ALLOC_P(function_p,heap);
static VEC(function_p,heap) *cfun_stack; 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. */ /* Push the current cfun onto the stack, and set cfun to new_cfun. */
void void
push_cfun (struct function *new_cfun) 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); 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); set_cfun (new_cfun);
} }
...@@ -3848,7 +3858,10 @@ push_cfun (struct function *new_cfun) ...@@ -3848,7 +3858,10 @@ push_cfun (struct function *new_cfun)
void void
pop_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. */ /* Return value of funcdef and increase it. */
...@@ -3922,7 +3935,11 @@ allocate_struct_function (tree fndecl) ...@@ -3922,7 +3935,11 @@ allocate_struct_function (tree fndecl)
void void
push_struct_function (tree fndecl) push_struct_function (tree fndecl)
{ {
if (cfun == NULL)
saved_in_system_header = in_system_header;
VEC_safe_push (function_p, heap, cfun_stack, cfun); VEC_safe_push (function_p, heap, cfun_stack, cfun);
if (fndecl)
in_system_header = DECL_IN_SYSTEM_HEADER (fndecl);
allocate_struct_function (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> 2007-11-06 Douglas Gregor <doug.gregor@gmail.com>
PR c++/33977 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