OSDN Git Service

* common.opt (debug_struct_ordinary, debug_struct_generic): New
[pf3gnuchains/gcc-fork.git] / gcc / toplev.h
index de13bc2..426c861 100644 (file)
@@ -1,11 +1,13 @@
 /* toplev.h - Various declarations for functions found in toplev.c
 /* toplev.h - Various declarations for functions found in toplev.c
-   Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007,
+   2008, 2009, 2010
+   Free Software Foundation, Inc.
 
 This file is part of GCC.
 
 GCC is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
 
 This file is part of GCC.
 
 GCC is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
+Software Foundation; either version 3, or (at your option) any later
 version.
 
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
 version.
 
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
@@ -14,122 +16,171 @@ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING.  If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA.  */
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
 
 #ifndef GCC_TOPLEV_H
 #define GCC_TOPLEV_H
 
 #ifndef GCC_TOPLEV_H
 #define GCC_TOPLEV_H
+#include "input.h"
+#include "bversion.h"
 
 /* If non-NULL, return one past-the-end of the matching SUBPART of
    the WHOLE string.  */
 #define skip_leading_substring(whole,  part) \
    (strncmp (whole, part, strlen (part)) ? NULL : whole + strlen (part))
 
 
 /* If non-NULL, return one past-the-end of the matching SUBPART of
    the WHOLE string.  */
 #define skip_leading_substring(whole,  part) \
    (strncmp (whole, part, strlen (part)) ? NULL : whole + strlen (part))
 
-extern int toplev_main                 PARAMS ((int, char **));
-extern int read_integral_parameter     PARAMS ((const char *, const char *,
-                                               const int));
-extern void strip_off_ending           PARAMS ((char *, int));
-extern void print_time                 PARAMS ((const char *, long));
-extern const char *trim_filename       PARAMS ((const char *));
-extern void internal_error             PARAMS ((const char *, ...))
-                                              ATTRIBUTE_NORETURN;
-extern void fatal_io_error             PARAMS ((const char *, ...))
-                                              ATTRIBUTE_NORETURN;
-extern void _fatal_insn_not_found      PARAMS ((struct rtx_def *,
-                                               const char *, int,
-                                               const char *))
-                                              ATTRIBUTE_NORETURN;
-extern void _fatal_insn                        PARAMS ((const char *,
-                                               struct rtx_def *,
-                                               const char *, int,
-                                               const char *))
-                                             ATTRIBUTE_NORETURN;
-
-#define fatal_insn(msgid, insn) \
-       _fatal_insn (msgid, insn, __FILE__, __LINE__, __FUNCTION__)
-#define fatal_insn_not_found(insn) \
-       _fatal_insn_not_found (insn, __FILE__, __LINE__, __FUNCTION__)
-
-/* None of these functions are suitable for ATTRIBUTE_PRINTF, because
-   each language front end can extend them with its own set of format
-   specifiers.  */
-extern void warning                    PARAMS ((const char *, ...));
-extern void error                      PARAMS ((const char *, ...));
-extern void fatal_error                        PARAMS ((const char *, ...))
-                                              ATTRIBUTE_NORETURN;
-extern void pedwarn                    PARAMS ((const char *, ...));
-extern void pedwarn_with_file_and_line PARAMS ((const char *, int,
-                                                const char *, ...));
-extern void warning_with_file_and_line PARAMS ((const char *, int,
-                                                const char *, ...));
-extern void error_with_file_and_line   PARAMS ((const char *, int,
-                                                const char *, ...));
-extern void sorry                      PARAMS ((const char *, ...));
-
-extern void rest_of_decl_compilation   PARAMS ((union tree_node *,
-                                               const char *, int, int));
-extern void rest_of_type_compilation   PARAMS ((union tree_node *, int));
-extern void rest_of_compilation                PARAMS ((union tree_node *));
-
-extern void pedwarn_with_decl          PARAMS ((union tree_node *,
-                                                const char *, ...));
-extern void warning_with_decl          PARAMS ((union tree_node *,
-                                                const char *, ...));
-extern void error_with_decl            PARAMS ((union tree_node *,
-                                                const char *, ...));
-
-extern void announce_function          PARAMS ((union tree_node *));
-
-extern void error_for_asm              PARAMS ((struct rtx_def *,
-                                                const char *, ...));
-extern void warning_for_asm            PARAMS ((struct rtx_def *,
-                                                const char *, ...));
-extern void warn_deprecated_use                PARAMS ((union tree_node *));
-
-extern void output_clean_symbol_name    PARAMS ((FILE *, const char *));
-#ifdef BUFSIZ
-extern void output_quoted_string       PARAMS ((FILE *, const char *));
-extern void output_file_directive      PARAMS ((FILE *, const char *));
-#endif
-extern void do_abort                   PARAMS ((void)) ATTRIBUTE_NORETURN;
-extern void botch                      PARAMS ((const char *))
-  ATTRIBUTE_NORETURN;
+/* Decoded options, and number of such options.  */
+extern struct cl_decoded_option *save_decoded_options;
+extern unsigned int save_decoded_options_count;
+
+extern int toplev_main (int, char **);
+extern void strip_off_ending (char *, int);
+extern void rest_of_decl_compilation (tree, int, int);
+extern void rest_of_type_compilation (tree, int);
+extern void tree_rest_of_compilation (tree);
+extern void init_optimization_passes (void);
+extern void finish_optimization_passes (void);
+extern bool enable_rtl_dump_file (void);
+
+/* In except.c.  Initialize exception handling.  This is used by the Ada
+   and LTO front ends to initialize EH "on demand".  See lto-streamer-in.c
+   and ada/gcc-interface/misc.c.  */
+extern void init_eh (void);
+
+extern void announce_function (tree);
+
+extern void warn_deprecated_use (tree, tree);
+extern bool parse_optimize_options (tree, bool);
 
 #ifdef BUFSIZ
 
 #ifdef BUFSIZ
