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