re PR c++/30500 (pragma GCC system_header vs templates)
2007-03-26 Paolo Carlini <pcarlini@suse.de> PR c++/30500 * pt.c (instantiate_decl): Set in_system_header. 2007-03-26 Paolo Carlini <pcarlini@suse.de> PR c++/30500 * g++.dg/warn/pragma-system_header1.C: New test. * g++.dg/warn/pragma-system_header2.C: New test. * g++.dg/warn/pragma-system_header1.h. New. * g++.dg/warn/pragma-system_header2.h. New. From-SVN: r123238
This commit is contained in:
parent
fa6338517f
commit
912291cac3
6 changed files with 43 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
2007-03-26 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
PR c++/30500
|
||||
* pt.c (instantiate_decl): Set in_system_header.
|
||||
|
||||
2007-03-22 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* cp-tree.h (current_tempalte_parms): Improve documentation.
|
||||
|
|
|
@ -13829,6 +13829,7 @@ instantiate_decl (tree d, int defer_ok,
|
|||
bool pattern_defined;
|
||||
int need_push;
|
||||
location_t saved_loc = input_location;
|
||||
int saved_in_system_header = in_system_header;
|
||||
bool external_p;
|
||||
|
||||
/* This function should only be used to instantiate templates for
|
||||
|
@ -13911,6 +13912,7 @@ instantiate_decl (tree d, int defer_ok,
|
|||
mark_definable (d);
|
||||
|
||||
input_location = DECL_SOURCE_LOCATION (d);
|
||||
in_system_header = DECL_IN_SYSTEM_HEADER (d);
|
||||
|
||||
/* If D is a member of an explicitly instantiated class template,
|
||||
and no definition is available, treat it like an implicit
|
||||
|
@ -14178,6 +14180,7 @@ instantiate_decl (tree d, int defer_ok,
|
|||
|
||||
out:
|
||||
input_location = saved_loc;
|
||||
in_system_header = saved_in_system_header;
|
||||
pop_deferring_access_checks ();
|
||||
pop_tinst_level ();
|
||||
|
||||
|
|
10
gcc/testsuite/g++.dg/warn/pragma-system_header1.C
Normal file
10
gcc/testsuite/g++.dg/warn/pragma-system_header1.C
Normal file
|
@ -0,0 +1,10 @@
|
|||
// PR c++/30500
|
||||
// { dg-options "-Wconversion" }
|
||||
|
||||
#include "pragma-system_header1.h"
|
||||
|
||||
void f()
|
||||
{
|
||||
g<int>();
|
||||
h<int>();
|
||||
}
|
7
gcc/testsuite/g++.dg/warn/pragma-system_header1.h
Normal file
7
gcc/testsuite/g++.dg/warn/pragma-system_header1.h
Normal file
|
@ -0,0 +1,7 @@
|
|||
#pragma GCC system_header
|
||||
|
||||
template <typename T>
|
||||
int g() { double d = 0.1; return d; }
|
||||
|
||||
template <typename T>
|
||||
T h() { double d = 0.1; return d; }
|
13
gcc/testsuite/g++.dg/warn/pragma-system_header2.C
Normal file
13
gcc/testsuite/g++.dg/warn/pragma-system_header2.C
Normal file
|
@ -0,0 +1,13 @@
|
|||
// PR c++/30500
|
||||
// { dg-options "-Wconversion" }
|
||||
|
||||
#include "pragma-system_header2.h"
|
||||
|
||||
void f()
|
||||
{
|
||||
g<int>();
|
||||
h<int>();
|
||||
}
|
||||
|
||||
// { dg-warning "conversion" "" { target *-*-* } 2 }
|
||||
// { dg-warning "conversion" "" { target *-*-* } 5 }
|
5
gcc/testsuite/g++.dg/warn/pragma-system_header2.h
Normal file
5
gcc/testsuite/g++.dg/warn/pragma-system_header2.h
Normal file
|
@ -0,0 +1,5 @@
|
|||
template <typename T>
|
||||
int g() { double d = 0.1; return d; }
|
||||
|
||||
template <typename T>
|
||||
T h() { double d = 0.1; return d; }
|
Loading…
Add table
Reference in a new issue