-  /* N.B. Unlike all the others, fnotice is just gettext+fprintf, and
-     therefore it can have ATTRIBUTE_PRINTF.  */
-extern void fnotice                    PARAMS ((FILE *, const char *, ...))
-                                              ATTRIBUTE_PRINTF_2;
+extern void output_quoted_string       (FILE *, const char *);
 #endif
 
 #endif
 
-extern int wrapup_global_declarations   PARAMS ((union tree_node **, int));
-extern void check_global_declarations   PARAMS ((union tree_node **, int));
+extern void wrapup_global_declaration_1 (tree);
+extern bool wrapup_global_declaration_2 (tree);
+extern bool wrapup_global_declarations (tree *, int);
+extern void check_global_declaration_1 (tree);
+extern void check_global_declarations (tree *, int);
+extern void emit_debug_global_declarations (tree *, int);
+extern void write_global_declarations (void);
 
 
-extern const char *progname;
-extern const char *dump_base_name;
+extern void dump_memory_report (bool);
 
 
-extern int target_flags_explicit;
+extern void target_reinit (void);
 
 
-/* The hashtable, so that the C front ends can pass it to cpplib.  */
-extern struct ht *ident_hash;
+/* A unique local time stamp, might be zero if none is available.  */
+extern unsigned local_tick;
 
 
-/* This function can be used by targets to set the flags originally
-    implied by -ffast-math and -fno-fast-math.  */
+/* Top-level source file.  */
+extern const char *main_input_filename;
+extern const char *main_input_basename;
+extern int main_input_baselength;
 
 
-extern void set_fast_math_flags         PARAMS ((int));
+extern const char *profile_data_prefix;
+extern bool exit_after_options;
 
 
-/* Return true iff flags are set as if -ffast-math.  */
-extern bool fast_math_flags_set_p      PARAMS ((void));
+/* True if the user has tagged the function with the 'section'
+   attribute.  */
 
 
-/* The following functions accept a wide integer argument.  Rather
-   than having to cast on every function call, we use a macro instead.  */
+extern bool user_defined_section_attribute;
 
 
-#ifndef exact_log2
-#define exact_log2(N) exact_log2_wide ((unsigned HOST_WIDE_INT) (N))
-#define floor_log2(N) floor_log2_wide ((unsigned HOST_WIDE_INT) (N))
-#endif
-extern int exact_log2_wide             PARAMS ((unsigned HOST_WIDE_INT));
-extern int floor_log2_wide             PARAMS ((unsigned HOST_WIDE_INT));
+/* See toplev.c.  */
+extern int flag_rerun_cse_after_global_opts;
+
+/* Things to do with target switches.  */
+extern void print_version (FILE *, const char *);
+extern void * default_get_pch_validity (size_t *);
+extern const char * default_pch_valid_p (const void *, size_t);
+
+/* The hashtable, so that the C front ends can pass it to cpplib.  */
+extern struct ht *ident_hash;
+
+/* Handle -d switch.  */
+extern void decode_d_option            (const char *);
+
+/* Return true iff flags are set as if -ffast-math.  */
+extern bool fast_math_flags_set_p      (void);
+extern bool fast_math_flags_struct_set_p (struct cl_optimization *);
+
+/* Inline versions of the above for speed.  */
+#if GCC_VERSION < 3004
+
+extern int clz_hwi (unsigned HOST_WIDE_INT x);
+extern int ctz_hwi (unsigned HOST_WIDE_INT x);
+extern int ffs_hwi (unsigned HOST_WIDE_INT x);
+
+/* Return log2, or -1 if not exact.  */
+extern int exact_log2                  (unsigned HOST_WIDE_INT);
+
+/* Return floor of log2, with -1 for zero.  */
+extern int floor_log2                  (unsigned HOST_WIDE_INT);
+
+#else /* GCC_VERSION >= 3004 */
+
+/* For convenience, define 0 -> word_size.  */
+static inline int
+clz_hwi (unsigned HOST_WIDE_INT x)
+{
+  if (x == 0)
+    return HOST_BITS_PER_WIDE_INT;
+# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
+  return __builtin_clzl (x);
+# elif HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONGLONG
+  return __builtin_clzll (x);
+# else
+  return __builtin_clz (x);
+# endif
+}
+
+static inline int
+ctz_hwi (unsigned HOST_WIDE_INT x)
+{
+  if (x == 0)
+    return HOST_BITS_PER_WIDE_INT;
+# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
+  return __builtin_ctzl (x);
+# elif HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONGLONG
+  return __builtin_ctzll (x);
+# else
+  return __builtin_ctz (x);
+# endif
+}
+
+static inline int
+ffs_hwi (unsigned HOST_WIDE_INT x)
+{
+# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
+  return __builtin_ffsl (x);
+# elif HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONGLONG
+  return __builtin_ffsll (x);
+# else
+  return __builtin_ffs (x);
+# endif
+}
+
+static inline int
+floor_log2 (unsigned HOST_WIDE_INT x)
+{
+  return HOST_BITS_PER_WIDE_INT - 1 - clz_hwi (x);
+}
+
+static inline int
+exact_log2 (unsigned HOST_WIDE_INT x)
+{
+  return x == (x & -x) && x ? ctz_hwi (x) : -1;
+}
+
+#endif /* GCC_VERSION >= 3004 */
+
+/* Functions used to get and set GCC's notion of in what directory
+   compilation was started.  */
+
+extern const char *get_src_pwd        (void);
+extern bool set_src_pwd                       (const char *);
+
+/* Functions used to manipulate the random seed.  */
+
+extern const char *get_random_seed (bool);
+extern const char *set_random_seed (const char *);
 
 #endif /* ! GCC_TOPLEV_H */
 
 #endif /* ! GCC_TOPLEV_H */