toplev.h revision 132718
150397Sobrien/* toplev.h - Various declarations for functions found in toplev.c 2132718Skan Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004 3132718Skan Free Software Foundation, Inc. 450397Sobrien 590075SobrienThis file is part of GCC. 652284Sobrien 790075SobrienGCC is free software; you can redistribute it and/or modify it under 890075Sobrienthe terms of the GNU General Public License as published by the Free 990075SobrienSoftware Foundation; either version 2, or (at your option) any later 1090075Sobrienversion. 1152284Sobrien 1290075SobrienGCC is distributed in the hope that it will be useful, but WITHOUT ANY 1390075SobrienWARRANTY; without even the implied warranty of MERCHANTABILITY or 1490075SobrienFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1590075Sobrienfor more details. 1652284Sobrien 1752284SobrienYou should have received a copy of the GNU General Public License 1890075Sobrienalong with GCC; see the file COPYING. If not, write to the Free 1990075SobrienSoftware Foundation, 59 Temple Place - Suite 330, Boston, MA 2090075Sobrien02111-1307, USA. */ 2152284Sobrien 2290075Sobrien#ifndef GCC_TOPLEV_H 2390075Sobrien#define GCC_TOPLEV_H 2450397Sobrien 2590075Sobrien/* If non-NULL, return one past-the-end of the matching SUBPART of 2690075Sobrien the WHOLE string. */ 2790075Sobrien#define skip_leading_substring(whole, part) \ 2890075Sobrien (strncmp (whole, part, strlen (part)) ? NULL : whole + strlen (part)) 2950397Sobrien 30132718Skanextern int toplev_main (unsigned int, const char **); 31132718Skanextern int read_integral_parameter (const char *, const char *, const int); 32132718Skanextern void strip_off_ending (char *, int); 33132718Skanextern const char *trim_filename (const char *); 34132718Skanextern void _fatal_insn_not_found (rtx, const char *, int, const char *) 35132718Skan ATTRIBUTE_NORETURN; 36132718Skanextern void _fatal_insn (const char *, rtx, const char *, int, const char *) 37132718Skan ATTRIBUTE_NORETURN; 3850397Sobrien 3990075Sobrien#define fatal_insn(msgid, insn) \ 4090075Sobrien _fatal_insn (msgid, insn, __FILE__, __LINE__, __FUNCTION__) 4190075Sobrien#define fatal_insn_not_found(insn) \ 4290075Sobrien _fatal_insn_not_found (insn, __FILE__, __LINE__, __FUNCTION__) 4390075Sobrien 44132718Skan/* If we haven't already defined a frontend specific diagnostics 45132718Skan style, use the generic one. */ 46132718Skan#ifndef GCC_DIAG_STYLE 47132718Skan#define GCC_DIAG_STYLE __gcc_diag__ 48132718Skan#endif 4990075Sobrien/* None of these functions are suitable for ATTRIBUTE_PRINTF, because 5090075Sobrien each language front end can extend them with its own set of format 51132718Skan specifiers. We must use custom format checks. */ 52132718Skan#if GCC_VERSION >= 3004 53132718Skan#define ATTRIBUTE_GCC_DIAG(m, n) __attribute__ ((__format__ (GCC_DIAG_STYLE, m, n))) ATTRIBUTE_NONNULL(m) 54132718Skan#else 55132718Skan#define ATTRIBUTE_GCC_DIAG(m, n) ATTRIBUTE_NONNULL(m) 56132718Skan#endif 57132718Skanextern void internal_error (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2) 58132718Skan ATTRIBUTE_NORETURN; 59132718Skanextern void warning (const char *, ...); 60132718Skanextern void error (const char *, ...); 61132718Skanextern void fatal_error (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2) 62132718Skan ATTRIBUTE_NORETURN; 63132718Skanextern void pedwarn (const char *, ...); 64132718Skanextern void sorry (const char *, ...); 65132718Skanextern void inform (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2); 6690075Sobrien 67132718Skanextern void rest_of_decl_compilation (tree, const char *, int, int); 68132718Skanextern void rest_of_type_compilation (tree, int); 69132718Skanextern void rest_of_compilation (tree); 70132718Skanextern void tree_rest_of_compilation (tree, bool); 7152284Sobrien 72132718Skanextern void announce_function (tree); 7352284Sobrien 74132718Skanextern void error_for_asm (rtx, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3); 75132718Skanextern void warning_for_asm (rtx, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3); 76132718Skanextern void warn_deprecated_use (tree); 7750397Sobrien 7850397Sobrien#ifdef BUFSIZ 79132718Skanextern void output_quoted_string (FILE *, const char *); 80132718Skanextern void output_file_directive (FILE *, const char *); 8150397Sobrien#endif 8250397Sobrien 8352284Sobrien#ifdef BUFSIZ 8490075Sobrien /* N.B. Unlike all the others, fnotice is just gettext+fprintf, and 8590075Sobrien therefore it can have ATTRIBUTE_PRINTF. */ 86132718Skanextern void fnotice (FILE *, const char *, ...) 87132718Skan ATTRIBUTE_PRINTF_2; 8852284Sobrien#endif 8952284Sobrien 90132718Skanextern int wrapup_global_declarations (tree *, int); 91132718Skanextern void check_global_declarations (tree *, int); 92132718Skanextern void write_global_declarations (void); 9390075Sobrien 94132718Skan/* A unique local time stamp, might be zero if none is available. */ 95132718Skanextern unsigned local_tick; 96132718Skan 9790075Sobrienextern const char *progname; 9890075Sobrienextern const char *dump_base_name; 99117395Skanextern const char *aux_base_name; 100132718Skanextern const char *aux_info_file_name; 101132718Skanextern const char *asm_file_name; 102132718Skanextern bool exit_after_options; 103132718Skanextern bool version_flag; 10490075Sobrien 105117395Skanextern int target_flags_explicit; 106117395Skan 107132718Skan/* See toplev.c. */ 108132718Skanextern int flag_loop_optimize; 109132718Skanextern int flag_crossjumping; 110132718Skanextern int flag_if_conversion; 111132718Skanextern int flag_if_conversion2; 112132718Skanextern int flag_delete_null_pointer_checks; 113132718Skanextern int flag_keep_static_consts; 114132718Skanextern int flag_peel_loops; 115132718Skanextern int flag_rerun_cse_after_loop; 116132718Skanextern int flag_thread_jumps; 117132718Skanextern int flag_tracer; 118132718Skanextern int flag_unroll_loops; 119132718Skanextern int flag_unroll_all_loops; 120132718Skanextern int flag_unswitch_loops; 121132718Skanextern int flag_cprop_registers; 122132718Skanextern int time_report; 123132718Skanextern int flag_new_regalloc; 124132718Skan 125132718Skan/* Things to do with target switches. */ 126132718Skanextern void display_target_options (void); 127132718Skanextern void print_version (FILE *, const char *); 128132718Skanextern void set_target_switch (const char *); 129132718Skanextern void * default_get_pch_validity (size_t *); 130132718Skanextern const char * default_pch_valid_p (const void *, size_t); 131132718Skan 13290075Sobrien/* The hashtable, so that the C front ends can pass it to cpplib. */ 13390075Sobrienextern struct ht *ident_hash; 13490075Sobrien 135117395Skan/* This function can be used by targets to set the flags originally 136117395Skan implied by -ffast-math and -fno-fast-math. */ 13790075Sobrien 138132718Skanextern void set_fast_math_flags (int); 13990075Sobrien 140132718Skan/* Handle -d switch. */ 141132718Skanextern void decode_d_option (const char *); 142132718Skan 143117395Skan/* Return true iff flags are set as if -ffast-math. */ 144132718Skanextern bool fast_math_flags_set_p (void); 145117395Skan 14690075Sobrien/* The following functions accept a wide integer argument. Rather 14790075Sobrien than having to cast on every function call, we use a macro instead. */ 14890075Sobrien 14990075Sobrien#ifndef exact_log2 15090075Sobrien#define exact_log2(N) exact_log2_wide ((unsigned HOST_WIDE_INT) (N)) 15190075Sobrien#define floor_log2(N) floor_log2_wide ((unsigned HOST_WIDE_INT) (N)) 15290075Sobrien#endif 153132718Skanextern int exact_log2_wide (unsigned HOST_WIDE_INT); 154132718Skanextern int floor_log2_wide (unsigned HOST_WIDE_INT); 15590075Sobrien 156132718Skan/* Functions used to get and set GCC's notion of in what directory 157132718Skan compilation was started. */ 158132718Skan 159132718Skanextern const char *get_src_pwd (void); 160132718Skanextern bool set_src_pwd (const char *); 161132718Skan 16290075Sobrien#endif /* ! GCC_TOPLEV_H */ 163