From 9845b52bfbbfe165725ff96f9802530bbc26d007 Mon Sep 17 00:00:00 2001 From: Theodore Papadopoulo Date: Sat, 12 Aug 2000 03:30:06 +0200 Subject: [PATCH] decl2.c (add_function): Reorganize. * decl2.c (add_function): Reorganize. (arg_assoc): Do not consider function template decls. From-SVN: r35653 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/decl2.c | 22 +++++++++++++-------- gcc/testsuite/g++.old-deja/g++.ns/koenig9.C | 13 ++++++++++++ 3 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/g++.old-deja/g++.ns/koenig9.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 27126a5b297..82ceceb9c04 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2000-08-11 Theodore Papadopoulo + + * decl2.c (add_function): Reorganize. + (arg_assoc): Do not consider function template decls. + 2000-08-11 Jason Merrill * 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 7422be17761..7bdd34c0008 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 00000000000..b8014a57fa3 --- /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 + +#include + +void foo(const char*,...); + +inline void +bar() { + foo("",count); // ERROR - multiple overloaded count functions +}