diff gcc/opts.h @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents f6334be47118
children 84e7813d76e9
line wrap: on
line diff
--- a/gcc/opts.h	Sun Aug 21 07:07:55 2011 +0900
+++ b/gcc/opts.h	Fri Oct 27 22:46:09 2017 +0900
@@ -1,6 +1,5 @@
 /* Command line option handling.
-   Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
-   Free Software Foundation, Inc.
+   Copyright (C) 2002-2017 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -21,8 +20,7 @@
 #ifndef GCC_OPTS_H
 #define GCC_OPTS_H
 
-#include "input.h"
-#include "vec.h"
+#include "obstack.h"
 
 /* Specifies how a switch's VAR_VALUE relates to its FLAG_VAR.  */
 enum cl_var_type {
@@ -53,21 +51,69 @@
 
 struct cl_option
 {
+  /* Text of the option, including initial '-'.  */
   const char *opt_text;
+  /* Help text for --help, or NULL.  */
   const char *help;
+  /* Error message for missing argument, or NULL.  */
   const char *missing_argument_error;
+  /* Warning to give when this option is used, or NULL.  */
   const char *warn_message;
+  /* Argument of alias target when positive option given, or NULL.  */
   const char *alias_arg;
+  /* Argument of alias target when negative option given, or NULL.  */
   const char *neg_alias_arg;
+  /* Alias target, or N_OPTS if not an alias.  */
   unsigned short alias_target;
+  /* Previous option that is an initial substring of this one, or
+     N_OPTS if none.  */
   unsigned short back_chain;
+  /* Option length, not including initial '-'.  */
   unsigned char opt_len;
+  /* Next option in a sequence marked with Negative, or -1 if none.  */
   int neg_index;
+  /* CL_* flags for this option.  */
   unsigned int flags;
+  /* Disabled in this configuration.  */
+  BOOL_BITFIELD cl_disabled : 1;
+  /* Options marked with CL_SEPARATE take a number of separate
+     arguments (1 to 4) that is one more than the number in this
+     bit-field.  */
+  unsigned int cl_separate_nargs : 2;
+  /* Option is an alias when used with separate argument.  */
+  BOOL_BITFIELD cl_separate_alias : 1;
+  /* Alias to negative form of option.  */
+  BOOL_BITFIELD cl_negative_alias : 1;
+  /* Option takes no argument in the driver.  */
+  BOOL_BITFIELD cl_no_driver_arg : 1;
+  /* Reject this option in the driver.  */
+  BOOL_BITFIELD cl_reject_driver : 1;
+  /* Reject no- form.  */
+  BOOL_BITFIELD cl_reject_negative : 1;
+  /* Missing argument OK (joined).  */
+  BOOL_BITFIELD cl_missing_ok : 1;
+  /* Argument is an integer >=0.  */
+  BOOL_BITFIELD cl_uinteger : 1;
+  /* Argument is a HOST_WIDE_INT.  */
+  BOOL_BITFIELD cl_host_wide_int : 1;
+  /* Argument should be converted to lowercase.  */
+  BOOL_BITFIELD cl_tolower : 1;
+  /* Report argument with -fverbose-asm  */
+  BOOL_BITFIELD cl_report : 1;
+  /* Offset of field for this option in struct gcc_options, or
+     (unsigned short) -1 if none.  */
   unsigned short flag_var_offset;
+  /* Index in cl_enums of enum used for this option's arguments, for
+     CLVC_ENUM options.  */
   unsigned short var_enum;
+  /* How this option's value is determined and sets a field.  */
   enum cl_var_type var_type;
-  int var_value;
+  /* Value or bit-mask with which to set a field.  */
+  HOST_WIDE_INT var_value;
+  /* Range info minimum, or -1.  */
+  int range_min;
+  /* Range info maximum, or -1.  */
+  int range_max;
 };
 
 /* Records that the state of an option consists of SIZE bytes starting
@@ -83,12 +129,12 @@
 extern const char *const lang_names[];
 extern const unsigned int cl_lang_count;
 
-#define CL_PARAMS               (1 << 11) /* Fake entry.  Used to display --param info with --help.  */
-#define CL_WARNING		(1 << 12) /* Enables an (optional) warning message.  */
-#define CL_OPTIMIZATION		(1 << 13) /* Enables an (optional) optimization.  */
-#define CL_DRIVER		(1 << 14) /* Driver option.  */
-#define CL_TARGET		(1 << 15) /* Target-specific option.  */
-#define CL_COMMON		(1 << 16) /* Language-independent.  */
+#define CL_PARAMS               (1U << 16) /* Fake entry.  Used to display --param info with --help.  */
+#define CL_WARNING		(1U << 17) /* Enables an (optional) warning message.  */
+#define CL_OPTIMIZATION		(1U << 18) /* Enables an (optional) optimization.  */
+#define CL_DRIVER		(1U << 19) /* Driver option.  */
+#define CL_TARGET		(1U << 20) /* Target-specific option.  */
+#define CL_COMMON		(1U << 21) /* Language-independent.  */
 
 #define CL_MIN_OPTION_CLASS	CL_PARAMS
 #define CL_MAX_OPTION_CLASS	CL_COMMON
@@ -98,23 +144,11 @@
    This distinction is important because --help will not list options
    which only have these higher bits set.  */
 
-/* Options marked with CL_SEPARATE take a number of separate arguments
-   (1 to 4) that is one more than the number in this bit-field.  */
-#define CL_SEPARATE_NARGS_SHIFT	17
-#define CL_SEPARATE_NARGS_MASK	(3 << CL_SEPARATE_NARGS_SHIFT)
-
-#define CL_SEPARATE_ALIAS	(1 << 19) /* Option is an alias when used with separate argument.  */
-#define CL_NO_DRIVER_ARG	(1 << 20) /* Option takes no argument in the driver.  */
-#define CL_REJECT_DRIVER	(1 << 21) /* Reject this option in the driver.  */
-#define CL_SAVE			(1 << 22) /* Target-specific option for attribute.  */
-#define CL_DISABLED		(1 << 23) /* Disabled in this configuration.  */
-#define CL_REPORT		(1 << 24) /* Report argument with -fverbose-asm  */
-#define CL_JOINED		(1 << 25) /* If takes joined argument.  */
-#define CL_SEPARATE		(1 << 26) /* If takes a separate argument.  */
-#define CL_REJECT_NEGATIVE	(1 << 27) /* Reject no- form.  */
-#define CL_MISSING_OK		(1 << 28) /* Missing argument OK (joined).  */
-#define CL_UINTEGER		(1 << 29) /* Argument is an integer >=0.  */
-#define CL_UNDOCUMENTED		(1 << 30) /* Do not output with --help.  */
+#define CL_JOINED		(1U << 22) /* If takes joined argument.  */
+#define CL_SEPARATE		(1U << 23) /* If takes a separate argument.  */
+#define CL_UNDOCUMENTED		(1U << 24) /* Do not output with --help.  */
+#define CL_NO_DWARF_RECORD	(1U << 25) /* Do not add to producer string.  */
+#define CL_PCH_IGNORE		(1U << 26) /* Do compare state for pch.  */
 
 /* Flags for an enumerated option argument.  */
 #define CL_ENUM_CANONICAL	(1 << 0) /* Canonical for this value.  */
@@ -170,8 +204,9 @@
 #define CL_ERR_MISSING_ARG	(1 << 1) /* Argument required but missing.  */
 #define CL_ERR_WRONG_LANG	(1 << 2) /* Option for wrong language.  */
 #define CL_ERR_UINT_ARG		(1 << 3) /* Bad unsigned integer argument.  */
-#define CL_ERR_ENUM_ARG		(1 << 4) /* Bad enumerated argument.  */
-#define CL_ERR_NEGATIVE		(1 << 5) /* Negative form of option
+#define CL_ERR_INT_RANGE_ARG	(1 << 4) /* Bad unsigned integer argument.  */
+#define CL_ERR_ENUM_ARG		(1 << 5) /* Bad enumerated argument.  */
+#define CL_ERR_NEGATIVE		(1 << 6) /* Negative form of option
 					    not permitted (together
 					    with OPT_SPECIAL_unknown).  */
 
@@ -218,16 +253,14 @@
 /* Structure describing an option deferred for handling after the main
    option handlers.  */
 
-typedef struct
+struct cl_deferred_option
 {
   /* Elements from struct cl_decoded_option used for deferred
      options.  */
   size_t opt_index;
   const char *arg;
   int value;
-} cl_deferred_option;
-DEF_VEC_O(cl_deferred_option);
-DEF_VEC_ALLOC_O(cl_deferred_option,heap);
+};
 
 /* Structure describing a single option-handling callback.  */
 
