OSDN Git Service

* config/microblaze/microblaze.h (CC1_SPEC): Remove %{save-temps: }.
[pf3gnuchains/gcc-fork.git] / gcc / opts.h
index 9d5ecb3..c3907fd 100644 (file)
@@ -22,6 +22,7 @@ along with GCC; see the file COPYING3.  If not see
 #define GCC_OPTS_H
 
 #include "input.h"
+#include "vec.h"
 
 /* Specifies how a switch's VAR_VALUE relates to its FLAG_VAR.  */
 enum cl_var_type {
@@ -39,7 +40,15 @@ enum cl_var_type {
 
   /* The switch takes a string argument and FLAG_VAR points to that
      argument.  */
-  CLVC_STRING
+  CLVC_STRING,
+
+  /* The switch takes an enumerated argument (VAR_ENUM says what
+     enumeration) and FLAG_VAR points to that argument.  */
+  CLVC_ENUM,
+
+  /* The switch should be stored in the VEC pointed to by FLAG_VAR for
+     later processing.  */
+  CLVC_DEFER
 };
 
 struct cl_option
@@ -56,6 +65,7 @@ struct cl_option
   int neg_index;
   unsigned int flags;
   unsigned short flag_var_offset;
+  unsigned short var_enum;
   enum cl_var_type var_type;
   int var_value;
 };
@@ -106,6 +116,52 @@ extern const unsigned int cl_lang_count;
 #define CL_UINTEGER            (1 << 29) /* Argument is an integer >=0.  */
 #define CL_UNDOCUMENTED                (1 << 30) /* Do not output with --help.  */
 
+/* Flags for an enumerated option argument.  */
+#define CL_ENUM_CANONICAL      (1 << 0) /* Canonical for this value.  */
+#define CL_ENUM_DRIVER_ONLY    (1 << 1) /* Only accepted in the driver.  */
+
+/* Structure describing an enumerated option argument.  */
+
+struct cl_enum_arg
+{
+  /* The argument text, or NULL at the end of the array.  */
+  const char *arg;
+
+  /* The corresponding integer value.  */
+  int value;
+
+  /* Flags associated with this argument.  */
+  unsigned int flags;
+};
+
+/* Structure describing an enumerated set of option arguments.  */
+
+struct cl_enum
+{
+  /* Help text, or NULL if the values should not be listed in --help
+     output.  */
+  const char *help;
+
+  /* Error message for unknown arguments, or NULL to use a generic
+     error.  */
+  const char *unknown_error;
+
+  /* Array of possible values.  */
+  const struct cl_enum_arg *values;
+
+  /* The size of the type used to store a value.  */
+  size_t var_size;
+
+  /* Function to set a variable of this type.  */
+  void (*set) (void *var, int value);
+
+  /* Function to get the value of a variable of this type.  */
+  int (*get) (const void *var);
+};
+
+extern const struct cl_enum cl_enums[];
+extern const unsigned int cl_enums_count;
+
 /* Possible ways in which a command-line option may be erroneous.
    These do not include not being known at all; an option index of
    OPT_SPECIAL_unknown is used for that.  */
@@ -114,7 +170,8 @@ extern const unsigned int cl_lang_count;
 #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_NEGATIVE                (1 << 4) /* Negative form of option
+#define CL_ERR_ENUM_ARG                (1 << 4) /* Bad enumerated argument.  */
+#define CL_ERR_NEGATIVE                (1 << 5) /* Negative form of option
                                            not permitted (together
                                            with OPT_SPECIAL_unknown).  */
 
@@ -158,6 +215,20 @@ struct cl_decoded_option
   int errors;
 };
 
+/* Structure describing an option deferred for handling after the main
+   option handlers.  */
+
+typedef struct
+{
+  /* 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.  */
 
 struct cl_option_handler_func
@@ -211,6 +282,9 @@ extern unsigned num_in_fnames;
 
 size_t find_opt (const char *input, 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,
+                              unsigned int lang_mask);
 extern void decode_cmdline_options_to_array (unsigned int argc,
                                             const char **argv, 
                                             unsigned int lang_mask,
@@ -223,6 +297,7 @@ 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 decode_options (struct gcc_options *opts,
                            struct gcc_options *opts_set,
                            struct cl_decoded_option *decoded_options,
@@ -255,5 +330,41 @@ extern void read_cmdline_option (struct gcc_options *opts,
                                 unsigned int lang_mask,
                                 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,
+                                   unsigned int lang_mask,
+                                   const struct cl_option_handlers *handlers,
+                                   struct gcc_options *opts,
+                                   struct gcc_options *opts_set,
+                                   diagnostic_context *dc);
 extern void print_ignored_options (void);
+extern void handle_common_deferred_options (void);
+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);
+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);
+extern void finish_options (struct gcc_options *opts,
+                           struct gcc_options *opts_set,
+                           location_t loc);
+extern void default_options_optimization (struct gcc_options *opts,
+                                         struct gcc_options *opts_set,
+                                         struct cl_decoded_option *decoded_options,
+                                         unsigned int decoded_options_count,
+                                         location_t loc,
+                                         unsigned int lang_mask,
+                                         const struct cl_option_handlers *handlers,
+                                         diagnostic_context *dc);
+extern void set_struct_debug_option (struct gcc_options *opts,
+                                    location_t loc,
+                                    const char *value);
 #endif