From: Joseph Myers Date: Tue, 27 Jul 2010 14:43:31 +0000 (+0100) Subject: common.opt (o): Add MissingArgError. X-Git-Tag: releases/gcc-4.6.0~5402 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=61ff2bdc6c2bc3f08a5e45aeb57e48ec21604e0a;p=thirdparty%2Fgcc.git common.opt (o): Add MissingArgError. * common.opt (o): Add MissingArgError. * doc/options.texi (MissingArgError): Document. * hooks.c (hook_bool_constcharptr_size_t_false): Remove. * hooks.h (hook_bool_constcharptr_size_t_false): Remove. * langhooks-def.h (LANG_HOOKS_MISSING_ARGUMENT): Remove. (LANG_HOOKS_INITIALIZER): Remove missing_argument hook initializer. * langhooks.h (struct lang_hooks): Remove missing_argument. * optc-gen.awk: Handle MissingArgError and output new structure field initializers. * opts.c (read_cmdline_option): Use missing_argument_error field instead of missing_argument langhook. * opts.h (struct cl_option): Add missing_argument_error field. * system.h (LANG_HOOKS_MISSING_ARGUMENT): Poison. c-family: * c-common.h (c_common_missing_argument): Remove. * c-opts.c (c_common_missing_argument): Remove. * c.opt (A, D, F, I, MD, MMD, MQ, MT, U, fconstant-string-class=, idirafter, imacros, include, isysroot, isystem, iquote): Add MissingArgError. * c-objc-common.h (LANG_HOOKS_MISSING_ARGUMENT): Remove. cp: * cp-objcp-common.h (LANG_HOOKS_MISSING_ARGUMENT): Remove. po: * exgettext: Also extract MissingArgError texts from .opt files. From-SVN: r162571 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9b04483a64f8..ddbe6cccb342 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,20 @@ +2010-07-27 Joseph Myers + + * common.opt (o): Add MissingArgError. + * doc/options.texi (MissingArgError): Document. + * hooks.c (hook_bool_constcharptr_size_t_false): Remove. + * hooks.h (hook_bool_constcharptr_size_t_false): Remove. + * langhooks-def.h (LANG_HOOKS_MISSING_ARGUMENT): Remove. + (LANG_HOOKS_INITIALIZER): Remove missing_argument hook + initializer. + * langhooks.h (struct lang_hooks): Remove missing_argument. + * optc-gen.awk: Handle MissingArgError and output new structure + field initializers. + * opts.c (read_cmdline_option): Use missing_argument_error field + instead of missing_argument langhook. + * opts.h (struct cl_option): Add missing_argument_error field. + * system.h (LANG_HOOKS_MISSING_ARGUMENT): Poison. + 2010-07-27 Iain Sandoe PR target/29090 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 7007582bb9d1..17bd6ab56f5f 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,12 @@ +2010-07-27 Joseph Myers + + * c-common.h (c_common_missing_argument): Remove. + * c-opts.c (c_common_missing_argument): Remove. + * c.opt (A, D, F, I, MD, MMD, MQ, MT, U, fconstant-string-class=, + idirafter, imacros, include, isysroot, isystem, iquote): Add + MissingArgError. + * c-objc-common.h (LANG_HOOKS_MISSING_ARGUMENT): Remove. + 2010-07-27 Joseph Myers * c-common.h (c_common_option_lang_mask, diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index df9cf759a5a7..b92fef8f04d4 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -659,7 +659,6 @@ extern tree handle_format_attribute (tree *, tree, tree, int, bool *); extern tree handle_format_arg_attribute (tree *, tree, tree, int, bool *); extern bool attribute_takes_identifier_p (const_tree); extern int c_common_handle_option (size_t code, const char *arg, int value, int kind); -extern bool c_common_missing_argument (const char *opt, size_t code); extern tree c_common_type_for_mode (enum machine_mode, int); extern tree c_common_type_for_size (unsigned int, int); extern tree c_common_fixed_point_type_for_size (unsigned int, unsigned int, diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c index ab22cf993b80..38c996bfea03 100644 --- a/gcc/c-family/c-opts.c +++ b/gcc/c-family/c-opts.c @@ -135,59 +135,6 @@ static struct deferred_opt static const unsigned int c_family_lang_mask = (CL_C | CL_CXX | CL_ObjC | CL_ObjCXX); -/* Complain that switch CODE expects an argument but none was - provided. OPT was the command-line option. Return FALSE to get - the default message in opts.c, TRUE if we provide a specialized - one. */ -bool -c_common_missing_argument (const char *opt, size_t code) -{ - switch (code) - { - default: - /* Pick up the default message. */ - return false; - - case OPT_fconstant_string_class_: - error ("no class name specified with %qs", opt); - break; - - case OPT_A: - error ("assertion missing after %qs", opt); - break; - - case OPT_D: - case OPT_U: - error ("macro name missing after %qs", opt); - break; - - case OPT_F: - case OPT_I: - case OPT_idirafter: - case OPT_isysroot: - case OPT_isystem: - case OPT_iquote: - error ("missing path after %qs", opt); - break; - - case OPT_MF: - case OPT_MD: - case OPT_MMD: - case OPT_include: - case OPT_imacros: - case OPT_o: - error ("missing filename after %qs", opt); - break; - - case OPT_MQ: - case OPT_MT: - error ("missing makefile target after %qs", opt); - break; - } - - return true; -} - /* Defer option CODE with argument ARG. */ static void defer_opt (enum opt_code code, const char *arg) diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index ade444a8dccb..9d23b3d6f00d 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -38,7 +38,7 @@ ObjC++ C ObjC C++ ObjC++ Joined Separate A -C ObjC C++ ObjC++ Joined Separate +C ObjC C++ ObjC++ Joined Separate MissingArgError(assertion missing after %qs) -A= Assert the to . Putting '-' before disables the to C @@ -50,14 +50,14 @@ C ObjC C++ ObjC++ Do not discard comments in macro expansions D -C ObjC C++ ObjC++ Joined Separate +C ObjC C++ ObjC++ Joined Separate MissingArgError(macro name missing after %qs) -D[=] Define a with as its value. If just is given, is taken to be 1 E C ObjC C++ ObjC++ Undocumented Var(flag_preprocess_only) F -C ObjC C++ ObjC++ Joined Separate +C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after %qs) -F Add to the end of the main framework include path H @@ -65,7 +65,7 @@ C ObjC C++ ObjC++ Print the name of header files as they are used I -C ObjC C++ ObjC++ Joined Separate +C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after %qs) -I Add to the end of the main include path M @@ -73,11 +73,11 @@ C ObjC C++ ObjC++ Generate make dependencies MD -C ObjC C++ ObjC++ Separate +C ObjC C++ ObjC++ Separate MissingArgError(missing filename after %qs) Generate make dependencies and compile MF -C ObjC C++ ObjC++ Joined Separate +C ObjC C++ ObjC++ Joined Separate MissingArgError(missing filename after %qs) -MF Write dependency output to the given file MG @@ -89,7 +89,7 @@ C ObjC C++ ObjC++ Like -M but ignore system header files MMD -C ObjC C++ ObjC++ Separate +C ObjC C++ ObjC++ Separate MissingArgError(missing filename after %qs) Like -MD but ignore system header files MP @@ -97,11 +97,11 @@ C ObjC C++ ObjC++ Generate phony targets for all headers MQ -C ObjC C++ ObjC++ Joined Separate +C ObjC C++ ObjC++ Joined Separate MissingArgError(missing makefile target after %qs) -MQ Add a MAKE-quoted target MT -C ObjC C++ ObjC++ Joined Separate +C ObjC C++ ObjC++ Joined Separate MissingArgError(missing makefile target after %qs) -MT Add an unquoted target P @@ -109,7 +109,7 @@ C ObjC C++ ObjC++ Do not generate #line directives U -C ObjC C++ ObjC++ Joined Separate +C ObjC C++ ObjC++ Joined Separate MissingArgError(macro name missing after %qs) -U Undefine Wabi @@ -564,7 +564,7 @@ C++ ObjC++ Var(flag_conserve_space) Reduce the size of object files fconstant-string-class= -ObjC ObjC++ Joined +ObjC ObjC++ Joined MissingArgError(no class name specified with %qs) -fconst-string-class= Use class for constant strings fdeduce-init-list @@ -886,11 +886,11 @@ C ObjC C++ ObjC++ Joined -femit-struct-debug-detailed= Detailed reduced debug info for structs idirafter -C ObjC C++ ObjC++ Joined Separate +C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after %qs) -idirafter Add to the end of the system include path imacros -C ObjC C++ ObjC++ Joined Separate +C ObjC C++ ObjC++ Joined Separate MissingArgError(missing filename after %qs) -imacros Accept definition of macros in imultilib @@ -898,7 +898,7 @@ C ObjC C++ ObjC++ Joined Separate -imultilib Set to be the multilib include subdirectory include -C ObjC C++ ObjC++ Joined Separate +C ObjC C++ ObjC++ Joined Separate MissingArgError(missing filename after %qs) -include Include the contents of before other files iprefix @@ -906,15 +906,15 @@ C ObjC C++ ObjC++ Joined Separate -iprefix Specify as a prefix for next two options isysroot -C ObjC C++ ObjC++ Joined Separate +C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after %qs) -isysroot Set to be the system root directory isystem -C ObjC C++ ObjC++ Joined Separate +C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after %qs) -isystem Add to the start of the system include path iquote -C ObjC C++ ObjC++ Joined Separate +C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after %qs) -iquote Add to the end of the quote include path iwithprefix diff --git a/gcc/c-objc-common.h b/gcc/c-objc-common.h index c2b5ffab86ac..4bc5bb38a2ac 100644 --- a/gcc/c-objc-common.h +++ b/gcc/c-objc-common.h @@ -39,8 +39,6 @@ along with GCC; see the file COPYING3. If not see #define LANG_HOOKS_INITIALIZE_DIAGNOSTICS c_initialize_diagnostics #undef LANG_HOOKS_HANDLE_OPTION #define LANG_HOOKS_HANDLE_OPTION c_common_handle_option -#undef LANG_HOOKS_MISSING_ARGUMENT -#define LANG_HOOKS_MISSING_ARGUMENT c_common_missing_argument #undef LANG_HOOKS_POST_OPTIONS #define LANG_HOOKS_POST_OPTIONS c_common_post_options #undef LANG_HOOKS_GET_ALIAS_SET diff --git a/gcc/common.opt b/gcc/common.opt index 41a9838f481e..59ab3b1b3412 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -1584,7 +1584,7 @@ Common Joined Var(plugindir_string) Init(0) -iplugindir= Set to be the default plugin directory o -Common Joined Separate +Common Joined Separate MissingArgError(missing filename after %qs) -o Place output into p diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7829c5b9a7b7..35416869926a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2010-07-27 Joseph Myers + + * cp-objcp-common.h (LANG_HOOKS_MISSING_ARGUMENT): Remove. + 2010-07-27 Joseph Myers * cp-objcp-common.c (cxx_initialize_diagnostics): First call diff --git a/gcc/cp/cp-objcp-common.h b/gcc/cp/cp-objcp-common.h index 5e26b335ca50..2391faf2239e 100644 --- a/gcc/cp/cp-objcp-common.h +++ b/gcc/cp/cp-objcp-common.h @@ -53,8 +53,6 @@ extern bool cp_function_decl_explicit_p (tree decl); #define LANG_HOOKS_HANDLE_OPTION c_common_handle_option #undef LANG_HOOKS_HANDLE_FILENAME #define LANG_HOOKS_HANDLE_FILENAME c_common_handle_filename -#undef LANG_HOOKS_MISSING_ARGUMENT -#define LANG_HOOKS_MISSING_ARGUMENT c_common_missing_argument #undef LANG_HOOKS_POST_OPTIONS #define LANG_HOOKS_POST_OPTIONS c_common_post_options #undef LANG_HOOKS_GET_ALIAS_SET diff --git a/gcc/doc/options.texi b/gcc/doc/options.texi index 284ea49cdfe8..b14b2b497fa6 100644 --- a/gcc/doc/options.texi +++ b/gcc/doc/options.texi @@ -1,4 +1,4 @@ -@c Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 +@c Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 @c Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. @@ -135,6 +135,14 @@ it will be part of the same @code{argv} entry as the option itself. This property cannot be used alongside @code{Joined} or @code{Separate}. +@item MissingArgError(@var{message}) +For an option marked @code{Joined} or @code{Separate}, the message +@var{message} will be used as an error message if the mandatory +argument is missing; for options without @code{MissingArgError}, a +generic error message is used. @var{message} should contain a single +@samp{%qs} format, which will be used to format the name of the option +passed. + @item UInteger The option's argument is a non-negative integer. The option parser will check and convert the argument before passing it to the relevant diff --git a/gcc/hooks.c b/gcc/hooks.c index 355509ad7b9d..94d045f03704 100644 --- a/gcc/hooks.c +++ b/gcc/hooks.c @@ -118,13 +118,6 @@ hook_bool_const_tree_hwi_hwi_const_tree_true (const_tree a ATTRIBUTE_UNUSED, return true; } -bool -hook_bool_constcharptr_size_t_false (const char *a ATTRIBUTE_UNUSED, - size_t b ATTRIBUTE_UNUSED) -{ - return false; -} - bool hook_bool_size_t_constcharptr_int_true (size_t a ATTRIBUTE_UNUSED, const char *b ATTRIBUTE_UNUSED, diff --git a/gcc/hooks.h b/gcc/hooks.h index db1da30398d9..52e4d84ce78a 100644 --- a/gcc/hooks.h +++ b/gcc/hooks.h @@ -48,7 +48,6 @@ extern bool hook_bool_const_tree_hwi_hwi_const_tree_true (const_tree, extern bool hook_bool_rtx_false (rtx); extern bool hook_bool_uintp_uintp_false (unsigned int *, unsigned int *); extern bool hook_bool_rtx_int_int_intp_bool_false (rtx, int, int, int *, bool); -extern bool hook_bool_constcharptr_size_t_false (const char *, size_t); extern bool hook_bool_size_t_constcharptr_int_true (size_t, const char *, int); extern bool hook_bool_tree_tree_false (tree, tree); extern bool hook_bool_tree_tree_true (tree, tree); diff --git a/gcc/langhooks-def.h b/gcc/langhooks-def.h index 504fdad59204..1b7cebfb10ea 100644 --- a/gcc/langhooks-def.h +++ b/gcc/langhooks-def.h @@ -90,7 +90,6 @@ extern void lhd_omp_firstprivatize_type_sizes (struct gimplify_omp_ctx *, #define LANG_HOOKS_INITIALIZE_DIAGNOSTICS lhd_initialize_diagnostics #define LANG_HOOKS_COMPLAIN_WRONG_LANG_P lhd_complain_wrong_lang_p #define LANG_HOOKS_HANDLE_OPTION hook_int_size_t_constcharptr_int_0 -#define LANG_HOOKS_MISSING_ARGUMENT hook_bool_constcharptr_size_t_false #define LANG_HOOKS_POST_OPTIONS lhd_post_options #define LANG_HOOKS_MISSING_NORETURN_OK_P hook_bool_tree_true #define LANG_HOOKS_GET_ALIAS_SET lhd_get_alias_set @@ -268,7 +267,6 @@ extern void lhd_end_section (void); LANG_HOOKS_INITIALIZE_DIAGNOSTICS, \ LANG_HOOKS_COMPLAIN_WRONG_LANG_P, \ LANG_HOOKS_HANDLE_OPTION, \ - LANG_HOOKS_MISSING_ARGUMENT, \ LANG_HOOKS_POST_OPTIONS, \ LANG_HOOKS_INIT, \ LANG_HOOKS_FINISH, \ diff --git a/gcc/langhooks.h b/gcc/langhooks.h index 4702d143daad..6c9f80dec4b8 100644 --- a/gcc/langhooks.h +++ b/gcc/langhooks.h @@ -298,10 +298,6 @@ struct lang_hooks valid and should not be treated as language-independent too. */ int (*handle_option) (size_t code, const char *arg, int value, int kind); - /* Return false to use the default complaint about a missing - argument, otherwise output a complaint and return true. */ - bool (*missing_argument) (const char *opt, size_t code); - /* Called when all command line options have been parsed to allow further processing and initialization diff --git a/gcc/optc-gen.awk b/gcc/optc-gen.awk index 60211df2de16..78741fc8743e 100644 --- a/gcc/optc-gen.awk +++ b/gcc/optc-gen.awk @@ -194,6 +194,12 @@ for (i = 0; i < n_opts; i++) { else hlp = quote help[i] quote; + missing_arg_error = opt_args("MissingArgError", flags[i]) + if (missing_arg_error == "") + missing_arg_error = "0" + else + missing_arg_error = quote missing_arg_error quote + neg = opt_args("Negative", flags[i]); if (neg != "") idx = indices[neg] @@ -209,8 +215,9 @@ for (i = 0; i < n_opts; i++) { } # Split the printf after %u to work around an ia64-hp-hpux11.23 # awk bug. - printf(" { %c-%s%c,\n %s,\n %s, %u,", - quote, opts[i], quote, hlp, back_chain[i], len) + printf(" { %c-%s%c,\n %s,\n %s,\n %s, %u,", + quote, opts[i], quote, hlp, missing_arg_error, + back_chain[i], len) printf(" %d,\n", idx) condition = opt_args("Condition", flags[i]) cl_flags = switch_flags(flags[i]) diff --git a/gcc/opts.c b/gcc/opts.c index 2016ed4d4411..12eb40a451a4 100644 --- a/gcc/opts.c +++ b/gcc/opts.c @@ -547,7 +547,9 @@ read_cmdline_option (struct cl_decoded_option *decoded, if (decoded->errors & CL_ERR_MISSING_ARG) { - if (!lang_hooks.missing_argument (opt, decoded->opt_index)) + if (option->missing_argument_error) + error (option->missing_argument_error, opt); + else error ("missing argument to %qs", opt); return; } diff --git a/gcc/opts.h b/gcc/opts.h index fbc86b1c36ea..674843a9497b 100644 --- a/gcc/opts.h +++ b/gcc/opts.h @@ -44,6 +44,7 @@ struct cl_option { const char *opt_text; const char *help; + const char *missing_argument_error; unsigned short back_chain; unsigned char opt_len; int neg_index; diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog index 2bd47546476a..75200f86d36e 100644 --- a/gcc/po/ChangeLog +++ b/gcc/po/ChangeLog @@ -1,3 +1,7 @@ +2010-07-27 Joseph Myers + + * exgettext: Also extract MissingArgError texts from .opt files. + 2010-06-29 Joern Rennecke PR other/44034 diff --git a/gcc/po/exgettext b/gcc/po/exgettext index e0658302ac87..c3d92448f980 100644 --- a/gcc/po/exgettext +++ b/gcc/po/exgettext @@ -1,6 +1,6 @@ #! /bin/sh # Wrapper around gettext for programs using the msgid convention. -# Copyright 1998, 2001, 2002, 2003, 2009 Free Software Foundation, Inc. +# Copyright 1998, 2001, 2002, 2003, 2009, 2010 Free Software Foundation, Inc. # Written by Paul Eggert . # Revised by Zack Weinberg for no-POTFILES operation. @@ -223,6 +223,13 @@ echo "scanning option files..." >&2 if (/^[ \t]*(;|$)/ || !/^[^ \t]/) { field = 0 } else { + if ((field == 1) && /MissingArgError/) { + line = $0 + sub(".*MissingArgError\\(", "", line) + sub("\\).*", "", line) + printf("#line %d \"%s\"\n", lineno, file) + printf("_(\"%s\")\n", line) + } if (field == 2) { line = $0 printf("#line %d \"%s\"\n", lineno, file) diff --git a/gcc/system.h b/gcc/system.h index a8b4fa93558e..a5cfababa6df 100644 --- a/gcc/system.h +++ b/gcc/system.h @@ -779,7 +779,8 @@ extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN; LANG_HOOKS_PUSHLEVEL LANG_HOOKS_SET_BLOCK \ LANG_HOOKS_MAYBE_BUILD_CLEANUP LANG_HOOKS_UPDATE_DECL_AFTER_SAVING \ LANG_HOOKS_POPLEVEL LANG_HOOKS_TRUTHVALUE_CONVERSION \ - TARGET_PROMOTE_FUNCTION_ARGS TARGET_PROMOTE_FUNCTION_RETURN + TARGET_PROMOTE_FUNCTION_ARGS TARGET_PROMOTE_FUNCTION_RETURN \ + LANG_HOOKS_MISSING_ARGUMENT /* Miscellaneous macros that are no longer used. */ #pragma GCC poison USE_MAPPED_LOCATION