@@ -239,7 +272,8 @@
 		   const struct cl_decoded_option *decoded,
 		   unsigned int lang_mask, int kind, location_t loc,
 		   const struct cl_option_handlers *handlers,
-		   diagnostic_context *dc);
+		   diagnostic_context *dc,
+		   void (*target_option_override_hook) (void));
 
   /* The mask that must have some bit in common with the flags for the
      option for this particular handler to be used.  */
@@ -261,9 +295,8 @@
   void (*wrong_lang_callback) (const struct cl_decoded_option *decoded,
 			       unsigned int lang_mask);
 
-  /* Callback to call after the successful handling of any option.  */
-  void (*post_handling_callback) (const struct cl_decoded_option *decoded,
-				  unsigned int mask);
+  /* Target option override hook.  */
+  void (*target_option_override_hook) (void);
 
   /* The number of individual handlers.  */
   size_t num_handlers;
@@ -272,6 +305,10 @@
   struct cl_option_handler_func handlers[3];
 };
 
+/* Hold command-line options associated with stack limitation.  */
+extern const char *opt_fstack_limit_symbol_arg;
+extern int opt_fstack_limit_register_no;
+
 /* Input file names.  */
 
 extern const char **in_fnames;
@@ -280,7 +317,13 @@
 
 extern unsigned num_in_fnames;
 
