Mercurial > hg > CbC > CbC_gcc
annotate gcc/c-opts.c @ 63:b7f97abdc517 gcc-4.6-20100522
update gcc from gcc-4.5.0 to gcc-4.6
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 24 May 2010 12:47:05 +0900 |
parents | 77e2b8dfacca |
children |
rev | line source |
---|---|
0 | 1 /* C/ObjC/C++ command line option handling. |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 |
0 | 3 Free Software Foundation, Inc. |
4 Contributed by Neil Booth. | |
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 #include "config.h" | |
23 #include "system.h" | |
24 #include "coretypes.h" | |
25 #include "tree.h" | |
26 #include "c-common.h" | |
27 #include "c-pragma.h" | |
28 #include "flags.h" | |
29 #include "toplev.h" | |
30 #include "langhooks.h" | |
31 #include "diagnostic.h" | |
32 #include "intl.h" | |
33 #include "cppdefault.h" | |
34 #include "incpath.h" | |
35 #include "debug.h" /* For debug_hooks. */ | |
36 #include "opts.h" | |
37 #include "options.h" | |
38 #include "mkdeps.h" | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
39 #include "target.h" /* For gcc_targetcm. */ |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
40 #include "c-tree.h" /* For c_cpp_error. */ |
0 | 41 |
42 #ifndef DOLLARS_IN_IDENTIFIERS | |
43 # define DOLLARS_IN_IDENTIFIERS true | |
44 #endif | |
45 | |
46 #ifndef TARGET_SYSTEM_ROOT | |
47 # define TARGET_SYSTEM_ROOT NULL | |
48 #endif | |
49 | |
50 #ifndef TARGET_OPTF | |
51 #define TARGET_OPTF(ARG) | |
52 #endif | |
53 | |
54 /* CPP's options. */ | |
55 cpp_options *cpp_opts; | |
56 | |
57 /* Input filename. */ | |
58 static const char *this_input_filename; | |
59 | |
60 /* Filename and stream for preprocessed output. */ | |
61 static const char *out_fname; | |
62 static FILE *out_stream; | |
63 | |
64 /* Append dependencies to deps_file. */ | |
65 static bool deps_append; | |
66 | |
67 /* If dependency switches (-MF etc.) have been given. */ | |
68 static bool deps_seen; | |
69 | |
70 /* If -v seen. */ | |
71 static bool verbose; | |
72 | |
73 /* Dependency output file. */ | |
74 static const char *deps_file; | |
75 | |
76 /* The prefix given by -iprefix, if any. */ | |
77 static const char *iprefix; | |
78 | |
79 /* The multilib directory given by -imultilib, if any. */ | |
80 static const char *imultilib; | |
81 | |
82 /* The system root, if any. Overridden by -isysroot. */ | |
83 static const char *sysroot = TARGET_SYSTEM_ROOT; | |
84 | |
85 /* Zero disables all standard directories for headers. */ | |
86 static bool std_inc = true; | |
87 | |
88 /* Zero disables the C++-specific standard directories for headers. */ | |
89 static bool std_cxx_inc = true; | |
90 | |
91 /* If the quote chain has been split by -I-. */ | |
92 static bool quote_chain_split; | |
93 | |
94 /* If -Wunused-macros. */ | |
95 static bool warn_unused_macros; | |
96 | |
97 /* If -Wvariadic-macros. */ | |
98 static bool warn_variadic_macros = true; | |
99 | |
100 /* Number of deferred options. */ | |
101 static size_t deferred_count; | |
102 | |
103 /* Number of deferred options scanned for -include. */ | |
104 static size_t include_cursor; | |
105 | |
106 static void handle_OPT_d (const char *); | |
107 static void set_std_cxx98 (int); | |
108 static void set_std_cxx0x (int); | |
109 static void set_std_c89 (int, int); | |
110 static void set_std_c99 (int); | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
111 static void set_std_c1x (int); |
0 | 112 static void check_deps_environment_vars (void); |
113 static void handle_deferred_opts (void); | |
114 static void sanitize_cpp_opts (void); | |
115 static void add_prefixed_path (const char *, size_t); | |
116 static void push_command_line_include (void); | |
117 static void cb_file_change (cpp_reader *, const struct line_map *); | |
118 static void cb_dir_change (cpp_reader *, const char *); | |
119 static void finish_options (void); | |
120 | |
121 #ifndef STDC_0_IN_SYSTEM_HEADERS | |
122 #define STDC_0_IN_SYSTEM_HEADERS 0 | |
123 #endif | |
124 | |
125 /* Holds switches parsed by c_common_handle_option (), but whose | |
126 handling is deferred to c_common_post_options (). */ | |
127 static void defer_opt (enum opt_code, const char *); | |
128 static struct deferred_opt | |
129 { | |
130 enum opt_code code; | |
131 const char *arg; | |
132 } *deferred_opts; | |
133 | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
134 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
135 static const unsigned int |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
136 c_family_lang_mask = (CL_C | CL_CXX | CL_ObjC | CL_ObjCXX); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
137 |
0 | 138 /* Complain that switch CODE expects an argument but none was |
139 provided. OPT was the command-line option. Return FALSE to get | |
140 the default message in opts.c, TRUE if we provide a specialized | |
141 one. */ | |
142 bool | |
143 c_common_missing_argument (const char *opt, size_t code) | |
144 { | |
145 switch (code) | |
146 { | |
147 default: | |
148 /* Pick up the default message. */ | |
149 return false; | |
150 | |
151 case OPT_fconstant_string_class_: | |
152 error ("no class name specified with %qs", opt); | |
153 break; | |
154 | |
155 case OPT_A: | |
156 error ("assertion missing after %qs", opt); | |
157 break; | |
158 | |
159 case OPT_D: | |
160 case OPT_U: | |
161 error ("macro name missing after %qs", opt); | |
162 break; | |
163 | |
164 case OPT_F: | |
165 case OPT_I: | |
166 case OPT_idirafter: | |
167 case OPT_isysroot: | |
168 case OPT_isystem: | |
169 case OPT_iquote: | |
170 error ("missing path after %qs", opt); | |
171 break; | |
172 | |
173 case OPT_MF: | |
174 case OPT_MD: | |
175 case OPT_MMD: | |
176 case OPT_include: | |
177 case OPT_imacros: | |
178 case OPT_o: | |
179 error ("missing filename after %qs", opt); | |
180 break; | |
181 | |
182 case OPT_MQ: | |
183 case OPT_MT: | |
184 error ("missing makefile target after %qs", opt); | |
185 break; | |
186 } | |
187 | |
188 return true; | |
189 } | |
190 | |
191 /* Defer option CODE with argument ARG. */ | |
192 static void | |
193 defer_opt (enum opt_code code, const char *arg) | |
194 { | |
195 deferred_opts[deferred_count].code = code; | |
196 deferred_opts[deferred_count].arg = arg; | |
197 deferred_count++; | |
198 } | |
199 | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
200 /* -Werror= may set a warning option to enable a warning that is emitted |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
201 by the preprocessor. Set any corresponding flag in cpp_opts. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
202 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
203 static void |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
204 warning_as_error_callback (int option_index) |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
205 { |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
206 switch (option_index) |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
207 { |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
208 default: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
209 /* Ignore options not associated with the preprocessor. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
210 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
211 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
212 case OPT_Wdeprecated: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
213 cpp_opts->warn_deprecated = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
214 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
215 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
216 case OPT_Wcomment: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
217 case OPT_Wcomments: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
218 cpp_opts->warn_comments = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
219 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
220 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
221 case OPT_Wtrigraphs: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
222 cpp_opts->warn_trigraphs = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
223 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
224 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
225 case OPT_Wmultichar: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
226 cpp_opts->warn_multichar = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
227 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
228 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
229 case OPT_Wtraditional: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
230 cpp_opts->warn_traditional = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
231 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
232 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
233 case OPT_Wlong_long: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
234 cpp_opts->warn_long_long = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
235 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
236 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
237 case OPT_Wendif_labels: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
238 cpp_opts->warn_endif_labels = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
239 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
240 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
241 case OPT_Wvariadic_macros: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
242 /* Set the local flag that is used later to update cpp_opts. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
243 warn_variadic_macros = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
244 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
245 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
246 case OPT_Wbuiltin_macro_redefined: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
247 cpp_opts->warn_builtin_macro_redefined = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
248 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
249 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
250 case OPT_Wundef: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
251 cpp_opts->warn_undef = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
252 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
253 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
254 case OPT_Wunused_macros: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
255 /* Set the local flag that is used later to update cpp_opts. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
256 warn_unused_macros = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
257 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
258 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
259 case OPT_Wc___compat: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
260 /* Add warnings in the same way as c_common_handle_option below. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
261 if (warn_enum_compare == -1) |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
262 warn_enum_compare = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
263 if (warn_jump_misses_init == -1) |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
264 warn_jump_misses_init = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
265 cpp_opts->warn_cxx_operator_names = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
266 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
267 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
268 case OPT_Wnormalized_: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
269 inform (input_location, "-Werror=normalized=: Set -Wnormalized=nfc"); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
270 cpp_opts->warn_normalize = normalized_C; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
271 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
272 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
273 case OPT_Winvalid_pch: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
274 cpp_opts->warn_invalid_pch = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
275 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
276 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
277 case OPT_Wcpp: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
278 /* Handled by standard diagnostics using the option's associated |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
279 boolean variable. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
280 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
281 } |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
282 } |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
283 |
0 | 284 /* Common initialization before parsing options. */ |
285 unsigned int | |
286 c_common_init_options (unsigned int argc, const char **argv) | |
287 { | |
288 static const unsigned int lang_flags[] = {CL_C, CL_ObjC, CL_CXX, CL_ObjCXX}; | |
289 unsigned int i, result; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
290 struct cpp_callbacks *cb; |
0 | 291 |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
292 /* Register callback for warnings enabled by -Werror=. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
293 register_warning_as_error_callback (warning_as_error_callback); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
294 |
0 | 295 /* This is conditionalized only because that is the way the front |
296 ends used to do it. Maybe this should be unconditional? */ | |
297 if (c_dialect_cxx ()) | |
298 { | |
299 /* By default wrap lines at 80 characters. Is getenv | |
300 ("COLUMNS") preferable? */ | |
301 diagnostic_line_cutoff (global_dc) = 80; | |
302 /* By default, emit location information once for every | |
303 diagnostic message. */ | |
304 diagnostic_prefixing_rule (global_dc) = DIAGNOSTICS_SHOW_PREFIX_ONCE; | |
305 } | |
306 | |
307 parse_in = cpp_create_reader (c_dialect_cxx () ? CLK_GNUCXX: CLK_GNUC89, | |
308 ident_hash, line_table); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
309 cb = cpp_get_callbacks (parse_in); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
310 cb->error = c_cpp_error; |
0 | 311 |
312 cpp_opts = cpp_get_options (parse_in); | |
313 cpp_opts->dollars_in_ident = DOLLARS_IN_IDENTIFIERS; | |
314 cpp_opts->objc = c_dialect_objc (); | |
315 | |
316 /* Reset to avoid warnings on internal definitions. We set it just | |
317 before passing on command-line options to cpplib. */ | |
318 cpp_opts->warn_dollars = 0; | |
319 | |
320 flag_exceptions = c_dialect_cxx (); | |
321 warn_pointer_arith = c_dialect_cxx (); | |
322 warn_write_strings = c_dialect_cxx(); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
323 flag_warn_unused_result = true; |
0 | 324 |
325 /* By default, C99-like requirements for complex multiply and divide. */ | |
326 flag_complex_method = 2; | |
327 | |
328 deferred_opts = XNEWVEC (struct deferred_opt, argc); | |
329 | |
330 result = lang_flags[c_language]; | |
331 | |
332 if (c_language == clk_c) | |
333 { | |
334 /* If preprocessing assembly language, accept any of the C-family | |
335 front end options since the driver may pass them through. */ | |
336 for (i = 1; i < argc; i++) | |
337 if (! strcmp (argv[i], "-lang-asm")) | |
338 { | |
339 result |= CL_C | CL_ObjC | CL_CXX | CL_ObjCXX; | |
340 break; | |
341 } | |
342 } | |
343 | |
344 return result; | |
345 } | |
346 | |
347 /* Handle switch SCODE with argument ARG. VALUE is true, unless no- | |
348 form of an -f or -W option was given. Returns 0 if the switch was | |
349 invalid, a negative number to prevent language-independent | |
350 processing in toplev.c (a hack necessary for the short-term). */ | |
351 int | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
352 c_common_handle_option (size_t scode, const char *arg, int value, |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
353 int kind) |
0 | 354 { |
355 const struct cl_option *option = &cl_options[scode]; | |
356 enum opt_code code = (enum opt_code) scode; | |
357 int result = 1; | |
358 | |
359 /* Prevent resetting the language standard to a C dialect when the driver | |
360 has already determined that we're looking at assembler input. */ | |
361 bool preprocessing_asm_p = (cpp_get_options (parse_in)->lang == CLK_ASM); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
362 |
0 | 363 switch (code) |
364 { | |
365 default: | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
366 if (cl_options[code].flags & c_family_lang_mask) |
0 | 367 { |
368 if ((option->flags & CL_TARGET) | |
369 && ! targetcm.handle_c_option (scode, arg, value)) | |
370 result = 0; | |
371 break; | |
372 } | |
373 result = 0; | |
374 break; | |
375 | |
376 case OPT__output_pch_: | |
377 pch_file = arg; | |
378 break; | |
379 | |
380 case OPT_A: | |
381 defer_opt (code, arg); | |
382 break; | |
383 | |
384 case OPT_C: | |
385 cpp_opts->discard_comments = 0; | |
386 break; | |
387 | |
388 case OPT_CC: | |
389 cpp_opts->discard_comments = 0; | |
390 cpp_opts->discard_comments_in_macro_exp = 0; | |
391 break; | |
392 | |
393 case OPT_D: | |
394 defer_opt (code, arg); | |
395 break; | |
396 | |
397 case OPT_E: | |
398 flag_preprocess_only = 1; | |
399 break; | |
400 | |
401 case OPT_H: | |
402 cpp_opts->print_include_names = 1; | |
403 break; | |
404 | |
405 case OPT_F: | |
406 TARGET_OPTF (xstrdup (arg)); | |
407 break; | |
408 | |
409 case OPT_I: | |
410 if (strcmp (arg, "-")) | |
411 add_path (xstrdup (arg), BRACKET, 0, true); | |
412 else | |
413 { | |
414 if (quote_chain_split) | |
415 error ("-I- specified twice"); | |
416 quote_chain_split = true; | |
417 split_quote_chain (); | |
418 inform (input_location, "obsolete option -I- used, please use -iquote instead"); | |
419 } | |
420 break; | |
421 | |
422 case OPT_M: | |
423 case OPT_MM: | |
424 /* When doing dependencies with -M or -MM, suppress normal | |
425 preprocessed output, but still do -dM etc. as software | |
426 depends on this. Preprocessed output does occur if -MD, -MMD | |
427 or environment var dependency generation is used. */ | |
428 cpp_opts->deps.style = (code == OPT_M ? DEPS_SYSTEM: DEPS_USER); | |
429 flag_no_output = 1; | |
430 break; | |
431 | |
432 case OPT_MD: | |
433 case OPT_MMD: | |
434 cpp_opts->deps.style = (code == OPT_MD ? DEPS_SYSTEM: DEPS_USER); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
435 cpp_opts->deps.need_preprocessor_output = true; |
0 | 436 deps_file = arg; |
437 break; | |
438 | |
439 case OPT_MF: | |
440 deps_seen = true; | |
441 deps_file = arg; | |
442 break; | |
443 | |
444 case OPT_MG: | |
445 deps_seen = true; | |
446 cpp_opts->deps.missing_files = true; | |
447 break; | |
448 | |
449 case OPT_MP: | |
450 deps_seen = true; | |
451 cpp_opts->deps.phony_targets = true; | |
452 break; | |
453 | |
454 case OPT_MQ: | |
455 case OPT_MT: | |
456 deps_seen = true; | |
457 defer_opt (code, arg); | |
458 break; | |
459 | |
460 case OPT_P: | |
461 flag_no_line_commands = 1; | |
462 break; | |
463 | |
464 case OPT_fworking_directory: | |
465 flag_working_directory = value; | |
466 break; | |
467 | |
468 case OPT_U: | |
469 defer_opt (code, arg); | |
470 break; | |
471 | |
472 case OPT_Wall: | |
473 warn_unused = value; | |
474 set_Wformat (value); | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
475 handle_option (OPT_Wimplicit, value, NULL, c_family_lang_mask, kind); |
0 | 476 warn_char_subscripts = value; |
477 warn_missing_braces = value; | |
478 warn_parentheses = value; | |
479 warn_return_type = value; | |
480 warn_sequence_point = value; /* Was C only. */ | |
481 warn_switch = value; | |
482 if (warn_strict_aliasing == -1) | |
483 set_Wstrict_aliasing (value); | |
484 warn_address = value; | |
485 if (warn_strict_overflow == -1) | |
486 warn_strict_overflow = value; | |
487 warn_array_bounds = value; | |
488 warn_volatile_register_var = value; | |
489 | |
490 /* Only warn about unknown pragmas that are not in system | |
491 headers. */ | |
492 warn_unknown_pragmas = value; | |
493 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
494 warn_uninitialized = value; |
0 | 495 |
496 if (!c_dialect_cxx ()) | |
497 { | |
498 /* We set this to 2 here, but 1 in -Wmain, so -ffreestanding | |
499 can turn it off only if it's not explicit. */ | |
500 if (warn_main == -1) | |
501 warn_main = (value ? 2 : 0); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
502 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
503 /* In C, -Wall turns on -Wenum-compare, which we do here. |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
504 In C++ it is on by default, which is done in |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
505 c_common_post_options. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
506 if (warn_enum_compare == -1) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
507 warn_enum_compare = value; |
0 | 508 } |
509 else | |
510 { | |
511 /* C++-specific warnings. */ | |
512 warn_sign_compare = value; | |
513 warn_reorder = value; | |
514 warn_cxx0x_compat = value; | |
515 } | |
516 | |
517 cpp_opts->warn_trigraphs = value; | |
518 cpp_opts->warn_comments = value; | |
519 cpp_opts->warn_num_sign_change = value; | |
520 | |
521 if (warn_pointer_sign == -1) | |
522 warn_pointer_sign = value; | |
523 break; | |
524 | |
525 case OPT_Wbuiltin_macro_redefined: | |
526 cpp_opts->warn_builtin_macro_redefined = value; | |
527 break; | |
528 | |
529 case OPT_Wcomment: | |
530 case OPT_Wcomments: | |
531 cpp_opts->warn_comments = value; | |
532 break; | |
533 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
534 case OPT_Wc___compat: |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
535 /* Because -Wenum-compare is the default in C++, -Wc++-compat |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
536 implies -Wenum-compare. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
537 if (warn_enum_compare == -1 && value) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
538 warn_enum_compare = value; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
539 /* Because C++ always warns about a goto which misses an |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
540 initialization, -Wc++-compat turns on -Wjump-misses-init. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
541 if (warn_jump_misses_init == -1 && value) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
542 warn_jump_misses_init = value; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
543 cpp_opts->warn_cxx_operator_names = value; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
544 break; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
545 |
0 | 546 case OPT_Wdeprecated: |
547 cpp_opts->warn_deprecated = value; | |
548 break; | |
549 | |
550 case OPT_Wendif_labels: | |
551 cpp_opts->warn_endif_labels = value; | |
552 break; | |
553 | |
554 case OPT_Werror: | |
555 global_dc->warning_as_error_requested = value; | |
556 break; | |
557 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
558 case OPT_Werror_implicit_function_declaration: |
0 | 559 /* For backward compatibility, this is the same as |
560 -Werror=implicit-function-declaration. */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
561 enable_warning_as_error ("implicit-function-declaration", value, CL_C | CL_ObjC); |
0 | 562 break; |
563 | |
564 case OPT_Wformat: | |
565 set_Wformat (value); | |
566 break; | |
567 | |
568 case OPT_Wformat_: | |
569 set_Wformat (atoi (arg)); | |
570 break; | |
571 | |
572 case OPT_Wimplicit: | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
573 gcc_assert (value == 0 || value == 1); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
574 if (warn_implicit_int == -1) |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
575 handle_option (OPT_Wimplicit_int, value, NULL, |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
576 c_family_lang_mask, kind); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
577 if (warn_implicit_function_declaration == -1) |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
578 handle_option (OPT_Wimplicit_function_declaration, value, NULL, |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
579 c_family_lang_mask, kind); |
0 | 580 break; |
581 | |
582 case OPT_Wimport: | |
583 /* Silently ignore for now. */ | |
584 break; | |
585 | |
586 case OPT_Winvalid_pch: | |
587 cpp_opts->warn_invalid_pch = value; | |
588 break; | |
589 | |
590 case OPT_Wmissing_include_dirs: | |
591 cpp_opts->warn_missing_include_dirs = value; | |
592 break; | |
593 | |
594 case OPT_Wmultichar: | |
595 cpp_opts->warn_multichar = value; | |
596 break; | |
597 | |
598 case OPT_Wnormalized_: | |
599 if (!value || (arg && strcasecmp (arg, "none") == 0)) | |
600 cpp_opts->warn_normalize = normalized_none; | |
601 else if (!arg || strcasecmp (arg, "nfkc") == 0) | |
602 cpp_opts->warn_normalize = normalized_KC; | |
603 else if (strcasecmp (arg, "id") == 0) | |
604 cpp_opts->warn_normalize = normalized_identifier_C; | |
605 else if (strcasecmp (arg, "nfc") == 0) | |
606 cpp_opts->warn_normalize = normalized_C; | |
607 else | |
608 error ("argument %qs to %<-Wnormalized%> not recognized", arg); | |
609 break; | |
610 | |
611 case OPT_Wreturn_type: | |
612 warn_return_type = value; | |
613 break; | |
614 | |
615 case OPT_Wstrict_null_sentinel: | |
616 warn_strict_null_sentinel = value; | |
617 break; | |
618 | |
619 case OPT_Wtraditional: | |
620 cpp_opts->warn_traditional = value; | |
621 break; | |
622 | |
623 case OPT_Wtrigraphs: | |
624 cpp_opts->warn_trigraphs = value; | |
625 break; | |
626 | |
627 case OPT_Wundef: | |
628 cpp_opts->warn_undef = value; | |
629 break; | |
630 | |
631 case OPT_Wunknown_pragmas: | |
632 /* Set to greater than 1, so that even unknown pragmas in | |
633 system headers will be warned about. */ | |
634 warn_unknown_pragmas = value * 2; | |
635 break; | |
636 | |
637 case OPT_Wunused_macros: | |
638 warn_unused_macros = value; | |
639 break; | |
640 | |
641 case OPT_Wvariadic_macros: | |
642 warn_variadic_macros = value; | |
643 break; | |
644 | |
645 case OPT_Wwrite_strings: | |
646 warn_write_strings = value; | |
647 break; | |
648 | |
649 case OPT_Weffc__: | |
650 warn_ecpp = value; | |
651 if (value) | |
652 warn_nonvdtor = true; | |
653 break; | |
654 | |
655 case OPT_ansi: | |
656 if (!c_dialect_cxx ()) | |
657 set_std_c89 (false, true); | |
658 else | |
659 set_std_cxx98 (true); | |
660 break; | |
661 | |
662 case OPT_d: | |
663 handle_OPT_d (arg); | |
664 break; | |
665 | |
666 case OPT_fcond_mismatch: | |
667 if (!c_dialect_cxx ()) | |
668 { | |
669 flag_cond_mismatch = value; | |
670 break; | |
671 } | |
672 /* Fall through. */ | |
673 | |
674 case OPT_fall_virtual: | |
675 case OPT_falt_external_templates: | |
676 case OPT_fenum_int_equiv: | |
677 case OPT_fexternal_templates: | |
678 case OPT_fguiding_decls: | |
679 case OPT_fhonor_std: | |
680 case OPT_fhuge_objects: | |
681 case OPT_flabels_ok: | |
682 case OPT_fname_mangling_version_: | |
683 case OPT_fnew_abi: | |
684 case OPT_fnonnull_objects: | |
685 case OPT_fsquangle: | |
686 case OPT_fstrict_prototype: | |
687 case OPT_fthis_is_variable: | |
688 case OPT_fvtable_thunks: | |
689 case OPT_fxref: | |
690 case OPT_fvtable_gc: | |
691 warning (0, "switch %qs is no longer supported", option->opt_text); | |
692 break; | |
693 | |
694 case OPT_faccess_control: | |
695 flag_access_control = value; | |
696 break; | |
697 | |
698 case OPT_fasm: | |
699 flag_no_asm = !value; | |
700 break; | |
701 | |
702 case OPT_fbuiltin: | |
703 flag_no_builtin = !value; | |
704 break; | |
705 | |
706 case OPT_fbuiltin_: | |
707 if (value) | |
708 result = 0; | |
709 else | |
710 disable_builtin_function (arg); | |
711 break; | |
712 | |
713 case OPT_fdirectives_only: | |
714 cpp_opts->directives_only = value; | |
715 break; | |
716 | |
717 case OPT_fdollars_in_identifiers: | |
718 cpp_opts->dollars_in_ident = value; | |
719 break; | |
720 | |
721 case OPT_ffreestanding: | |
722 value = !value; | |
723 /* Fall through.... */ | |
724 case OPT_fhosted: | |
725 flag_hosted = value; | |
726 flag_no_builtin = !value; | |
727 break; | |
728 | |
729 case OPT_fshort_double: | |
730 flag_short_double = value; | |
731 break; | |
732 | |
733 case OPT_fshort_enums: | |
734 flag_short_enums = value; | |
735 break; | |
736 | |
737 case OPT_fshort_wchar: | |
738 flag_short_wchar = value; | |
739 break; | |
740 | |
741 case OPT_fsigned_bitfields: | |
742 flag_signed_bitfields = value; | |
743 break; | |
744 | |
745 case OPT_fsigned_char: | |
746 flag_signed_char = value; | |
747 break; | |
748 | |
749 case OPT_funsigned_bitfields: | |
750 flag_signed_bitfields = !value; | |
751 break; | |
752 | |
753 case OPT_funsigned_char: | |
754 flag_signed_char = !value; | |
755 break; | |
756 | |
757 case OPT_fcheck_new: | |
758 flag_check_new = value; | |
759 break; | |
760 | |
761 case OPT_fconserve_space: | |
762 flag_conserve_space = value; | |
763 break; | |
764 | |
765 case OPT_fconstant_string_class_: | |
766 constant_string_class_name = arg; | |
767 break; | |
768 | |
769 case OPT_fdefault_inline: | |
770 flag_default_inline = value; | |
771 break; | |
772 | |
773 case OPT_felide_constructors: | |
774 flag_elide_constructors = value; | |
775 break; | |
776 | |
777 case OPT_fenforce_eh_specs: | |
778 flag_enforce_eh_specs = value; | |
779 break; | |
780 | |
781 case OPT_fextended_identifiers: | |
782 cpp_opts->extended_identifiers = value; | |
783 break; | |
784 | |
785 case OPT_ffor_scope: | |
786 flag_new_for_scope = value; | |
787 break; | |
788 | |
789 case OPT_fgnu_keywords: | |
790 flag_no_gnu_keywords = !value; | |
791 break; | |
792 | |
793 case OPT_fgnu_runtime: | |
794 flag_next_runtime = !value; | |
795 break; | |
796 | |
797 case OPT_fhandle_exceptions: | |
798 warning (0, "-fhandle-exceptions has been renamed -fexceptions (and is now on by default)"); | |
799 flag_exceptions = value; | |
800 break; | |
801 | |
802 case OPT_fimplement_inlines: | |
803 flag_implement_inlines = value; | |
804 break; | |
805 | |
806 case OPT_fimplicit_inline_templates: | |
807 flag_implicit_inline_templates = value; | |
808 break; | |
809 | |
810 case OPT_fimplicit_templates: | |
811 flag_implicit_templates = value; | |
812 break; | |
813 | |
814 case OPT_flax_vector_conversions: | |
815 flag_lax_vector_conversions = value; | |
816 break; | |
817 | |
818 case OPT_fms_extensions: | |
819 flag_ms_extensions = value; | |
820 break; | |
821 | |
822 case OPT_fnext_runtime: | |
823 flag_next_runtime = value; | |
824 break; | |
825 | |
826 case OPT_fnil_receivers: | |
827 flag_nil_receivers = value; | |
828 break; | |
829 | |
830 case OPT_fnonansi_builtins: | |
831 flag_no_nonansi_builtin = !value; | |
832 break; | |
833 | |
834 case OPT_foperator_names: | |
835 cpp_opts->operator_names = value; | |
836 break; | |
837 | |
838 case OPT_foptional_diags: | |
839 flag_optional_diags = value; | |
840 break; | |
841 | |
842 case OPT_fpch_deps: | |
843 cpp_opts->restore_pch_deps = value; | |
844 break; | |
845 | |
846 case OPT_fpch_preprocess: | |
847 flag_pch_preprocess = value; | |
848 break; | |
849 | |
850 case OPT_fpermissive: | |
851 flag_permissive = value; | |
852 break; | |
853 | |
854 case OPT_fpreprocessed: | |
855 cpp_opts->preprocessed = value; | |
856 break; | |
857 | |
858 case OPT_freplace_objc_classes: | |
859 flag_replace_objc_classes = value; | |
860 break; | |
861 | |
862 case OPT_frepo: | |
863 flag_use_repository = value; | |
864 if (value) | |
865 flag_implicit_templates = 0; | |
866 break; | |
867 | |
868 case OPT_frtti: | |
869 flag_rtti = value; | |
870 break; | |
871 | |
872 case OPT_fshow_column: | |
873 cpp_opts->show_column = value; | |
874 break; | |
875 | |
876 case OPT_fstats: | |
877 flag_detailed_statistics = value; | |
878 break; | |
879 | |
880 case OPT_ftabstop_: | |
881 /* It is documented that we silently ignore silly values. */ | |
882 if (value >= 1 && value <= 100) | |
883 cpp_opts->tabstop = value; | |
884 break; | |
885 | |
886 case OPT_fexec_charset_: | |
887 cpp_opts->narrow_charset = arg; | |
888 break; | |
889 | |
890 case OPT_fwide_exec_charset_: | |
891 cpp_opts->wide_charset = arg; | |
892 break; | |
893 | |
894 case OPT_finput_charset_: | |
895 cpp_opts->input_charset = arg; | |
896 break; | |
897 | |
898 case OPT_ftemplate_depth_: | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
899 /* Kept for backwards compatibility. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
900 case OPT_ftemplate_depth_eq: |
0 | 901 max_tinst_depth = value; |
902 break; | |
903 | |
904 case OPT_fuse_cxa_atexit: | |
905 flag_use_cxa_atexit = value; | |
906 break; | |
907 | |
908 case OPT_fuse_cxa_get_exception_ptr: | |
909 flag_use_cxa_get_exception_ptr = value; | |
910 break; | |
911 | |
912 case OPT_fvisibility_inlines_hidden: | |
913 visibility_options.inlines_hidden = value; | |
914 break; | |
915 | |
916 case OPT_fweak: | |
917 flag_weak = value; | |
918 break; | |
919 | |
920 case OPT_fthreadsafe_statics: | |
921 flag_threadsafe_statics = value; | |
922 break; | |
923 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
924 case OPT_fpretty_templates: |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
925 flag_pretty_templates = value; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
926 break; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
927 |
0 | 928 case OPT_fzero_link: |
929 flag_zero_link = value; | |
930 break; | |
931 | |
932 case OPT_gen_decls: | |
933 flag_gen_declaration = 1; | |
934 break; | |
935 | |
936 case OPT_femit_struct_debug_baseonly: | |
937 set_struct_debug_option ("base"); | |
938 break; | |
939 | |
940 case OPT_femit_struct_debug_reduced: | |
941 set_struct_debug_option ("dir:ord:sys,dir:gen:any,ind:base"); | |
942 break; | |
943 | |
944 case OPT_femit_struct_debug_detailed_: | |
945 set_struct_debug_option (arg); | |
946 break; | |
947 | |
948 case OPT_idirafter: | |
949 add_path (xstrdup (arg), AFTER, 0, true); | |
950 break; | |
951 | |
952 case OPT_imacros: | |
953 case OPT_include: | |
954 defer_opt (code, arg); | |
955 break; | |
956 | |
957 case OPT_imultilib: | |
958 imultilib = arg; | |
959 break; | |
960 | |
961 case OPT_iprefix: | |
962 iprefix = arg; | |
963 break; | |
964 | |
965 case OPT_iquote: | |
966 add_path (xstrdup (arg), QUOTE, 0, true); | |
967 break; | |
968 | |
969 case OPT_isysroot: | |
970 sysroot = arg; | |
971 break; | |
972 | |
973 case OPT_isystem: | |
974 add_path (xstrdup (arg), SYSTEM, 0, true); | |
975 break; | |
976 | |
977 case OPT_iwithprefix: | |
978 add_prefixed_path (arg, SYSTEM); | |
979 break; | |
980 | |
981 case OPT_iwithprefixbefore: | |
982 add_prefixed_path (arg, BRACKET); | |
983 break; | |
984 | |
985 case OPT_lang_asm: | |
986 cpp_set_lang (parse_in, CLK_ASM); | |
987 cpp_opts->dollars_in_ident = false; | |
988 break; | |
989 | |
990 case OPT_lang_objc: | |
991 cpp_opts->objc = 1; | |
992 break; | |
993 | |
994 case OPT_nostdinc: | |
995 std_inc = false; | |
996 break; | |
997 | |
998 case OPT_nostdinc__: | |
999 std_cxx_inc = false; | |
1000 break; | |
1001 | |
1002 case OPT_o: | |
1003 if (!out_fname) | |
1004 out_fname = arg; | |
1005 else | |
1006 error ("output filename specified twice"); | |
1007 break; | |
1008 | |
1009 /* We need to handle the -pedantic switches here, rather than in | |
1010 c_common_post_options, so that a subsequent -Wno-endif-labels | |
1011 is not overridden. */ | |
1012 case OPT_pedantic_errors: | |
1013 case OPT_pedantic: | |
1014 cpp_opts->pedantic = 1; | |
1015 cpp_opts->warn_endif_labels = 1; | |
1016 if (warn_pointer_sign == -1) | |
1017 warn_pointer_sign = 1; | |
1018 if (warn_overlength_strings == -1) | |
1019 warn_overlength_strings = 1; | |
1020 if (warn_main == -1) | |
1021 warn_main = 2; | |
1022 break; | |
1023 | |
1024 case OPT_print_objc_runtime_info: | |
1025 print_struct_values = 1; | |
1026 break; | |
1027 | |
1028 case OPT_print_pch_checksum: | |
1029 c_common_print_pch_checksum (stdout); | |
1030 exit_after_options = true; | |
1031 break; | |
1032 | |
1033 case OPT_remap: | |
1034 cpp_opts->remap = 1; | |
1035 break; | |
1036 | |
1037 case OPT_std_c__98: | |
1038 case OPT_std_gnu__98: | |
1039 if (!preprocessing_asm_p) | |
1040 set_std_cxx98 (code == OPT_std_c__98 /* ISO */); | |
1041 break; | |
1042 | |
1043 case OPT_std_c__0x: | |
1044 case OPT_std_gnu__0x: | |
1045 if (!preprocessing_asm_p) | |
1046 set_std_cxx0x (code == OPT_std_c__0x /* ISO */); | |
1047 break; | |
1048 | |
1049 case OPT_std_c89: | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1050 case OPT_std_c90: |
0 | 1051 case OPT_std_iso9899_1990: |
1052 case OPT_std_iso9899_199409: | |
1053 if (!preprocessing_asm_p) | |
1054 set_std_c89 (code == OPT_std_iso9899_199409 /* c94 */, true /* ISO */); | |
1055 break; | |
1056 | |
1057 case OPT_std_gnu89: | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1058 case OPT_std_gnu90: |
0 | 1059 if (!preprocessing_asm_p) |
1060 set_std_c89 (false /* c94 */, false /* ISO */); | |
1061 break; | |
1062 | |
1063 case OPT_std_c99: | |
1064 case OPT_std_c9x: | |
1065 case OPT_std_iso9899_1999: | |
1066 case OPT_std_iso9899_199x: | |
1067 if (!preprocessing_asm_p) | |
1068 set_std_c99 (true /* ISO */); | |
1069 break; | |
1070 | |
1071 case OPT_std_gnu99: | |
1072 case OPT_std_gnu9x: | |
1073 if (!preprocessing_asm_p) | |
1074 set_std_c99 (false /* ISO */); | |
1075 break; | |
1076 | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1077 case OPT_std_c1x: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1078 if (!preprocessing_asm_p) |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1079 set_std_c1x (true /* ISO */); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1080 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1081 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1082 case OPT_std_gnu1x: |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1083 if (!preprocessing_asm_p) |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1084 set_std_c1x (false /* ISO */); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1085 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1086 |
0 | 1087 case OPT_trigraphs: |
1088 cpp_opts->trigraphs = 1; | |
1089 break; | |
1090 | |
1091 case OPT_traditional_cpp: | |
1092 cpp_opts->traditional = 1; | |
1093 break; | |
1094 | |
1095 case OPT_undef: | |
1096 flag_undef = 1; | |
1097 break; | |
1098 | |
1099 case OPT_v: | |
1100 verbose = true; | |
1101 break; | |
1102 | |
1103 case OPT_Wabi: | |
1104 warn_psabi = value; | |
1105 break; | |
1106 } | |
1107 | |
1108 return result; | |
1109 } | |
1110 | |
1111 /* Post-switch processing. */ | |
1112 bool | |
1113 c_common_post_options (const char **pfilename) | |
1114 { | |
1115 struct cpp_callbacks *cb; | |
1116 | |
1117 /* Canonicalize the input and output filenames. */ | |
1118 if (in_fnames == NULL) | |
1119 { | |
1120 in_fnames = XNEWVEC (const char *, 1); | |
1121 in_fnames[0] = ""; | |
1122 } | |
1123 else if (strcmp (in_fnames[0], "-") == 0) | |
1124 in_fnames[0] = ""; | |
1125 | |
1126 if (out_fname == NULL || !strcmp (out_fname, "-")) | |
1127 out_fname = ""; | |
1128 | |
1129 if (cpp_opts->deps.style == DEPS_NONE) | |
1130 check_deps_environment_vars (); | |
1131 | |
1132 handle_deferred_opts (); | |
1133 | |
1134 sanitize_cpp_opts (); | |
1135 | |
1136 register_include_chains (parse_in, sysroot, iprefix, imultilib, | |
1137 std_inc, std_cxx_inc && c_dialect_cxx (), verbose); | |
1138 | |
1139 #ifdef C_COMMON_OVERRIDE_OPTIONS | |
1140 /* Some machines may reject certain combinations of C | |
1141 language-specific options. */ | |
1142 C_COMMON_OVERRIDE_OPTIONS; | |
1143 #endif | |
1144 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1145 /* Excess precision other than "fast" requires front-end |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1146 support. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1147 if (c_dialect_cxx ()) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1148 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1149 if (flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1150 && TARGET_FLT_EVAL_METHOD_NON_DEFAULT) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1151 sorry ("-fexcess-precision=standard for C++"); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1152 flag_excess_precision_cmdline = EXCESS_PRECISION_FAST; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1153 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1154 else if (flag_excess_precision_cmdline == EXCESS_PRECISION_DEFAULT) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1155 flag_excess_precision_cmdline = (flag_iso |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1156 ? EXCESS_PRECISION_STANDARD |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1157 : EXCESS_PRECISION_FAST); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1158 |
0 | 1159 /* By default we use C99 inline semantics in GNU99 or C99 mode. C99 |
1160 inline semantics are not supported in GNU89 or C89 mode. */ | |
1161 if (flag_gnu89_inline == -1) | |
1162 flag_gnu89_inline = !flag_isoc99; | |
1163 else if (!flag_gnu89_inline && !flag_isoc99) | |
1164 error ("-fno-gnu89-inline is only supported in GNU99 or C99 mode"); | |
1165 | |
1166 /* Default to ObjC sjlj exception handling if NeXT runtime. */ | |
1167 if (flag_objc_sjlj_exceptions < 0) | |
1168 flag_objc_sjlj_exceptions = flag_next_runtime; | |
1169 if (flag_objc_exceptions && !flag_objc_sjlj_exceptions) | |
1170 flag_exceptions = 1; | |
1171 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1172 /* -Wextra implies the following flags |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1173 unless explicitly overridden. */ |
0 | 1174 if (warn_type_limits == -1) |
1175 warn_type_limits = extra_warnings; | |
1176 if (warn_clobbered == -1) | |
1177 warn_clobbered = extra_warnings; | |
1178 if (warn_empty_body == -1) | |
1179 warn_empty_body = extra_warnings; | |
1180 if (warn_sign_compare == -1) | |
1181 warn_sign_compare = extra_warnings; | |
1182 if (warn_missing_field_initializers == -1) | |
1183 warn_missing_field_initializers = extra_warnings; | |
1184 if (warn_missing_parameter_type == -1) | |
1185 warn_missing_parameter_type = extra_warnings; | |
1186 if (warn_old_style_declaration == -1) | |
1187 warn_old_style_declaration = extra_warnings; | |
1188 if (warn_override_init == -1) | |
1189 warn_override_init = extra_warnings; | |
1190 if (warn_ignored_qualifiers == -1) | |
1191 warn_ignored_qualifiers = extra_warnings; | |
1192 | |
1193 /* -Wpointer-sign is disabled by default, but it is enabled if any | |
1194 of -Wall or -pedantic are given. */ | |
1195 if (warn_pointer_sign == -1) | |
1196 warn_pointer_sign = 0; | |
1197 | |
1198 if (warn_strict_aliasing == -1) | |
1199 warn_strict_aliasing = 0; | |
1200 if (warn_strict_overflow == -1) | |
1201 warn_strict_overflow = 0; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1202 if (warn_jump_misses_init == -1) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1203 warn_jump_misses_init = 0; |
0 | 1204 |
1205 /* -Woverlength-strings is off by default, but is enabled by -pedantic. | |
1206 It is never enabled in C++, as the minimum limit is not normative | |
1207 in that standard. */ | |
1208 if (warn_overlength_strings == -1 || c_dialect_cxx ()) | |
1209 warn_overlength_strings = 0; | |
1210 | |
1211 /* Wmain is enabled by default in C++ but not in C. */ | |
1212 /* Wmain is disabled by default for -ffreestanding (!flag_hosted), | |
1213 even if -Wall was given (warn_main will be 2 if set by -Wall, 1 | |
1214 if set by -Wmain). */ | |
1215 if (warn_main == -1) | |
1216 warn_main = (c_dialect_cxx () && flag_hosted) ? 1 : 0; | |
1217 else if (warn_main == 2) | |
1218 warn_main = flag_hosted ? 1 : 0; | |
1219 | |
1220 /* In C, -Wconversion enables -Wsign-conversion (unless disabled | |
1221 through -Wno-sign-conversion). While in C++, | |
1222 -Wsign-conversion needs to be requested explicitly. */ | |
1223 if (warn_sign_conversion == -1) | |
1224 warn_sign_conversion = (c_dialect_cxx ()) ? 0 : warn_conversion; | |
1225 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1226 /* In C, -Wall and -Wc++-compat enable -Wenum-compare, which we do |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1227 in c_common_handle_option; if it has not yet been set, it is |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1228 disabled by default. In C++, it is enabled by default. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1229 if (warn_enum_compare == -1) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1230 warn_enum_compare = c_dialect_cxx () ? 1 : 0; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1231 |
0 | 1232 /* -Wpacked-bitfield-compat is on by default for the C languages. The |
1233 warning is issued in stor-layout.c which is not part of the front-end so | |
1234 we need to selectively turn it on here. */ | |
1235 if (warn_packed_bitfield_compat == -1) | |
1236 warn_packed_bitfield_compat = 1; | |
1237 | |
1238 /* Special format checking options don't work without -Wformat; warn if | |
1239 they are used. */ | |
1240 if (!warn_format) | |
1241 { | |
1242 warning (OPT_Wformat_y2k, | |
1243 "-Wformat-y2k ignored without -Wformat"); | |
1244 warning (OPT_Wformat_extra_args, | |
1245 "-Wformat-extra-args ignored without -Wformat"); | |
1246 warning (OPT_Wformat_zero_length, | |
1247 "-Wformat-zero-length ignored without -Wformat"); | |
1248 warning (OPT_Wformat_nonliteral, | |
1249 "-Wformat-nonliteral ignored without -Wformat"); | |
1250 warning (OPT_Wformat_contains_nul, | |
1251 "-Wformat-contains-nul ignored without -Wformat"); | |
1252 warning (OPT_Wformat_security, | |
1253 "-Wformat-security ignored without -Wformat"); | |
1254 } | |
1255 | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1256 if (warn_implicit == -1) |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1257 warn_implicit = 0; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1258 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1259 if (warn_implicit_int == -1) |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1260 warn_implicit_int = 0; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1261 |
0 | 1262 /* -Wimplicit-function-declaration is enabled by default for C99. */ |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1263 if (warn_implicit_function_declaration == -1) |
0 | 1264 warn_implicit_function_declaration = flag_isoc99; |
1265 | |
1266 /* If we're allowing C++0x constructs, don't warn about C++0x | |
1267 compatibility problems. */ | |
1268 if (cxx_dialect == cxx0x) | |
1269 warn_cxx0x_compat = 0; | |
1270 | |
1271 if (flag_preprocess_only) | |
1272 { | |
1273 /* Open the output now. We must do so even if flag_no_output is | |
1274 on, because there may be other output than from the actual | |
1275 preprocessing (e.g. from -dM). */ | |
1276 if (out_fname[0] == '\0') | |
1277 out_stream = stdout; | |
1278 else | |
1279 out_stream = fopen (out_fname, "w"); | |
1280 | |
1281 if (out_stream == NULL) | |
1282 { | |
1283 fatal_error ("opening output file %s: %m", out_fname); | |
1284 return false; | |
1285 } | |
1286 | |
1287 if (num_in_fnames > 1) | |
1288 error ("too many filenames given. Type %s --help for usage", | |
1289 progname); | |
1290 | |
1291 init_pp_output (out_stream); | |
1292 } | |
1293 else | |
1294 { | |
1295 init_c_lex (); | |
1296 | |
1297 /* Yuk. WTF is this? I do know ObjC relies on it somewhere. */ | |
1298 input_location = UNKNOWN_LOCATION; | |
1299 } | |
1300 | |
1301 cb = cpp_get_callbacks (parse_in); | |
1302 cb->file_change = cb_file_change; | |
1303 cb->dir_change = cb_dir_change; | |
1304 cpp_post_options (parse_in); | |
1305 | |
1306 input_location = UNKNOWN_LOCATION; | |
1307 | |
1308 *pfilename = this_input_filename | |
1309 = cpp_read_main_file (parse_in, in_fnames[0]); | |
1310 /* Don't do any compilation or preprocessing if there is no input file. */ | |
1311 if (this_input_filename == NULL) | |
1312 { | |
1313 errorcount++; | |
1314 return false; | |
1315 } | |
1316 | |
1317 if (flag_working_directory | |
1318 && flag_preprocess_only && !flag_no_line_commands) | |
1319 pp_dir_change (parse_in, get_src_pwd ()); | |
1320 | |
1321 return flag_preprocess_only; | |
1322 } | |
1323 | |
1324 /* Front end initialization common to C, ObjC and C++. */ | |
1325 bool | |
1326 c_common_init (void) | |
1327 { | |
1328 /* Set up preprocessor arithmetic. Must be done after call to | |
1329 c_common_nodes_and_builtins for type nodes to be good. */ | |
1330 cpp_opts->precision = TYPE_PRECISION (intmax_type_node); | |
1331 cpp_opts->char_precision = TYPE_PRECISION (char_type_node); | |
1332 cpp_opts->int_precision = TYPE_PRECISION (integer_type_node); | |
1333 cpp_opts->wchar_precision = TYPE_PRECISION (wchar_type_node); | |
1334 cpp_opts->unsigned_wchar = TYPE_UNSIGNED (wchar_type_node); | |
1335 cpp_opts->bytes_big_endian = BYTES_BIG_ENDIAN; | |
1336 | |
1337 /* This can't happen until after wchar_precision and bytes_big_endian | |
1338 are known. */ | |
1339 cpp_init_iconv (parse_in); | |
1340 | |
1341 if (version_flag) | |
1342 c_common_print_pch_checksum (stderr); | |
1343 | |
1344 /* Has to wait until now so that cpplib has its hash table. */ | |
1345 init_pragma (); | |
1346 | |
1347 if (flag_preprocess_only) | |
1348 { | |
1349 finish_options (); | |
1350 preprocess_file (parse_in); | |
1351 return false; | |
1352 } | |
1353 | |
1354 return true; | |
1355 } | |
1356 | |
1357 /* Initialize the integrated preprocessor after debug output has been | |
1358 initialized; loop over each input file. */ | |
1359 void | |
1360 c_common_parse_file (int set_yydebug) | |
1361 { | |
1362 unsigned int i; | |
1363 | |
1364 if (set_yydebug) | |
1365 switch (c_language) | |
1366 { | |
1367 case clk_c: | |
1368 warning(0, "The C parser does not support -dy, option ignored"); | |
1369 break; | |
1370 case clk_objc: | |
1371 warning(0, | |
1372 "The Objective-C parser does not support -dy, option ignored"); | |
1373 break; | |
1374 case clk_cxx: | |
1375 warning(0, "The C++ parser does not support -dy, option ignored"); | |
1376 break; | |
1377 case clk_objcxx: | |
1378 warning(0, | |
1379 "The Objective-C++ parser does not support -dy, option ignored"); | |
1380 break; | |
1381 default: | |
1382 gcc_unreachable (); | |
1383 } | |
1384 | |
1385 i = 0; | |
1386 for (;;) | |
1387 { | |
1388 finish_options (); | |
1389 pch_init (); | |
1390 push_file_scope (); | |
1391 c_parse_file (); | |
1392 finish_file (); | |
1393 pop_file_scope (); | |
1394 /* And end the main input file, if the debug writer wants it */ | |
1395 if (debug_hooks->start_end_main_source_file) | |
1396 (*debug_hooks->end_source_file) (0); | |
1397 if (++i >= num_in_fnames) | |
1398 break; | |
1399 cpp_undef_all (parse_in); | |
1400 cpp_clear_file_cache (parse_in); | |
1401 this_input_filename | |
1402 = cpp_read_main_file (parse_in, in_fnames[i]); | |
1403 /* If an input file is missing, abandon further compilation. | |
1404 cpplib has issued a diagnostic. */ | |
1405 if (!this_input_filename) | |
1406 break; | |
1407 } | |
1408 } | |
1409 | |
1410 /* Common finish hook for the C, ObjC and C++ front ends. */ | |
1411 void | |
1412 c_common_finish (void) | |
1413 { | |
1414 FILE *deps_stream = NULL; | |
1415 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1416 /* Don't write the deps file if there are errors. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1417 if (cpp_opts->deps.style != DEPS_NONE && errorcount == 0) |
0 | 1418 { |
1419 /* If -M or -MM was seen without -MF, default output to the | |
1420 output stream. */ | |
1421 if (!deps_file) | |
1422 deps_stream = out_stream; | |
1423 else | |
1424 { | |
1425 deps_stream = fopen (deps_file, deps_append ? "a": "w"); | |
1426 if (!deps_stream) | |
1427 fatal_error ("opening dependency file %s: %m", deps_file); | |
1428 } | |
1429 } | |
1430 | |
1431 /* For performance, avoid tearing down cpplib's internal structures | |
1432 with cpp_destroy (). */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1433 cpp_finish (parse_in, deps_stream); |
0 | 1434 |
1435 if (deps_stream && deps_stream != out_stream | |
1436 && (ferror (deps_stream) || fclose (deps_stream))) | |
1437 fatal_error ("closing dependency file %s: %m", deps_file); | |
1438 | |
1439 if (out_stream && (ferror (out_stream) || fclose (out_stream))) | |
1440 fatal_error ("when writing output to %s: %m", out_fname); | |
1441 } | |
1442 | |
1443 /* Either of two environment variables can specify output of | |
1444 dependencies. Their value is either "OUTPUT_FILE" or "OUTPUT_FILE | |
1445 DEPS_TARGET", where OUTPUT_FILE is the file to write deps info to | |
1446 and DEPS_TARGET is the target to mention in the deps. They also | |
1447 result in dependency information being appended to the output file | |
1448 rather than overwriting it, and like Sun's compiler | |
1449 SUNPRO_DEPENDENCIES suppresses the dependency on the main file. */ | |
1450 static void | |
1451 check_deps_environment_vars (void) | |
1452 { | |
1453 char *spec; | |
1454 | |
1455 GET_ENVIRONMENT (spec, "DEPENDENCIES_OUTPUT"); | |
1456 if (spec) | |
1457 cpp_opts->deps.style = DEPS_USER; | |
1458 else | |
1459 { | |
1460 GET_ENVIRONMENT (spec, "SUNPRO_DEPENDENCIES"); | |
1461 if (spec) | |
1462 { | |
1463 cpp_opts->deps.style = DEPS_SYSTEM; | |
1464 cpp_opts->deps.ignore_main_file = true; | |
1465 } | |
1466 } | |
1467 | |
1468 if (spec) | |
1469 { | |
1470 /* Find the space before the DEPS_TARGET, if there is one. */ | |
1471 char *s = strchr (spec, ' '); | |
1472 if (s) | |
1473 { | |
1474 /* Let the caller perform MAKE quoting. */ | |
1475 defer_opt (OPT_MT, s + 1); | |
1476 *s = '\0'; | |
1477 } | |
1478 | |
1479 /* Command line -MF overrides environment variables and default. */ | |
1480 if (!deps_file) | |
1481 deps_file = spec; | |
1482 | |
1483 deps_append = 1; | |
1484 deps_seen = true; | |
1485 } | |
1486 } | |
1487 | |
1488 /* Handle deferred command line switches. */ | |
1489 static void | |
1490 handle_deferred_opts (void) | |
1491 { | |
1492 size_t i; | |
1493 struct deps *deps; | |
1494 | |
1495 /* Avoid allocating the deps buffer if we don't need it. | |
1496 (This flag may be true without there having been -MT or -MQ | |
1497 options, but we'll still need the deps buffer.) */ | |
1498 if (!deps_seen) | |
1499 return; | |
1500 | |
1501 deps = cpp_get_deps (parse_in); | |
1502 | |
1503 for (i = 0; i < deferred_count; i++) | |
1504 { | |
1505 struct deferred_opt *opt = &deferred_opts[i]; | |
1506 | |
1507 if (opt->code == OPT_MT || opt->code == OPT_MQ) | |
1508 deps_add_target (deps, opt->arg, opt->code == OPT_MQ); | |
1509 } | |
1510 } | |
1511 | |
1512 /* These settings are appropriate for GCC, but not necessarily so for | |
1513 cpplib as a library. */ | |
1514 static void | |
1515 sanitize_cpp_opts (void) | |
1516 { | |
1517 /* If we don't know what style of dependencies to output, complain | |
1518 if any other dependency switches have been given. */ | |
1519 if (deps_seen && cpp_opts->deps.style == DEPS_NONE) | |
1520 error ("to generate dependencies you must specify either -M or -MM"); | |
1521 | |
1522 /* -dM and dependencies suppress normal output; do it here so that | |
1523 the last -d[MDN] switch overrides earlier ones. */ | |
1524 if (flag_dump_macros == 'M') | |
1525 flag_no_output = 1; | |
1526 | |
1527 /* By default, -fdirectives-only implies -dD. This allows subsequent phases | |
1528 to perform proper macro expansion. */ | |
1529 if (cpp_opts->directives_only && !cpp_opts->preprocessed && !flag_dump_macros) | |
1530 flag_dump_macros = 'D'; | |
1531 | |
1532 /* Disable -dD, -dN and -dI if normal output is suppressed. Allow | |
1533 -dM since at least glibc relies on -M -dM to work. */ | |
1534 /* Also, flag_no_output implies flag_no_line_commands, always. */ | |
1535 if (flag_no_output) | |
1536 { | |
1537 if (flag_dump_macros != 'M') | |
1538 flag_dump_macros = 0; | |
1539 flag_dump_includes = 0; | |
1540 flag_no_line_commands = 1; | |
1541 } | |
1542 else if (cpp_opts->deps.missing_files) | |
1543 error ("-MG may only be used with -M or -MM"); | |
1544 | |
1545 cpp_opts->unsigned_char = !flag_signed_char; | |
1546 cpp_opts->stdc_0_in_system_headers = STDC_0_IN_SYSTEM_HEADERS; | |
1547 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1548 /* Wlong-long is disabled by default. It is enabled by: |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1549 [-pedantic | -Wtraditional] -std=[gnu|c]++98 ; or |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1550 [-pedantic | -Wtraditional] -std=non-c99 . |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1551 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1552 Either -Wlong-long or -Wno-long-long override any other settings. */ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1553 if (warn_long_long == -1) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1554 warn_long_long = ((pedantic || warn_traditional) |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1555 && (c_dialect_cxx () ? cxx_dialect == cxx98 : !flag_isoc99)); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1556 cpp_opts->warn_long_long = warn_long_long; |
0 | 1557 |
1558 /* Similarly with -Wno-variadic-macros. No check for c99 here, since | |
1559 this also turns off warnings about GCCs extension. */ | |
1560 cpp_opts->warn_variadic_macros | |
1561 = warn_variadic_macros && (pedantic || warn_traditional); | |
1562 | |
1563 /* If we're generating preprocessor output, emit current directory | |
1564 if explicitly requested or if debugging information is enabled. | |
1565 ??? Maybe we should only do it for debugging formats that | |
1566 actually output the current directory? */ | |
1567 if (flag_working_directory == -1) | |
1568 flag_working_directory = (debug_info_level != DINFO_LEVEL_NONE); | |
1569 | |
1570 if (cpp_opts->directives_only) | |
1571 { | |
1572 if (warn_unused_macros) | |
1573 error ("-fdirectives-only is incompatible with -Wunused_macros"); | |
1574 if (cpp_opts->traditional) | |
1575 error ("-fdirectives-only is incompatible with -traditional"); | |
1576 } | |
1577 } | |
1578 | |
1579 /* Add include path with a prefix at the front of its name. */ | |
1580 static void | |
1581 add_prefixed_path (const char *suffix, size_t chain) | |
1582 { | |
1583 char *path; | |
1584 const char *prefix; | |
1585 size_t prefix_len, suffix_len; | |
1586 | |
1587 suffix_len = strlen (suffix); | |
1588 prefix = iprefix ? iprefix : cpp_GCC_INCLUDE_DIR; | |
1589 prefix_len = iprefix ? strlen (iprefix) : cpp_GCC_INCLUDE_DIR_len; | |
1590 | |
1591 path = (char *) xmalloc (prefix_len + suffix_len + 1); | |
1592 memcpy (path, prefix, prefix_len); | |
1593 memcpy (path + prefix_len, suffix, suffix_len); | |
1594 path[prefix_len + suffix_len] = '\0'; | |
1595 | |
1596 add_path (path, chain, 0, false); | |
1597 } | |
1598 | |
1599 /* Handle -D, -U, -A, -imacros, and the first -include. */ | |
1600 static void | |
1601 finish_options (void) | |
1602 { | |
1603 if (!cpp_opts->preprocessed) | |
1604 { | |
1605 size_t i; | |
1606 | |
1607 cb_file_change (parse_in, | |
1608 linemap_add (line_table, LC_RENAME, 0, | |
1609 _("<built-in>"), 0)); | |
1610 | |
1611 cpp_init_builtins (parse_in, flag_hosted); | |
1612 c_cpp_builtins (parse_in); | |
1613 | |
1614 /* We're about to send user input to cpplib, so make it warn for | |
1615 things that we previously (when we sent it internal definitions) | |
1616 told it to not warn. | |
1617 | |
1618 C99 permits implementation-defined characters in identifiers. | |
1619 The documented meaning of -std= is to turn off extensions that | |
1620 conflict with the specified standard, and since a strictly | |
1621 conforming program cannot contain a '$', we do not condition | |
1622 their acceptance on the -std= setting. */ | |
1623 cpp_opts->warn_dollars = (cpp_opts->pedantic && !cpp_opts->c99); | |
1624 | |
1625 cb_file_change (parse_in, | |
1626 linemap_add (line_table, LC_RENAME, 0, | |
1627 _("<command-line>"), 0)); | |
1628 | |
1629 for (i = 0; i < deferred_count; i++) | |
1630 { | |
1631 struct deferred_opt *opt = &deferred_opts[i]; | |
1632 | |
1633 if (opt->code == OPT_D) | |
1634 cpp_define (parse_in, opt->arg); | |
1635 else if (opt->code == OPT_U) | |
1636 cpp_undef (parse_in, opt->arg); | |
1637 else if (opt->code == OPT_A) | |
1638 { | |
1639 if (opt->arg[0] == '-') | |
1640 cpp_unassert (parse_in, opt->arg + 1); | |
1641 else | |
1642 cpp_assert (parse_in, opt->arg); | |
1643 } | |
1644 } | |
1645 | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1646 /* Start the main input file, if the debug writer wants it. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1647 if (debug_hooks->start_end_main_source_file |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1648 && !flag_preprocess_only) |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1649 (*debug_hooks->start_source_file) (0, this_input_filename); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1650 |
0 | 1651 /* Handle -imacros after -D and -U. */ |
1652 for (i = 0; i < deferred_count; i++) | |
1653 { | |
1654 struct deferred_opt *opt = &deferred_opts[i]; | |
1655 | |
1656 if (opt->code == OPT_imacros | |
1657 && cpp_push_include (parse_in, opt->arg)) | |
1658 { | |
1659 /* Disable push_command_line_include callback for now. */ | |
1660 include_cursor = deferred_count + 1; | |
1661 cpp_scan_nooutput (parse_in); | |
1662 } | |
1663 } | |
1664 } | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1665 else |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1666 { |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1667 if (cpp_opts->directives_only) |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1668 cpp_init_special_builtins (parse_in); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1669 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1670 /* Start the main input file, if the debug writer wants it. */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1671 if (debug_hooks->start_end_main_source_file |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1672 && !flag_preprocess_only) |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1673 (*debug_hooks->start_source_file) (0, this_input_filename); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1674 } |
0 | 1675 |
1676 include_cursor = 0; | |
1677 push_command_line_include (); | |
1678 } | |
1679 | |
1680 /* Give CPP the next file given by -include, if any. */ | |
1681 static void | |
1682 push_command_line_include (void) | |
1683 { | |
1684 while (include_cursor < deferred_count) | |
1685 { | |
1686 struct deferred_opt *opt = &deferred_opts[include_cursor++]; | |
1687 | |
1688 if (!cpp_opts->preprocessed && opt->code == OPT_include | |
1689 && cpp_push_include (parse_in, opt->arg)) | |
1690 return; | |
1691 } | |
1692 | |
1693 if (include_cursor == deferred_count) | |
1694 { | |
1695 include_cursor++; | |
1696 /* -Wunused-macros should only warn about macros defined hereafter. */ | |
1697 cpp_opts->warn_unused_macros = warn_unused_macros; | |
1698 /* Restore the line map from <command line>. */ | |
1699 if (!cpp_opts->preprocessed) | |
1700 cpp_change_file (parse_in, LC_RENAME, this_input_filename); | |
1701 | |
1702 /* Set this here so the client can change the option if it wishes, | |
1703 and after stacking the main file so we don't trace the main file. */ | |
1704 line_table->trace_includes = cpp_opts->print_include_names; | |
1705 } | |
1706 } | |
1707 | |
1708 /* File change callback. Has to handle -include files. */ | |
1709 static void | |
1710 cb_file_change (cpp_reader * ARG_UNUSED (pfile), | |
1711 const struct line_map *new_map) | |
1712 { | |
1713 if (flag_preprocess_only) | |
1714 pp_file_change (new_map); | |
1715 else | |
1716 fe_file_change (new_map); | |
1717 | |
1718 if (new_map == 0 || (new_map->reason == LC_LEAVE && MAIN_FILE_P (new_map))) | |
1719 push_command_line_include (); | |
1720 } | |
1721 | |
1722 void | |
1723 cb_dir_change (cpp_reader * ARG_UNUSED (pfile), const char *dir) | |
1724 { | |
1725 if (!set_src_pwd (dir)) | |
1726 warning (0, "too late for # directive to set debug directory"); | |
1727 } | |
1728 | |
1729 /* Set the C 89 standard (with 1994 amendments if C94, without GNU | |
1730 extensions if ISO). There is no concept of gnu94. */ | |
1731 static void | |
1732 set_std_c89 (int c94, int iso) | |
1733 { | |
1734 cpp_set_lang (parse_in, c94 ? CLK_STDC94: iso ? CLK_STDC89: CLK_GNUC89); | |
1735 flag_iso = iso; | |
1736 flag_no_asm = iso; | |
1737 flag_no_gnu_keywords = iso; | |
1738 flag_no_nonansi_builtin = iso; | |
1739 flag_isoc94 = c94; | |
1740 flag_isoc99 = 0; | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1741 flag_isoc1x = 0; |
0 | 1742 } |
1743 | |
1744 /* Set the C 99 standard (without GNU extensions if ISO). */ | |
1745 static void | |
1746 set_std_c99 (int iso) | |
1747 { | |
1748 cpp_set_lang (parse_in, iso ? CLK_STDC99: CLK_GNUC99); | |
1749 flag_no_asm = iso; | |
1750 flag_no_nonansi_builtin = iso; | |
1751 flag_iso = iso; | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1752 flag_isoc1x = 0; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1753 flag_isoc99 = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1754 flag_isoc94 = 1; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1755 } |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1756 |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1757 /* Set the C 1X standard draft (without GNU extensions if ISO). */ |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1758 static void |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1759 set_std_c1x (int iso) |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1760 { |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1761 cpp_set_lang (parse_in, iso ? CLK_STDC1X: CLK_GNUC1X); |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1762 flag_no_asm = iso; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1763 flag_no_nonansi_builtin = iso; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1764 flag_iso = iso; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
1765 flag_isoc1x = 1; |
0 | 1766 flag_isoc99 = 1; |
1767 flag_isoc94 = 1; | |
1768 } | |
1769 | |
1770 /* Set the C++ 98 standard (without GNU extensions if ISO). */ | |
1771 static void | |
1772 set_std_cxx98 (int iso) | |
1773 { | |
1774 cpp_set_lang (parse_in, iso ? CLK_CXX98: CLK_GNUCXX); | |
1775 flag_no_gnu_keywords = iso; | |
1776 flag_no_nonansi_builtin = iso; | |
1777 flag_iso = iso; | |
1778 cxx_dialect = cxx98; | |
1779 } | |
1780 | |
1781 /* Set the C++ 0x working draft "standard" (without GNU extensions if ISO). */ | |
1782 static void | |
1783 set_std_cxx0x (int iso) | |
1784 { | |
1785 cpp_set_lang (parse_in, iso ? CLK_CXX0X: CLK_GNUCXX0X); | |
1786 flag_no_gnu_keywords = iso; | |
1787 flag_no_nonansi_builtin = iso; | |
1788 flag_iso = iso; | |
1789 cxx_dialect = cxx0x; | |
1790 } | |
1791 | |
1792 /* Args to -d specify what to dump. Silently ignore | |
1793 unrecognized options; they may be aimed at toplev.c. */ | |
1794 static void | |
1795 handle_OPT_d (const char *arg) | |
1796 { | |
1797 char c; | |
1798 | |
1799 while ((c = *arg++) != '\0') | |
1800 switch (c) | |
1801 { | |
1802 case 'M': /* Dump macros only. */ | |
1803 case 'N': /* Dump names. */ | |
1804 case 'D': /* Dump definitions. */ | |
1805 case 'U': /* Dump used macros. */ | |
1806 flag_dump_macros = c; | |
1807 break; | |
1808 | |
1809 case 'I': | |
1810 flag_dump_includes = 1; | |
1811 break; | |
1812 } | |
1813 } |