diff options
Diffstat (limited to 'gcc')
| -rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/cp/decl2.c | 22 | ||||
| -rw-r--r-- | gcc/testsuite/g++.old-deja/g++.ns/koenig9.C | 13 |
3 files changed, 32 insertions, 8 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 27126a5..82ceceb 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2000-08-11 Theodore Papadopoulo <Theodore.Papadopoulo@sophia.inria.fr> + + * decl2.c (add_function): Reorganize. + (arg_assoc): Do not consider function template decls. + 2000-08-11 Jason Merrill <jason@redhat.com> * decl.c (lookup_name_real): Don't forget the TYPENAME_TYPE we're diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 7422be1..7bdd34c 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -4791,10 +4791,11 @@ add_function (k, fn) case. */ /* We must find only functions, or exactly one non-function. */ - if (k->functions && is_overloaded_fn (k->functions) - && is_overloaded_fn (fn)) + if (!k->functions) + k->functions = fn; + else if (is_overloaded_fn (k->functions) && is_overloaded_fn (fn)) k->functions = build_overload (fn, k->functions); - else if (k->functions) + else { tree f1 = OVL_CURRENT (k->functions); tree f2 = fn; @@ -4807,8 +4808,7 @@ add_function (k, fn) cp_error (" in call to `%D'", k->name); return 1; } - else - k->functions = fn; + return 0; } @@ -5063,9 +5063,15 @@ arg_assoc (k, n) { my_friendly_assert (TREE_CODE (n) == OVERLOAD, 980715); - for (; n; n = OVL_CHAIN (n)) - if (arg_assoc_type (k, TREE_TYPE (OVL_FUNCTION (n)))) - return 1; + for (; n; n = OVL_CHAIN (n)) + { + /* Do not consider function template decls during Koenig lookup. */ + + tree fn = OVL_FUNCTION (n); + if (!DECL_FUNCTION_TEMPLATE_P (fn) + && arg_assoc_type (k, TREE_TYPE (fn))) + return 1; + } } return 0; diff --git a/gcc/testsuite/g++.old-deja/g++.ns/koenig9.C b/gcc/testsuite/g++.old-deja/g++.ns/koenig9.C new file mode 100644 index 0000000..b8014a5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.ns/koenig9.C @@ -0,0 +1,13 @@ +// Build don't link: + +// Copyright (C) 2000 Free Software Foundation, Inc. +// Contributed by Theodore.Papadopoulo 23 Jun 2000 <Theodore.Papadopoulo@sophia.inria.fr> + +#include <algorithm> + +void foo(const char*,...); + +inline void +bar() { + foo("",count); // ERROR - multiple overloaded count functions +} |