-size_t find_opt (const char *input, int lang_mask);
+extern char *opts_concat (const char *first, ...);
+
+/* Obstack for option strings.  */
+
+extern struct obstack opts_obstack;
+
+size_t find_opt (const char *input, unsigned int lang_mask);
 extern int integral_argument (const char *arg);
 extern bool enum_value_to_arg (const struct cl_enum_arg *enum_args,
 			       const char **argp, int value,
@@ -293,17 +336,21 @@
 extern void init_options_once (void);
 extern void init_options_struct (struct gcc_options *opts,
 				 struct gcc_options *opts_set);
+extern void init_opts_obstack (void);
+extern void finalize_options_struct (struct gcc_options *opts);
 extern void decode_cmdline_options_to_array_default_mask (unsigned int argc,
 							  const char **argv, 
 							  struct cl_decoded_option **decoded_options,
 							  unsigned int *decoded_options_count);
-extern void set_default_handlers (struct cl_option_handlers *handlers);
+extern void set_default_handlers (struct cl_option_handlers *handlers,
+				  void (*target_option_override_hook) (void));
 extern void decode_options (struct gcc_options *opts,
 			    struct gcc_options *opts_set,
 			    struct cl_decoded_option *decoded_options,
 			    unsigned int decoded_options_count,
 			    location_t loc,
-			    diagnostic_context *dc);
+			    diagnostic_context *dc,
+			    void (*target_option_override_hook) (void));
 extern int option_enabled (int opt_idx, void *opts);
 extern bool get_option_state (struct gcc_options *, int,
 			      struct cl_option_state *);
@@ -317,7 +364,7 @@
 			      size_t opt_index, const char *arg, int value,
 			      unsigned int lang_mask, int kind, location_t loc,
 			      const struct cl_option_handlers *handlers,
-			      diagnostic_context *dc);
+			      bool generated_p, diagnostic_context *dc);
 void generate_option (size_t opt_index, const char *arg, int value,
 		      unsigned int lang_mask,
 		      struct cl_decoded_option *decoded);
@@ -331,28 +378,35 @@
 				 const struct cl_option_handlers *handlers,
 				 diagnostic_context *dc);
 extern void control_warning_option (unsigned int opt_index, int kind,
-				    bool imply, location_t loc,
+				    const char *arg, bool imply, location_t loc,
 				    unsigned int lang_mask,
 				    const struct cl_option_handlers *handlers,
 				    struct gcc_options *opts,
 				    struct gcc_options *opts_set,
 				    diagnostic_context *dc);
+extern char *write_langs (unsigned int mask);
 extern void print_ignored_options (void);
 extern void handle_common_deferred_options (void);
+unsigned int parse_sanitizer_options (const char *, location_t, int,
+				      unsigned int, int, bool);
+
+unsigned int parse_no_sanitize_attribute (char *value);
 extern bool common_handle_option (struct gcc_options *opts,
 				  struct gcc_options *opts_set,
 				  const struct cl_decoded_option *decoded,
 				  unsigned int lang_mask, int kind,
 				  location_t loc,
 				  const struct cl_option_handlers *handlers,
-				  diagnostic_context *dc);
+				  diagnostic_context *dc,
+				  void (*target_option_override_hook) (void));
 extern bool target_handle_option (struct gcc_options *opts,
 				  struct gcc_options *opts_set,
 				  const struct cl_decoded_option *decoded,
 				  unsigned int lang_mask, int kind,
 				  location_t loc,
 				  const struct cl_option_handlers *handlers,
-				  diagnostic_context *dc);
+				  diagnostic_context *dc,
+				  void (*target_option_override_hook) (void));
 extern void finish_options (struct gcc_options *opts,
 			    struct gcc_options *opts_set,
 			    location_t loc);
@@ -367,4 +421,22 @@
 extern void set_struct_debug_option (struct gcc_options *opts,
 				     location_t loc,
 				     const char *value);
+extern bool opt_enum_arg_to_value (size_t opt_index, const char *arg,
+				   int *value, unsigned int lang_mask);
+
+extern const struct sanitizer_opts_s
+{
+  const char *const name;
+  unsigned int flag;
+  size_t len;
+  bool can_recover;
+} sanitizer_opts[];
+
+extern void add_misspelling_candidates (auto_vec<char *> *candidates,
+					const struct cl_option *option,
+					const char *base_option);
+extern const char *candidates_list_and_hint (const char *arg, char *&str,
+					     const auto_vec <const char *> &
+					     candidates);
+
 #endif