Propagate the source location of a template's function_decl to the template_decl built out of it.

Propagate the source location of a template's function_decl to the
template_decl built out of it.  Without this, specializations
generated before the template was defined get the location of the
closing ')' instead of the location of the template's name, which can
produce inconsistent locations between translation units, which makes
gold's ODR checker unhappy.

	* gcc/cp/pt.c (build_template_decl): Copy the function_decl's source
	location to the new template_decl.
	* gcc/testsuite/g++.old-deja/g++.pt/crash60.C: Updated.
	* libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Updated.

From-SVN: r176845
This commit is contained in:
Jeffrey Yasskin 2011-07-27 18:38:48 +00:00 committed by Jeffrey Yasskin
parent f22cfb2e4e
commit ce77c22f1b
6 changed files with 24 additions and 10 deletions

View File

@ -1,3 +1,8 @@
2011-07-27 Jeffrey Yasskin <jyasskin@google.com>
* pt.c (build_template_decl): Copy the function_decl's
source location to the new template_decl.
2011-07-26 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/49776

View File

@ -4121,6 +4121,7 @@ build_template_decl (tree decl, tree parms, bool member_template_p)
tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
DECL_TEMPLATE_PARMS (tmpl) = parms;
DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
return tmpl;

View File

@ -1,3 +1,7 @@
2011-07-27 Jeffrey Yasskin <jyasskin@google.com>
* g++.old-deja/g++.pt/crash60.C: Updated.
2011-07-27 Jakub Jelinek <jakub@redhat.com>
PR target/49866

View File

@ -5,9 +5,9 @@
// We ICE'd rather than fail to instantiate.
template< typename SID, class SDR >
void k( SID sid, SDR* p,
void k( SID sid, SDR* p, // { dg-error "no type named 'T'" }
void (SDR::*)
( typename SID::T ) ); // { dg-error "no type named 'T'" }
( typename SID::T ) );
struct E { };
struct S { void f( int ); };

View File

@ -1,3 +1,7 @@
2011-07-27 Jeffrey Yasskin <jyasskin@google.com>
* testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Updated.
2011-07-25 Benjamin Kosnik <bkoz@redhat.com>
* include/std/array (at): Remove constexpr when -fno-exceptions.

View File

@ -44,16 +44,16 @@ main()
// { dg-warning "note" "" { target *-*-* } 370 }
// { dg-warning "note" "" { target *-*-* } 365 }
// { dg-warning "note" "" { target *-*-* } 357 }
// { dg-warning "note" "" { target *-*-* } 356 }
// { dg-warning "note" "" { target *-*-* } 1103 }
// { dg-warning "note" "" { target *-*-* } 1098 }
// { dg-warning "note" "" { target *-*-* } 1090 }
// { dg-warning "note" "" { target *-*-* } 1089 }
// { dg-warning "note" "" { target *-*-* } 485 }
// { dg-warning "note" "" { target *-*-* } 479 }
// { dg-warning "note" "" { target *-*-* } 469 }
// { dg-warning "note" "" { target *-*-* } 814 }
// { dg-warning "note" "" { target *-*-* } 1056 }
// { dg-warning "note" "" { target *-*-* } 1050 }
// { dg-warning "note" "" { target *-*-* } 342 }
// { dg-warning "note" "" { target *-*-* } 292 }
// { dg-warning "note" "" { target *-*-* } 468 }
// { dg-warning "note" "" { target *-*-* } 813 }
// { dg-warning "note" "" { target *-*-* } 1055 }
// { dg-warning "note" "" { target *-*-* } 1049 }
// { dg-warning "note" "" { target *-*-* } 341 }
// { dg-warning "note" "" { target *-*-* } 291 }
// { dg-warning "note" "" { target *-*-* } 224 }