re PR c++/17829 (wrong error: call of overloaded function is ambiguous)
cp: PR c++/17829 * parser.c (cp_parser_postfix_expression): Inhibit Koenig when unqualified lookup finds a member function. testsuite: PR c++/17829 * g++.dg/lookup/koenig4.C: New. From-SVN: r88558
This commit is contained in:
parent
370f7a47be
commit
89d594a24d
4 changed files with 61 additions and 11 deletions
|
@ -1,3 +1,9 @@
|
|||
2004-10-05 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/17829
|
||||
* parser.c (cp_parser_postfix_expression): Inhibit Koenig when
|
||||
unqualified lookup finds a member function.
|
||||
|
||||
2004-10-04 Gabriel Dos Reis <gdr@integrable-solutions.net>
|
||||
|
||||
Convert diagnostics to use quoting flag q 4/n
|
||||
|
|
|
@ -4061,20 +4061,38 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p)
|
|||
koenig_p = false;
|
||||
if (idk == CP_ID_KIND_UNQUALIFIED)
|
||||
{
|
||||
if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
|
||||
{
|
||||
if (args)
|
||||
{
|
||||
koenig_p = true;
|
||||
postfix_expression
|
||||
= perform_koenig_lookup (postfix_expression, args);
|
||||
}
|
||||
else
|
||||
postfix_expression
|
||||
= unqualified_fn_lookup_error (postfix_expression);
|
||||
}
|
||||
/* We do not perform argument-dependent lookup if
|
||||
normal lookup finds a non-function, in accordance
|
||||
with the expected resolution of DR 218. */
|
||||
if (args
|
||||
&& (is_overloaded_fn (postfix_expression)
|
||||
|| TREE_CODE (postfix_expression) == IDENTIFIER_NODE))
|
||||
else if (args && is_overloaded_fn (postfix_expression))
|
||||
{
|
||||
koenig_p = true;
|
||||
postfix_expression
|
||||
= perform_koenig_lookup (postfix_expression, args);
|
||||
tree fn = get_first_fn (postfix_expression);
|
||||
|
||||
if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
|
||||
fn = OVL_CURRENT (TREE_OPERAND (fn, 0));
|
||||
|
||||
/* Only do argument dependent lookup if regular
|
||||
lookup does not find a set of member functions.
|
||||
[basic.lookup.koenig]/2a */
|
||||
if (!DECL_FUNCTION_MEMBER_P (fn))
|
||||
{
|
||||
koenig_p = true;
|
||||
postfix_expression
|
||||
= perform_koenig_lookup (postfix_expression, args);
|
||||
}
|
||||
}
|
||||
else if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
|
||||
postfix_expression
|
||||
= unqualified_fn_lookup_error (postfix_expression);
|
||||
}
|
||||
|
||||
if (TREE_CODE (postfix_expression) == COMPONENT_REF)
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2004-10-05 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/17829
|
||||
* g++.dg/lookup/koenig4.C: New.
|
||||
|
||||
2004-10-05 Gabriel Dos Reis <gdr@integrable-solutions.net>
|
||||
|
||||
* g++.dg/other/classkey1.C: Adjust quoting marks.
|
||||
|
@ -22219,7 +22224,7 @@ Thu Apr 27 15:58:18 MET DST 2000 Jan Hubicka <jh@suse.cz>
|
|||
|
||||
* gcc.c-torture/compile/labels-2.c: New test.
|
||||
|
||||
1999-12-27 Martin von Löwis <loewis@informatik.hu-berlin.de>
|
||||
1999-12-27 Martin von Löwis <loewis@informatik.hu-berlin.de>
|
||||
|
||||
* gcc.c-torture/execute/991227-1.c: New test.
|
||||
|
||||
|
@ -22227,7 +22232,7 @@ Thu Apr 27 15:58:18 MET DST 2000 Jan Hubicka <jh@suse.cz>
|
|||
|
||||
* g++.old-deja/g++.pt/instantiate6.C: Remove excess errors XFAIL.
|
||||
|
||||
1999-12-21 Martin von Löwis <loewis@informatik.hu-berlin.de>
|
||||
1999-12-21 Martin von Löwis <loewis@informatik.hu-berlin.de>
|
||||
|
||||
* gcc.c-torture/execute/991221-1.c: New test.
|
||||
|
||||
|
|
21
gcc/testsuite/g++.dg/lookup/koenig4.C
Normal file
21
gcc/testsuite/g++.dg/lookup/koenig4.C
Normal file
|
@ -0,0 +1,21 @@
|
|||
// { dg-do compile }
|
||||
|
||||
// Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
// Contributed by Nathan Sidwell 5 Oct 2004 <nathan@codesourcery.com>
|
||||
|
||||
// Origin: Wolfgang Bangerth <bangerth@dealii.org>
|
||||
// Incorrect koenig lookup
|
||||
|
||||
struct A {};
|
||||
|
||||
struct B {
|
||||
static void foo();
|
||||
static void bar(const A &);
|
||||
};
|
||||
|
||||
void bar(const A &){}
|
||||
|
||||
void B::foo () {
|
||||
A a;
|
||||
bar (a);
|
||||
}
|
Loading…
Add table
Reference in a new issue