From: Shujing Zhao Date: Fri, 30 Apr 2010 06:16:26 +0000 (+0000) Subject: re PR c++/43779 (Parts of message not available for translation) X-Git-Tag: releases/gcc-4.6.0~7571 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8cdea6ab132a3624569e3dd32eabff4d84fb5a25;p=thirdparty%2Fgcc.git re PR c++/43779 (Parts of message not available for translation) 2010-04-30 Shujing Zhao PR c++/43779 * typeck.c (warn_args_num): New function. (convert_arguments): Use warn_args_num to print the diagnostic messages. From-SVN: r158919 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 58815e9b86ae..6a41a03a2c77 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2010-04-30 Shujing Zhao + + PR c++/43779 + * typeck.c (warn_args_num): New function. + (convert_arguments): Use warn_args_num to print the diagnostic + messages. + 2010-04-29 Fabien Chêne PR c++/43890 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index bc699a18d96a..46bc34dbbb6e 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -61,6 +61,7 @@ static void casts_away_constness_r (tree *, tree *); static bool casts_away_constness (tree, tree); static void maybe_warn_about_returning_address_of_local (tree); static tree lookup_destructor (tree, tree, tree); +static void warn_args_num (location_t, tree, bool); static int convert_arguments (tree, VEC(tree,gc) **, tree, int, tsubst_flags_t); @@ -3286,6 +3287,44 @@ cp_build_function_call_vec (tree function, VEC(tree,gc) **params, return ret; } +/* Subroutine of convert_arguments. + Warn about wrong number of args are genereted. */ + +static void +warn_args_num (location_t loc, tree fndecl, bool too_many_p) +{ + if (fndecl) + { + if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE) + { + if (DECL_NAME (fndecl) == NULL_TREE + || IDENTIFIER_HAS_TYPE_VALUE (DECL_NAME (fndecl))) + error_at (loc, + too_many_p + ? G_("too many arguments to constructor %q#D") + : G_("too few arguments to constructor %q#D"), + fndecl); + else + error_at (loc, + too_many_p + ? G_("too many arguments to member function %q#D") + : G_("too few arguments to member function %q#D"), + fndecl); + } + else + error_at (loc, + too_many_p + ? G_("too many arguments to function %q#D") + : G_("too few arguments to function %q#D"), + fndecl); + inform (DECL_SOURCE_LOCATION (fndecl), + "declared here"); + } + else + error_at (loc, too_many_p ? G_("too many arguments to function") + : G_("too few arguments to function")); +} + /* Convert the actual parameter expressions in the list VALUES to the types in the list TYPELIST. The converted expressions are stored back in the VALUES vector. @@ -3307,26 +3346,11 @@ convert_arguments (tree typelist, VEC(tree,gc) **values, tree fndecl, int flags, tsubst_flags_t complain) { tree typetail; - const char *called_thing = 0; unsigned int i; /* Argument passing is always copy-initialization. */ flags |= LOOKUP_ONLYCONVERTING; - if (fndecl) - { - if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE) - { - if (DECL_NAME (fndecl) == NULL_TREE - || IDENTIFIER_HAS_TYPE_VALUE (DECL_NAME (fndecl))) - called_thing = "constructor"; - else - called_thing = "member function"; - } - else - called_thing = "function"; - } - for (i = 0, typetail = typelist; i < VEC_length (tree, *values); i++) @@ -3341,15 +3365,7 @@ convert_arguments (tree typelist, VEC(tree,gc) **values, tree fndecl, { if (complain & tf_error) { - if (fndecl) - { - error_at (input_location, "too many arguments to %s %q#D", - called_thing, fndecl); - inform (DECL_SOURCE_LOCATION (fndecl), - "declared here"); - } - else - error ("too many arguments to function"); + warn_args_num (input_location, fndecl, /*too_many_p=*/true); return i; } else @@ -3454,17 +3470,7 @@ convert_arguments (tree typelist, VEC(tree,gc) **values, tree fndecl, else { if (complain & tf_error) - { - if (fndecl) - { - error_at (input_location, "too few arguments to %s %q#D", - called_thing, fndecl); - inform (DECL_SOURCE_LOCATION (fndecl), - "declared here"); - } - else - error ("too few arguments to function"); - } + warn_args_num (input_location, fndecl, /*too_many_p=*/false); return -1; } }