Propagate the source location of a template's function_decl to the template_decl...
authorJeffrey Yasskin <jyasskin@google.com>
Wed, 27 Jul 2011 18:38:48 +0000 (18:38 +0000)
committerJeffrey Yasskin <jyasskin@gcc.gnu.org>
Wed, 27 Jul 2011 18:38:48 +0000 (18:38 +0000)
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

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.old-deja/g++.pt/crash60.C
libstdc++-v3/ChangeLog
libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc

index d169ed14a33dc77643b44e0c498a8388a638b8e5..653a0ab4d49fd51c261c352a60001f625fb21cbf 100644 (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
index 178685c40d48234eea5918b5f6ab7129d9199ba8..b9e09af7e2638c3be18be206c66b60d9bdea3dc5 100644 (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;
index a5fd846f32eeaac1b4c5ac4ce4742ccc8b7a2b1e..952c3ca1136e54353a1a00124ded37d776f96828 100644 (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
index 747af9b409036d32e2b7b7a95c03754344aec61b..1be4678e1f4cc75feebf9edec1dc0bc8db22e170 100644 (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 ); };
index 38833b71e76c373a4e6aa3f117c25af75384b599..dd6723fb3f80cd901dc7be0f58f85c9da8c2ed8a 100644 (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.
index df18712f73b5ba38592423aa1ced86e0a727ba46..6eecc2d2aeb72c5ff98204f949d2193bc8ca3a90 100644 (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 }