re PR c++/28274 (Redeclaration with extra default argument doesn't work)

PR c++/28274
        * name-lookup.c (pushdecl_maybe_friend): Check default args later.

From-SVN: r145042
This commit is contained in:
Jason Merrill 2009-03-24 18:26:21 -04:00 committed by Jason Merrill
parent e6142656cb
commit f7cbd40ea6
4 changed files with 23 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2009-03-24 Jason Merrill <jason@redhat.com>
PR c++/28274
* name-lookup.c (pushdecl_maybe_friend): Check default args later.
2009-03-23 Jakub Jelinek <jakub@redhat.com>
PR c/39495

View File

@ -813,9 +813,6 @@ pushdecl_maybe_friend (tree x, bool is_friend)
}
}
if (TREE_CODE (x) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (x))
check_default_args (x);
check_template_shadow (x);
/* If this is a function conjured up by the back end, massage it
@ -826,11 +823,10 @@ pushdecl_maybe_friend (tree x, bool is_friend)
SET_DECL_LANGUAGE (x, lang_c);
}
t = x;
if (DECL_NON_THUNK_FUNCTION_P (x) && ! DECL_FUNCTION_MEMBER_P (x))
{
t = push_overloaded_decl (x, PUSH_LOCAL, is_friend);
if (t != x)
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
if (!namespace_bindings_p ())
/* We do not need to create a binding for this name;
push_overloaded_decl will have already done so if
@ -842,9 +838,14 @@ pushdecl_maybe_friend (tree x, bool is_friend)
t = push_overloaded_decl (x, PUSH_GLOBAL, is_friend);
if (t == x)
add_decl_to_level (x, NAMESPACE_LEVEL (CP_DECL_CONTEXT (t)));
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
}
if (TREE_CODE (x) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (x))
check_default_args (x);
if (t != x || DECL_FUNCTION_TEMPLATE_P (t))
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
/* If declaring a type as a typedef, copy the type (unless we're
at line 0), and install this TYPE_DECL as the new type's typedef
name. See the extensive comment in ../c-decl.c (pushdecl). */

View File

@ -1,3 +1,8 @@
2009-03-24 Jason Merrill <jason@redhat.com>
PR c++/28274
* g++.dg/parse/defarg14.C: New test.
2009-03-24 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/39528

View File

@ -0,0 +1,6 @@
// PR c++/28274
extern "C" {
void foo (int i, int j = 6);
void foo (int i = 4, int j);
}