From: lerdsuwa Date: Wed, 5 Nov 2003 14:37:57 +0000 (+0000) Subject: PR c++/11616 X-Git-Url: http://git.sourceforge.jp/view?a=commitdiff_plain;h=76c7f39df919be6dde5a11f205a9e6eda17aa0d1;p=pf3gnuchains%2Fgcc-fork.git PR c++/11616 * pt.c (instantiate_pending_templates): Save and restore input_location. * g++.dg/template/instantiate5.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@73269 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c2eae499d3f..a9656c15d53 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 2003-11-05 Kriang Lerdsuwanakij + PR c++/11616 + * pt.c (instantiate_pending_templates): Save and restore + input_location. + +2003-11-05 Kriang Lerdsuwanakij + PR c++/2019 * friend.c (add_friend): Don't display previous declaration in case of duplicate friend warning. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 600d2402f3e..e464af3d502 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -11037,6 +11037,7 @@ instantiate_pending_templates (void) tree last = NULL_TREE; int instantiated_something = 0; int reconsider; + location_t saved_loc = input_location; do { @@ -11111,6 +11112,7 @@ instantiate_pending_templates (void) } while (reconsider); + input_location = saved_loc; return instantiated_something; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 25f756a043a..bbff7c52667 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-11-05 Kriang Lerdsuwanakij + + PR c++/11616 + * g++.dg/template/instantiate5.C: New test. + 2003-11-03 Volker Reichelt PR c++/12726 diff --git a/gcc/testsuite/g++.dg/template/instantiate5.C b/gcc/testsuite/g++.dg/template/instantiate5.C new file mode 100644 index 00000000000..8d076356294 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/instantiate5.C @@ -0,0 +1,24 @@ +// { dg-do compile } + +// Origin: Volker Reichelt + +// PR c++/11616: Incorrect line number in diagnostics + +template struct A +{ + static const int i=0; +}; + +int baz() { return A<0>::i; } + +struct B +{ + static void foo (int); // { dg-error "candidates" } +}; + +template struct C +{ + virtual void bar() const { T::foo(); } // { dg-error "no matching function" } +}; + +C c; // { dg-error "instantiated" }