From 8a188e24900cfb30734df5e40cfb0e1ee88750b6 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Fri, 18 Oct 2002 08:09:58 +0000 Subject: [PATCH] class.c (add_method): Compare template parms too. cp: * class.c (add_method): Compare template parms too. testsuite: * g++.dg/overload/member2.C: New test. From-SVN: r58278 --- gcc/cp/ChangeLog | 4 +++ gcc/cp/class.c | 7 +++++ gcc/testsuite/ChangeLog | 4 +++ gcc/testsuite/g++.dg/overload/member2.C | 41 +++++++++++++++++++++++++ 4 files changed, 56 insertions(+) create mode 100644 gcc/testsuite/g++.dg/overload/member2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b6836eef407..e2a0976f7a1 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2002-10-17 Nathan Sidwell + + * class.c (add_method): Compare template parms too. + 2002-10-17 Mark Mitchell PR c++/7584 diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 90d7ef2c921..7c660980c57 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -950,6 +950,13 @@ add_method (type, method, error_p) && (TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms1))) != TYPE_QUALS (TREE_TYPE (TREE_VALUE (parms2))))) same = 0; + + /* For templates, the template parms must be identical. */ + if (TREE_CODE (fn) == TEMPLATE_DECL + && !comp_template_parms (DECL_TEMPLATE_PARMS (fn), + DECL_TEMPLATE_PARMS (method))) + same = 0; + if (! DECL_STATIC_FUNCTION_P (fn)) parms1 = TREE_CHAIN (parms1); if (! DECL_STATIC_FUNCTION_P (method)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f718424a935..20fda9f5999 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2002-10-17 Nathan Sidwell + + * g++.dg/overload/member2.C: New test. + 2002-10-17 Janis Johnson * g++.dg/README: Describe new compat directory. diff --git a/gcc/testsuite/g++.dg/overload/member2.C b/gcc/testsuite/g++.dg/overload/member2.C new file mode 100644 index 00000000000..b8914146f16 --- /dev/null +++ b/gcc/testsuite/g++.dg/overload/member2.C @@ -0,0 +1,41 @@ +// { dg-do run } + +// Copyright (C) 2001 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 17 Oct 2002 + +// PR 7676. We didn't notice template members were different. + +struct foo +{ + template + int bar() {return 1;} + + template + int bar() {return 2;} + +}; + +struct baz : foo +{ + using foo::bar; + template + int bar () {return 3;} +}; + +int main () +{ + baz b; + foo f; + + if (f.bar<1> () != 2) + return 1; + if (f.bar () != 1) + return 2; + + if (b.bar<1> () != 3) + return 1; + if (b.bar () != 1) + return 2; + + return 0; +} -- 2.30.2