flag-types.h (struct visibility_flags): Don't declare here.
[gcc.git] / gcc / toplev.h
1 /* toplev.h - Various declarations for functions found in toplev.c
2 Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007,
3 2008, 2009, 2010
4 Free Software Foundation, Inc.
5
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
12
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
21
22 #ifndef GCC_TOPLEV_H
23 #define GCC_TOPLEV_H
24 #include "input.h"
25 #include "bversion.h"
26
27 /* If non-NULL, return one past-the-end of the matching SUBPART of
28 the WHOLE string. */
29 #define skip_leading_substring(whole, part) \
30 (strncmp (whole, part, strlen (part)) ? NULL : whole + strlen (part))
31
32 /* Decoded options, and number of such options. */
33 extern struct cl_decoded_option *save_decoded_options;
34 extern unsigned int save_decoded_options_count;
35
36 extern int toplev_main (int, char **);
37 extern void rest_of_decl_compilation (tree, int, int);
38 extern void rest_of_type_compilation (tree, int);
39 extern void tree_rest_of_compilation (tree);
40 extern void init_optimization_passes (void);
41 extern void finish_optimization_passes (void);
42 extern bool enable_rtl_dump_file (void);
43
44 /* In except.c. Initialize exception handling. This is used by the Ada
45 and LTO front ends to initialize EH "on demand". See lto-streamer-in.c
46 and ada/gcc-interface/misc.c. */
47 extern void init_eh (void);
48
49 extern void announce_function (tree);
50
51 extern void warn_deprecated_use (tree, tree);
52 extern bool parse_optimize_options (tree, bool);
53
54 #ifdef BUFSIZ
55 extern void output_quoted_string (FILE *, const char *);
56 #endif
57
58 extern void wrapup_global_declaration_1 (tree);
59 extern bool wrapup_global_declaration_2 (tree);
60 extern bool wrapup_global_declarations (tree *, int);
61 extern void check_global_declaration_1 (tree);
62 extern void check_global_declarations (tree *, int);
63 extern void emit_debug_global_declarations (tree *, int);
64 extern void write_global_declarations (void);
65
66 extern void dump_memory_report (bool);
67
68 extern void target_reinit (void);
69
70 /* A unique local time stamp, might be zero if none is available. */
71 extern unsigned local_tick;
72
73 /* Top-level source file. */
74 extern const char *main_input_filename;
75 extern const char *main_input_basename;
76 extern int main_input_baselength;
77
78 /* True if the user has tagged the function with the 'section'
79 attribute. */
80
81 extern bool user_defined_section_attribute;
82
83 /* See toplev.c. */
84 extern int flag_rerun_cse_after_global_opts;
85
86 /* Things to do with target switches. */
87 extern void print_version (FILE *, const char *);
88 extern void * default_get_pch_validity (size_t *);
89 extern const char * default_pch_valid_p (const void *, size_t);
90
91 /* The hashtable, so that the C front ends can pass it to cpplib. */
92 extern struct ht *ident_hash;
93
94 /* Inline versions of the above for speed. */
95 #if GCC_VERSION < 3004
96
97 extern int clz_hwi (unsigned HOST_WIDE_INT x);
98 extern int ctz_hwi (unsigned HOST_WIDE_INT x);
99 extern int ffs_hwi (unsigned HOST_WIDE_INT x);
100
101 /* Return log2, or -1 if not exact. */
102 extern int exact_log2 (unsigned HOST_WIDE_INT);
103
104 /* Return floor of log2, with -1 for zero. */
105 extern int floor_log2 (unsigned HOST_WIDE_INT);
106
107 #else /* GCC_VERSION >= 3004 */
108
109 /* For convenience, define 0 -> word_size. */
110 static inline int
111 clz_hwi (unsigned HOST_WIDE_INT x)
112 {
113 if (x == 0)
114 return HOST_BITS_PER_WIDE_INT;
115 # if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
116 return __builtin_clzl (x);
117 # elif HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONGLONG
118 return __builtin_clzll (x);
119 # else
120 return __builtin_clz (x);
121 # endif
122 }
123
124 static inline int
125 ctz_hwi (unsigned HOST_WIDE_INT x)
126 {
127 if (x == 0)
128 return HOST_BITS_PER_WIDE_INT;
129 # if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
130 return __builtin_ctzl (x);
131 # elif HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONGLONG
132 return __builtin_ctzll (x);
133 # else
134 return __builtin_ctz (x);
135 # endif
136 }
137
138 static inline int
139 ffs_hwi (unsigned HOST_WIDE_INT x)
140 {
141 # if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
142 return __builtin_ffsl (x);
143 # elif HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONGLONG
144 return __builtin_ffsll (x);
145 # else
146 return __builtin_ffs (x);
147 # endif
148 }
149
150 static inline int
151 floor_log2 (unsigned HOST_WIDE_INT x)
152 {
153 return HOST_BITS_PER_WIDE_INT - 1 - clz_hwi (x);
154 }
155
156 static inline int
157 exact_log2 (unsigned HOST_WIDE_INT x)
158 {
159 return x == (x & -x) && x ? ctz_hwi (x) : -1;
160 }
161
162 #endif /* GCC_VERSION >= 3004 */
163
164 /* Functions used to get and set GCC's notion of in what directory
165 compilation was started. */
166
167 extern const char *get_src_pwd (void);
168 extern bool set_src_pwd (const char *);
169
170 /* Functions used to manipulate the random seed. */
171
172 extern const char *get_random_seed (bool);
173 extern const char *set_random_seed (const char *);
174
175 #endif /* ! GCC_TOPLEV_H */