Commit 8cdea6ab by Shujing Zhao Committed by Shujing Zhao

re PR c++/43779 (Parts of message not available for translation)

2010-04-30  Shujing Zhao  <pearly.zhao@oracle.com>

        PR c++/43779
        * typeck.c (warn_args_num): New function.
        (convert_arguments): Use warn_args_num to print the diagnostic
        messages.

From-SVN: r158919
parent 10ab8f62
2010-04-30 Shujing Zhao <pearly.zhao@oracle.com>
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 <fabien.chene@gmail.com> 2010-04-29 Fabien Chêne <fabien.chene@gmail.com>
PR c++/43890 PR c++/43890
......
...@@ -61,6 +61,7 @@ static void casts_away_constness_r (tree *, tree *); ...@@ -61,6 +61,7 @@ static void casts_away_constness_r (tree *, tree *);
static bool casts_away_constness (tree, tree); static bool casts_away_constness (tree, tree);
static void maybe_warn_about_returning_address_of_local (tree); static void maybe_warn_about_returning_address_of_local (tree);
static tree lookup_destructor (tree, tree, 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, static int convert_arguments (tree, VEC(tree,gc) **, tree, int,
tsubst_flags_t); tsubst_flags_t);
...@@ -3286,6 +3287,44 @@ cp_build_function_call_vec (tree function, VEC(tree,gc) **params, ...@@ -3286,6 +3287,44 @@ cp_build_function_call_vec (tree function, VEC(tree,gc) **params,
return ret; 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 /* Convert the actual parameter expressions in the list VALUES to the
types in the list TYPELIST. The converted expressions are stored types in the list TYPELIST. The converted expressions are stored
back in the VALUES vector. back in the VALUES vector.
...@@ -3307,26 +3346,11 @@ convert_arguments (tree typelist, VEC(tree,gc) **values, tree fndecl, ...@@ -3307,26 +3346,11 @@ convert_arguments (tree typelist, VEC(tree,gc) **values, tree fndecl,
int flags, tsubst_flags_t complain) int flags, tsubst_flags_t complain)
{ {
tree typetail; tree typetail;
const char *called_thing = 0;
unsigned int i; unsigned int i;
/* Argument passing is always copy-initialization. */ /* Argument passing is always copy-initialization. */
flags |= LOOKUP_ONLYCONVERTING; 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; for (i = 0, typetail = typelist;
i < VEC_length (tree, *values); i < VEC_length (tree, *values);
i++) i++)
...@@ -3341,15 +3365,7 @@ convert_arguments (tree typelist, VEC(tree,gc) **values, tree fndecl, ...@@ -3341,15 +3365,7 @@ convert_arguments (tree typelist, VEC(tree,gc) **values, tree fndecl,
{ {
if (complain & tf_error) if (complain & tf_error)
{ {
if (fndecl) warn_args_num (input_location, fndecl, /*too_many_p=*/true);
{
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");
return i; return i;
} }
else else
...@@ -3454,17 +3470,7 @@ convert_arguments (tree typelist, VEC(tree,gc) **values, tree fndecl, ...@@ -3454,17 +3470,7 @@ convert_arguments (tree typelist, VEC(tree,gc) **values, tree fndecl,
else else
{ {
if (complain & tf_error) if (complain & tf_error)
{ warn_args_num (input_location, fndecl, /*too_many_p=*/false);
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");
}
return -1; return -1;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment