From aad626f71c5a3a3eac7e2946fa1e89655c271bbb Mon Sep 17 00:00:00 2001 From: Kriang Lerdsuwanakij Date: Wed, 5 Nov 2003 14:37:57 +0000 Subject: [PATCH] re PR c++/11616 (Error message "instantiated from here" gives wrong location) PR c++/11616 * pt.c (instantiate_pending_templates): Save and restore input_location. * g++.dg/template/instantiate5.C: New test. From-SVN: r73269 --- gcc/cp/ChangeLog | 6 +++++ gcc/cp/pt.c | 2 ++ gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/g++.dg/template/instantiate5.C | 24 ++++++++++++++++++++ 4 files changed, 37 insertions(+) create mode 100644 gcc/testsuite/g++.dg/template/instantiate5.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c2eae499d3f..a9656c15d53 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +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 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" } -- 2.30.2