Mercurial > hg > CbC > CbC_gcc
annotate gcc/opts.c @ 144:8f4e72ab4e11
fix segmentation fault caused by nothing next cur_op to end
author | Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 23 Dec 2018 21:23:56 +0900 |
parents | 84e7813d76e9 |
children | 1830386684a0 |
rev | line source |
---|---|
0 | 1 /* Command line option handling. |
131 | 2 Copyright (C) 2002-2018 Free Software Foundation, Inc. |
0 | 3 Contributed by Neil Booth. |
4 | |
5 This file is part of GCC. | |
6 | |
7 GCC is free software; you can redistribute it and/or modify it under | |
8 the terms of the GNU General Public License as published by the Free | |
9 Software Foundation; either version 3, or (at your option) any later | |
10 version. | |
11 | |
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY | |
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with GCC; see the file COPYING3. If not see | |
19 <http://www.gnu.org/licenses/>. */ | |
20 | |
21 #include "config.h" | |
22 #include "system.h" | |
23 #include "intl.h" | |
24 #include "coretypes.h" | |
25 #include "opts.h" | |
111 | 26 #include "tm.h" |
0 | 27 #include "flags.h" |
28 #include "params.h" | |
29 #include "diagnostic.h" | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
30 #include "opts-diagnostic.h" |
111 | 31 #include "insn-attr-common.h" |
32 #include "common/common-target.h" | |
33 #include "spellcheck.h" | |
34 | |
35 static void set_Wstrict_aliasing (struct gcc_options *opts, int onoff); | |
36 | |
37 /* Indexed by enum debug_info_type. */ | |
38 const char *const debug_type_names[] = | |
39 { | |
131 | 40 "none", "stabs", "dwarf-2", "xcoff", "vms" |
111 | 41 }; |
0 | 42 |
43 /* Parse the -femit-struct-debug-detailed option value | |
44 and set the flag variables. */ | |
45 | |
46 #define MATCH( prefix, string ) \ | |
47 ((strncmp (prefix, string, sizeof prefix - 1) == 0) \ | |
48 ? ((string += sizeof prefix - 1), 1) : 0) | |
49 | |
50 void | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
51 set_struct_debug_option (struct gcc_options *opts, location_t loc, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
52 const char *spec) |
0 | 53 { |
54 /* various labels for comparison */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
55 static const char dfn_lbl[] = "dfn:", dir_lbl[] = "dir:", ind_lbl[] = "ind:"; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
56 static const char ord_lbl[] = "ord:", gen_lbl[] = "gen:"; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
57 static const char none_lbl[] = "none", any_lbl[] = "any"; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
58 static const char base_lbl[] = "base", sys_lbl[] = "sys"; |
0 | 59 |
60 enum debug_struct_file files = DINFO_STRUCT_FILE_ANY; | |
61 /* Default is to apply to as much as possible. */ | |
62 enum debug_info_usage usage = DINFO_USAGE_NUM_ENUMS; | |
63 int ord = 1, gen = 1; | |
64 | |
65 /* What usage? */ | |
66 if (MATCH (dfn_lbl, spec)) | |
67 usage = DINFO_USAGE_DFN; | |
68 else if (MATCH (dir_lbl, spec)) | |
69 usage = DINFO_USAGE_DIR_USE; | |
70 else if (MATCH (ind_lbl, spec)) | |
71 usage = DINFO_USAGE_IND_USE; | |
72 | |
73 /* Generics or not? */ | |
74 if (MATCH (ord_lbl, spec)) | |
75 gen = 0; | |
76 else if (MATCH (gen_lbl, spec)) | |
77 ord = 0; | |
78 | |
79 /* What allowable environment? */ | |
80 if (MATCH (none_lbl, spec)) | |
81 files = DINFO_STRUCT_FILE_NONE; | |
82 else if (MATCH (any_lbl, spec)) | |
83 files = DINFO_STRUCT_FILE_ANY; | |
84 else if (MATCH (sys_lbl, spec)) | |
85 files = DINFO_STRUCT_FILE_SYS; | |
86 else if (MATCH (base_lbl, spec)) | |
87 files = DINFO_STRUCT_FILE_BASE; | |
88 else | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
89 error_at (loc, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
90 "argument %qs to %<-femit-struct-debug-detailed%> " |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
91 "not recognized", |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
92 spec); |
0 | 93 |
94 /* Effect the specification. */ | |
95 if (usage == DINFO_USAGE_NUM_ENUMS) | |
96 { | |
97 if (ord) | |
98 { | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
99 opts->x_debug_struct_ordinary[DINFO_USAGE_DFN] = files; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
100 opts->x_debug_struct_ordinary[DINFO_USAGE_DIR_USE] = files; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
101 opts->x_debug_struct_ordinary[DINFO_USAGE_IND_USE] = files; |
0 | 102 } |
103 if (gen) | |
104 { | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
105 opts->x_debug_struct_generic[DINFO_USAGE_DFN] = files; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
106 opts->x_debug_struct_generic[DINFO_USAGE_DIR_USE] = files; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
107 opts->x_debug_struct_generic[DINFO_USAGE_IND_USE] = files; |
0 | 108 } |
109 } | |
110 else | |
111 { | |
112 if (ord) | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
113 opts->x_debug_struct_ordinary[usage] = files; |
0 | 114 if (gen) |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
115 opts->x_debug_struct_generic[usage] = files; |
0 | 116 } |
117 | |
118 if (*spec == ',') | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
119 set_struct_debug_option (opts, loc, spec+1); |
0 | 120 else |
121 { | |
122 /* No more -femit-struct-debug-detailed specifications. | |
123 Do final checks. */ | |
124 if (*spec != '\0') | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
125 error_at (loc, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
126 "argument %qs to %<-femit-struct-debug-detailed%> unknown", |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
127 spec); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
128 if (opts->x_debug_struct_ordinary[DINFO_USAGE_DIR_USE] |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
129 < opts->x_debug_struct_ordinary[DINFO_USAGE_IND_USE] |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
130 || opts->x_debug_struct_generic[DINFO_USAGE_DIR_USE] |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
131 < opts->x_debug_struct_generic[DINFO_USAGE_IND_USE]) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
132 error_at (loc, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
133 "%<-femit-struct-debug-detailed=dir:...%> must allow " |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
134 "at least as much as " |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
135 "%<-femit-struct-debug-detailed=ind:...%>"); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
136 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
137 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
138 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
139 /* Strip off a legitimate source ending from the input string NAME of |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
140 length LEN. Rather than having to know the names used by all of |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
141 our front ends, we strip off an ending of a period followed by |
111 | 142 up to fource characters. (C++ uses ".cpp".) */ |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
143 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
144 void |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
145 strip_off_ending (char *name, int len) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
146 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
147 int i; |
111 | 148 for (i = 2; i < 5 && len > i; i++) |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
149 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
150 if (name[len - i] == '.') |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
151 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
152 name[len - i] = '\0'; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
153 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
154 } |
0 | 155 } |
156 } | |
157 | |
158 /* Find the base name of a path, stripping off both directories and | |
159 a single final extension. */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
160 int |
0 | 161 base_of_path (const char *path, const char **base_out) |
162 { | |
163 const char *base = path; | |
164 const char *dot = 0; | |
165 const char *p = path; | |
166 char c = *p; | |
167 while (c) | |
168 { | |
111 | 169 if (IS_DIR_SEPARATOR (c)) |
0 | 170 { |
171 base = p + 1; | |
172 dot = 0; | |
173 } | |
174 else if (c == '.') | |
175 dot = p; | |
176 c = *++p; | |
177 } | |
178 if (!dot) | |
179 dot = p; | |
180 *base_out = base; | |
181 return dot - base; | |
182 } | |
183 | |
184 /* What to print when a switch has no documentation. */ | |
111 | 185 static const char undocumented_msg[] = N_("This option lacks documentation."); |
186 static const char use_diagnosed_msg[] = N_("Uses of this option are diagnosed."); | |
0 | 187 |
188 typedef char *char_p; /* For DEF_VEC_P. */ | |
189 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
190 static void handle_param (struct gcc_options *opts, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
191 struct gcc_options *opts_set, location_t loc, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
192 const char *carg); |
0 | 193 static void set_debug_level (enum debug_info_type type, int extended, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
194 const char *arg, struct gcc_options *opts, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
195 struct gcc_options *opts_set, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
196 location_t loc); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
197 static void set_fast_math_flags (struct gcc_options *opts, int set); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
198 static void decode_d_option (const char *arg, struct gcc_options *opts, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
199 location_t loc, diagnostic_context *dc); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
200 static void set_unsafe_math_optimizations_flags (struct gcc_options *opts, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
201 int set); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
202 static void enable_warning_as_error (const char *arg, int value, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
203 unsigned int lang_mask, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
204 const struct cl_option_handlers *handlers, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
205 struct gcc_options *opts, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
206 struct gcc_options *opts_set, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
207 location_t loc, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
208 diagnostic_context *dc); |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
209 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
210 /* Handle a back-end option; arguments and return value as for |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
211 handle_option. */ |
0 | 212 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
213 bool |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
214 target_handle_option (struct gcc_options *opts, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
215 struct gcc_options *opts_set, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
216 const struct cl_decoded_option *decoded, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
217 unsigned int lang_mask ATTRIBUTE_UNUSED, int kind, |
111 | 218 location_t loc, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
219 const struct cl_option_handlers *handlers ATTRIBUTE_UNUSED, |
111 | 220 diagnostic_context *dc, void (*) (void)) |
0 | 221 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
222 gcc_assert (dc == global_dc); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
223 gcc_assert (kind == DK_UNSPECIFIED); |
111 | 224 return targetm_common.handle_option (opts, opts_set, decoded, loc); |
0 | 225 } |
226 | |
227 /* Add comma-separated strings to a char_p vector. */ | |
228 | |
229 static void | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
230 add_comma_separated_to_vector (void **pvec, const char *arg) |
0 | 231 { |
232 char *tmp; | |
233 char *r; | |
234 char *w; | |
235 char *token_start; | |
111 | 236 vec<char_p> *v = (vec<char_p> *) *pvec; |
237 | |
238 vec_check_alloc (v, 1); | |
0 | 239 |
240 /* We never free this string. */ | |
241 tmp = xstrdup (arg); | |
242 | |
243 r = tmp; | |
244 w = tmp; | |
245 token_start = tmp; | |
246 | |
247 while (*r != '\0') | |
248 { | |
249 if (*r == ',') | |
250 { | |
251 *w++ = '\0'; | |
252 ++r; | |
111 | 253 v->safe_push (token_start); |
0 | 254 token_start = w; |
255 } | |
256 if (*r == '\\' && r[1] == ',') | |
257 { | |
258 *w++ = ','; | |
259 r += 2; | |
260 } | |
261 else | |
262 *w++ = *r++; | |
263 } | |
264 if (*token_start != '\0') | |
111 | 265 v->safe_push (token_start); |
266 | |
267 *pvec = v; | |
268 } | |
0 | 269 |
111 | 270 /* Initialize opts_obstack. */ |
271 | |
272 void | |
273 init_opts_obstack (void) | |
274 { | |
275 gcc_obstack_init (&opts_obstack); | |
0 | 276 } |
277 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
278 /* Initialize OPTS and OPTS_SET before using them in parsing options. */ |
0 | 279 |
280 void | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
281 init_options_struct (struct gcc_options *opts, struct gcc_options *opts_set) |
0 | 282 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
283 size_t num_params = get_num_compiler_params (); |
0 | 284 |
111 | 285 /* Ensure that opts_obstack has already been initialized by the time |
286 that we initialize any gcc_options instances (PR jit/68446). */ | |
287 gcc_assert (opts_obstack.chunk_size > 0); | |
288 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
289 *opts = global_options_init; |
111 | 290 |
291 if (opts_set) | |
292 memset (opts_set, 0, sizeof (*opts_set)); | |
0 | 293 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
294 opts->x_param_values = XNEWVEC (int, num_params); |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
295 |
111 | 296 if (opts_set) |
297 opts_set->x_param_values = XCNEWVEC (int, num_params); | |
298 | |
299 init_param_values (opts->x_param_values); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
300 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
301 /* Initialize whether `char' is signed. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
302 opts->x_flag_signed_char = DEFAULT_SIGNED_CHAR; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
303 /* Set this to a special "uninitialized" value. The actual default |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
304 is set after target options have been processed. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
305 opts->x_flag_short_enums = 2; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
306 |
111 | 307 /* Initialize target_flags before default_options_optimization |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
308 so the latter can modify it. */ |
111 | 309 opts->x_target_flags = targetm_common.default_target_flags; |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
310 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
311 /* Some targets have ABI-specified unwind tables. */ |
111 | 312 opts->x_flag_unwind_tables = targetm_common.unwind_tables_default; |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
313 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
314 /* Some targets have other target-specific initialization. */ |
111 | 315 targetm_common.option_init_struct (opts); |
316 } | |
317 | |
318 /* Release any allocations owned by OPTS. */ | |
319 | |
320 void | |
321 finalize_options_struct (struct gcc_options *opts) | |
322 { | |
323 XDELETEVEC (opts->x_param_values); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
324 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
325 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
326 /* If indicated by the optimization level LEVEL (-Os if SIZE is set, |
111 | 327 -Ofast if FAST is set, -Og if DEBUG is set), apply the option DEFAULT_OPT |
328 to OPTS and OPTS_SET, diagnostic context DC, location LOC, with language | |
329 mask LANG_MASK and option handlers HANDLERS. */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
330 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
331 static void |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
332 maybe_default_option (struct gcc_options *opts, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
333 struct gcc_options *opts_set, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
334 const struct default_options *default_opt, |
111 | 335 int level, bool size, bool fast, bool debug, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
336 unsigned int lang_mask, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
337 const struct cl_option_handlers *handlers, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
338 location_t loc, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
339 diagnostic_context *dc) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
340 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
341 const struct cl_option *option = &cl_options[default_opt->opt_index]; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
342 bool enabled; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
343 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
344 if (size) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
345 gcc_assert (level == 2); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
346 if (fast) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
347 gcc_assert (level == 3); |
111 | 348 if (debug) |
349 gcc_assert (level == 1); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
350 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
351 switch (default_opt->levels) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
352 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
353 case OPT_LEVELS_ALL: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
354 enabled = true; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
355 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
356 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
357 case OPT_LEVELS_0_ONLY: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
358 enabled = (level == 0); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
359 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
360 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
361 case OPT_LEVELS_1_PLUS: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
362 enabled = (level >= 1); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
363 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
364 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
365 case OPT_LEVELS_1_PLUS_SPEED_ONLY: |
111 | 366 enabled = (level >= 1 && !size && !debug); |
367 break; | |
368 | |
369 case OPT_LEVELS_1_PLUS_NOT_DEBUG: | |
370 enabled = (level >= 1 && !debug); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
371 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
372 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
373 case OPT_LEVELS_2_PLUS: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
374 enabled = (level >= 2); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
375 break; |
0 | 376 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
377 case OPT_LEVELS_2_PLUS_SPEED_ONLY: |
111 | 378 enabled = (level >= 2 && !size && !debug); |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
379 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
380 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
381 case OPT_LEVELS_3_PLUS: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
382 enabled = (level >= 3); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
383 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
384 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
385 case OPT_LEVELS_3_PLUS_AND_SIZE: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
386 enabled = (level >= 3 || size); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
387 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
388 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
389 case OPT_LEVELS_SIZE: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
390 enabled = size; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
391 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
392 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
393 case OPT_LEVELS_FAST: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
394 enabled = fast; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
395 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
396 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
397 case OPT_LEVELS_NONE: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
398 default: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
399 gcc_unreachable (); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
400 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
401 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
402 if (enabled) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
403 handle_generated_option (opts, opts_set, default_opt->opt_index, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
404 default_opt->arg, default_opt->value, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
405 lang_mask, DK_UNSPECIFIED, loc, |
111 | 406 handlers, true, dc); |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
407 else if (default_opt->arg == NULL |
111 | 408 && !option->cl_reject_negative) |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
409 handle_generated_option (opts, opts_set, default_opt->opt_index, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
410 default_opt->arg, !default_opt->value, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
411 lang_mask, DK_UNSPECIFIED, loc, |
111 | 412 handlers, true, dc); |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
413 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
414 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
415 /* As indicated by the optimization level LEVEL (-Os if SIZE is set, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
416 -Ofast if FAST is set), apply the options in array DEFAULT_OPTS to |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
417 OPTS and OPTS_SET, diagnostic context DC, location LOC, with |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
418 language mask LANG_MASK and option handlers HANDLERS. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
419 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
420 static void |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
421 maybe_default_options (struct gcc_options *opts, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
422 struct gcc_options *opts_set, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
423 const struct default_options *default_opts, |
111 | 424 int level, bool size, bool fast, bool debug, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
425 unsigned int lang_mask, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
426 const struct cl_option_handlers *handlers, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
427 location_t loc, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
428 diagnostic_context *dc) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
429 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
430 size_t i; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
431 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
432 for (i = 0; default_opts[i].levels != OPT_LEVELS_NONE; i++) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
433 maybe_default_option (opts, opts_set, &default_opts[i], |
111 | 434 level, size, fast, debug, |
435 lang_mask, handlers, loc, dc); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
436 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
437 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
438 /* Table of options enabled by default at different levels. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
439 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
440 static const struct default_options default_options_table[] = |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
441 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
442 /* -O1 optimizations. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
443 { OPT_LEVELS_1_PLUS, OPT_fdefer_pop, NULL, 1 }, |
111 | 444 #if DELAY_SLOTS |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
445 { OPT_LEVELS_1_PLUS, OPT_fdelayed_branch, NULL, 1 }, |
0 | 446 #endif |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
447 { OPT_LEVELS_1_PLUS, OPT_fguess_branch_probability, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
448 { OPT_LEVELS_1_PLUS, OPT_fcprop_registers, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
449 { OPT_LEVELS_1_PLUS, OPT_fforward_propagate, NULL, 1 }, |
111 | 450 { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fif_conversion, NULL, 1 }, |
451 { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fif_conversion2, NULL, 1 }, | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
452 { OPT_LEVELS_1_PLUS, OPT_fipa_pure_const, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
453 { OPT_LEVELS_1_PLUS, OPT_fipa_reference, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
454 { OPT_LEVELS_1_PLUS, OPT_fipa_profile, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
455 { OPT_LEVELS_1_PLUS, OPT_fmerge_constants, NULL, 1 }, |
111 | 456 { OPT_LEVELS_1_PLUS, OPT_freorder_blocks, NULL, 1 }, |
457 { OPT_LEVELS_1_PLUS, OPT_fshrink_wrap, NULL, 1 }, | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
458 { OPT_LEVELS_1_PLUS, OPT_fsplit_wide_types, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
459 { OPT_LEVELS_1_PLUS, OPT_ftree_ccp, NULL, 1 }, |
111 | 460 { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_ftree_bit_ccp, NULL, 1 }, |
461 { OPT_LEVELS_1_PLUS, OPT_ftree_coalesce_vars, NULL, 1 }, | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
462 { OPT_LEVELS_1_PLUS, OPT_ftree_dce, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
463 { OPT_LEVELS_1_PLUS, OPT_ftree_dominator_opts, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
464 { OPT_LEVELS_1_PLUS, OPT_ftree_dse, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
465 { OPT_LEVELS_1_PLUS, OPT_ftree_ter, NULL, 1 }, |
111 | 466 { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_ftree_sra, NULL, 1 }, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
467 { OPT_LEVELS_1_PLUS, OPT_ftree_fre, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
468 { OPT_LEVELS_1_PLUS, OPT_ftree_copy_prop, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
469 { OPT_LEVELS_1_PLUS, OPT_ftree_sink, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
470 { OPT_LEVELS_1_PLUS, OPT_ftree_ch, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
471 { OPT_LEVELS_1_PLUS, OPT_fcombine_stack_adjustments, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
472 { OPT_LEVELS_1_PLUS, OPT_fcompare_elim, NULL, 1 }, |
111 | 473 { OPT_LEVELS_1_PLUS, OPT_ftree_slsr, NULL, 1 }, |
474 { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fbranch_count_reg, NULL, 1 }, | |
475 { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fmove_loop_invariants, NULL, 1 }, | |
476 { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_ftree_pta, NULL, 1 }, | |
477 { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fssa_phiopt, NULL, 1 }, | |
478 { OPT_LEVELS_1_PLUS, OPT_ftree_builtin_call_dce, NULL, 1 }, | |
131 | 479 { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, |
0 | 480 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
481 /* -O2 optimizations. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
482 { OPT_LEVELS_2_PLUS, OPT_finline_small_functions, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
483 { OPT_LEVELS_2_PLUS, OPT_findirect_inlining, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
484 { OPT_LEVELS_2_PLUS, OPT_fpartial_inlining, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
485 { OPT_LEVELS_2_PLUS, OPT_fthread_jumps, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
486 { OPT_LEVELS_2_PLUS, OPT_fcrossjumping, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
487 { OPT_LEVELS_2_PLUS, OPT_foptimize_sibling_calls, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
488 { OPT_LEVELS_2_PLUS, OPT_fcse_follow_jumps, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
489 { OPT_LEVELS_2_PLUS, OPT_fgcse, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
490 { OPT_LEVELS_2_PLUS, OPT_fexpensive_optimizations, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
491 { OPT_LEVELS_2_PLUS, OPT_frerun_cse_after_loop, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
492 { OPT_LEVELS_2_PLUS, OPT_fcaller_saves, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
493 { OPT_LEVELS_2_PLUS, OPT_fpeephole2, NULL, 1 }, |
0 | 494 #ifdef INSN_SCHEDULING |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
495 /* Only run the pre-regalloc scheduling pass if optimizing for speed. */ |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
496 { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_fschedule_insns, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
497 { OPT_LEVELS_2_PLUS, OPT_fschedule_insns2, NULL, 1 }, |
0 | 498 #endif |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
499 { OPT_LEVELS_2_PLUS, OPT_fstrict_aliasing, NULL, 1 }, |
111 | 500 { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_freorder_blocks_algorithm_, NULL, |
501 REORDER_BLOCKS_ALGORITHM_STC }, | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
502 { OPT_LEVELS_2_PLUS, OPT_freorder_functions, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
503 { OPT_LEVELS_2_PLUS, OPT_ftree_vrp, NULL, 1 }, |
111 | 504 { OPT_LEVELS_2_PLUS, OPT_fcode_hoisting, NULL, 1 }, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
505 { OPT_LEVELS_2_PLUS, OPT_ftree_pre, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
506 { OPT_LEVELS_2_PLUS, OPT_ftree_switch_conversion, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
507 { OPT_LEVELS_2_PLUS, OPT_fipa_cp, NULL, 1 }, |
111 | 508 { OPT_LEVELS_2_PLUS, OPT_fipa_bit_cp, NULL, 1 }, |
509 { OPT_LEVELS_2_PLUS, OPT_fipa_vrp, NULL, 1 }, | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
510 { OPT_LEVELS_2_PLUS, OPT_fdevirtualize, NULL, 1 }, |
111 | 511 { OPT_LEVELS_2_PLUS, OPT_fdevirtualize_speculatively, NULL, 1 }, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
512 { OPT_LEVELS_2_PLUS, OPT_fipa_sra, NULL, 1 }, |
131 | 513 { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_falign_loops, NULL, 1 }, |
514 { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_falign_jumps, NULL, 1 }, | |
515 { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_falign_labels, NULL, 1 }, | |
516 { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_falign_functions, NULL, 1 }, | |
111 | 517 { OPT_LEVELS_2_PLUS, OPT_ftree_tail_merge, NULL, 1 }, |
518 { OPT_LEVELS_2_PLUS, OPT_fvect_cost_model_, NULL, VECT_COST_MODEL_CHEAP }, | |
519 { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_foptimize_strlen, NULL, 1 }, | |
520 { OPT_LEVELS_2_PLUS, OPT_fhoist_adjacent_loads, NULL, 1 }, | |
521 { OPT_LEVELS_2_PLUS, OPT_fipa_icf, NULL, 1 }, | |
522 { OPT_LEVELS_2_PLUS, OPT_fisolate_erroneous_paths_dereference, NULL, 1 }, | |
523 { OPT_LEVELS_2_PLUS, OPT_fipa_ra, NULL, 1 }, | |
524 { OPT_LEVELS_2_PLUS, OPT_flra_remat, NULL, 1 }, | |
525 { OPT_LEVELS_2_PLUS, OPT_fstore_merging, NULL, 1 }, | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
526 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
527 /* -O3 optimizations. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
528 { OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribute_patterns, NULL, 1 }, |
111 | 529 { OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribution, NULL, 1 }, |
131 | 530 { OPT_LEVELS_3_PLUS, OPT_floop_interchange, NULL, 1 }, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
531 { OPT_LEVELS_3_PLUS, OPT_fpredictive_commoning, NULL, 1 }, |
111 | 532 { OPT_LEVELS_3_PLUS, OPT_fsplit_paths, NULL, 1 }, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
533 /* Inlining of functions reducing size is a good idea with -Os |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
534 regardless of them being declared inline. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
535 { OPT_LEVELS_3_PLUS_AND_SIZE, OPT_finline_functions, NULL, 1 }, |
111 | 536 { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_finline_functions_called_once, NULL, 1 }, |
537 { OPT_LEVELS_3_PLUS, OPT_fsplit_loops, NULL, 1 }, | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
538 { OPT_LEVELS_3_PLUS, OPT_funswitch_loops, NULL, 1 }, |
131 | 539 { OPT_LEVELS_3_PLUS, OPT_floop_unroll_and_jam, NULL, 1 }, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
540 { OPT_LEVELS_3_PLUS, OPT_fgcse_after_reload, NULL, 1 }, |
111 | 541 { OPT_LEVELS_3_PLUS, OPT_ftree_loop_vectorize, NULL, 1 }, |
542 { OPT_LEVELS_3_PLUS, OPT_ftree_slp_vectorize, NULL, 1 }, | |
543 { OPT_LEVELS_3_PLUS, OPT_fvect_cost_model_, NULL, VECT_COST_MODEL_DYNAMIC }, | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
544 { OPT_LEVELS_3_PLUS, OPT_fipa_cp_clone, NULL, 1 }, |
111 | 545 { OPT_LEVELS_3_PLUS, OPT_ftree_partial_pre, NULL, 1 }, |
546 { OPT_LEVELS_3_PLUS, OPT_fpeel_loops, NULL, 1 }, | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
547 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
548 /* -Ofast adds optimizations to -O3. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
549 { OPT_LEVELS_FAST, OPT_ffast_math, NULL, 1 }, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
550 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
551 { OPT_LEVELS_NONE, 0, NULL, 0 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
552 }; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
553 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
554 /* Default the options in OPTS and OPTS_SET based on the optimization |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
555 settings in DECODED_OPTIONS and DECODED_OPTIONS_COUNT. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
556 void |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
557 default_options_optimization (struct gcc_options *opts, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
558 struct gcc_options *opts_set, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
559 struct cl_decoded_option *decoded_options, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
560 unsigned int decoded_options_count, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
561 location_t loc, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
562 unsigned int lang_mask, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
563 const struct cl_option_handlers *handlers, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
564 diagnostic_context *dc) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
565 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
566 unsigned int i; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
567 int opt2; |
111 | 568 bool openacc_mode = false; |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
569 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
570 /* Scan to see what optimization level has been specified. That will |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
571 determine the default value of many flags. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
572 for (i = 1; i < decoded_options_count; i++) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
573 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
574 struct cl_decoded_option *opt = &decoded_options[i]; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
575 switch (opt->opt_index) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
576 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
577 case OPT_O: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
578 if (*opt->arg == '\0') |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
579 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
580 opts->x_optimize = 1; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
581 opts->x_optimize_size = 0; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
582 opts->x_optimize_fast = 0; |
111 | 583 opts->x_optimize_debug = 0; |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
584 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
585 else |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
586 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
587 const int optimize_val = integral_argument (opt->arg); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
588 if (optimize_val == -1) |
111 | 589 error_at (loc, "argument to %<-O%> should be a non-negative " |
590 "integer, %<g%>, %<s%> or %<fast%>"); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
591 else |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
592 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
593 opts->x_optimize = optimize_val; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
594 if ((unsigned int) opts->x_optimize > 255) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
595 opts->x_optimize = 255; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
596 opts->x_optimize_size = 0; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
597 opts->x_optimize_fast = 0; |
111 | 598 opts->x_optimize_debug = 0; |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
599 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
600 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
601 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
602 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
603 case OPT_Os: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
604 opts->x_optimize_size = 1; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
605 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
606 /* Optimizing for size forces optimize to be 2. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
607 opts->x_optimize = 2; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
608 opts->x_optimize_fast = 0; |
111 | 609 opts->x_optimize_debug = 0; |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
610 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
611 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
612 case OPT_Ofast: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
613 /* -Ofast only adds flags to -O3. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
614 opts->x_optimize_size = 0; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
615 opts->x_optimize = 3; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
616 opts->x_optimize_fast = 1; |
111 | 617 opts->x_optimize_debug = 0; |
618 break; | |
619 | |
620 case OPT_Og: | |
621 /* -Og selects optimization level 1. */ | |
622 opts->x_optimize_size = 0; | |
623 opts->x_optimize = 1; | |
624 opts->x_optimize_fast = 0; | |
625 opts->x_optimize_debug = 1; | |
626 break; | |
627 | |
628 case OPT_fopenacc: | |
629 if (opt->value) | |
630 openacc_mode = true; | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
631 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
632 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
633 default: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
634 /* Ignore other options in this prescan. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
635 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
636 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
637 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
638 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
639 maybe_default_options (opts, opts_set, default_options_table, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
640 opts->x_optimize, opts->x_optimize_size, |
111 | 641 opts->x_optimize_fast, opts->x_optimize_debug, |
642 lang_mask, handlers, loc, dc); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
643 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
644 /* -O2 param settings. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
645 opt2 = (opts->x_optimize >= 2); |
0 | 646 |
111 | 647 if (openacc_mode |
648 && !opts_set->x_flag_ipa_pta) | |
649 opts->x_flag_ipa_pta = true; | |
650 | |
0 | 651 /* Track fields in field-sensitive alias analysis. */ |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
652 maybe_set_param_value |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
653 (PARAM_MAX_FIELDS_FOR_FIELD_SENSITIVE, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
654 opt2 ? 100 : default_param_value (PARAM_MAX_FIELDS_FOR_FIELD_SENSITIVE), |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
655 opts->x_param_values, opts_set->x_param_values); |
0 | 656 |
657 /* For -O1 only do loop invariant motion for very small loops. */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
658 maybe_set_param_value |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
659 (PARAM_LOOP_INVARIANT_MAX_BBS_IN_LOOP, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
660 opt2 ? default_param_value (PARAM_LOOP_INVARIANT_MAX_BBS_IN_LOOP) : 1000, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
661 opts->x_param_values, opts_set->x_param_values); |
0 | 662 |
111 | 663 /* At -Ofast, allow store motion to introduce potential race conditions. */ |
664 maybe_set_param_value | |
665 (PARAM_ALLOW_STORE_DATA_RACES, | |
666 opts->x_optimize_fast ? 1 | |
667 : default_param_value (PARAM_ALLOW_STORE_DATA_RACES), | |
668 opts->x_param_values, opts_set->x_param_values); | |
669 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
670 if (opts->x_optimize_size) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
671 /* We want to crossjump as much as possible. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
672 maybe_set_param_value (PARAM_MIN_CROSSJUMP_INSNS, 1, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
673 opts->x_param_values, opts_set->x_param_values); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
674 else |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
675 maybe_set_param_value (PARAM_MIN_CROSSJUMP_INSNS, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
676 default_param_value (PARAM_MIN_CROSSJUMP_INSNS), |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
677 opts->x_param_values, opts_set->x_param_values); |
0 | 678 |
111 | 679 /* Restrict the amount of work combine does at -Og while retaining |
680 most of its useful transforms. */ | |
681 if (opts->x_optimize_debug) | |
682 maybe_set_param_value (PARAM_MAX_COMBINE_INSNS, 2, | |
683 opts->x_param_values, opts_set->x_param_values); | |
684 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
685 /* Allow default optimizations to be specified on a per-machine basis. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
686 maybe_default_options (opts, opts_set, |
111 | 687 targetm_common.option_optimization_table, |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
688 opts->x_optimize, opts->x_optimize_size, |
111 | 689 opts->x_optimize_fast, opts->x_optimize_debug, |
690 lang_mask, handlers, loc, dc); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
691 } |
0 | 692 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
693 /* After all options at LOC have been read into OPTS and OPTS_SET, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
694 finalize settings of those options and diagnose incompatible |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
695 combinations. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
696 void |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
697 finish_options (struct gcc_options *opts, struct gcc_options *opts_set, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
698 location_t loc) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
699 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
700 enum unwind_info_type ui_except; |
0 | 701 |
111 | 702 if (opts->x_dump_base_name |
703 && ! opts->x_dump_base_name_prefixed) | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
704 { |
131 | 705 const char *sep = opts->x_dump_base_name; |
706 | |
707 for (; *sep; sep++) | |
708 if (IS_DIR_SEPARATOR (*sep)) | |
709 break; | |
710 | |
711 if (*sep) | |
712 /* If dump_base_path contains subdirectories, don't prepend | |
713 anything. */; | |
714 else if (opts->x_dump_dir_name) | |
715 /* We have a DUMP_DIR_NAME, prepend that. */ | |
111 | 716 opts->x_dump_base_name = opts_concat (opts->x_dump_dir_name, |
717 opts->x_dump_base_name, NULL); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
718 else if (opts->x_aux_base_name |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
719 && strcmp (opts->x_aux_base_name, HOST_BIT_BUCKET) != 0) |
131 | 720 /* AUX_BASE_NAME is set and is not the bit bucket. If it |
721 contains a directory component, prepend those directories. | |
722 Typically this places things in the same directory as the | |
723 object file. */ | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
724 { |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
725 const char *aux_base; |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
726 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
727 base_of_path (opts->x_aux_base_name, &aux_base); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
728 if (opts->x_aux_base_name != aux_base) |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
729 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
730 int dir_len = aux_base - opts->x_aux_base_name; |
111 | 731 char *new_dump_base_name |
732 = XOBNEWVEC (&opts_obstack, char, | |
733 strlen (opts->x_dump_base_name) + dir_len + 1); | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
734 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
735 /* Copy directory component from OPTS->X_AUX_BASE_NAME. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
736 memcpy (new_dump_base_name, opts->x_aux_base_name, dir_len); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
737 /* Append existing OPTS->X_DUMP_BASE_NAME. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
738 strcpy (new_dump_base_name + dir_len, opts->x_dump_base_name); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
739 opts->x_dump_base_name = new_dump_base_name; |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
740 } |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
741 } |
131 | 742 |
743 /* It is definitely prefixed now. */ | |
744 opts->x_dump_base_name_prefixed = true; | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
745 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
746 |
0 | 747 /* Handle related options for unit-at-a-time, toplevel-reorder, and |
748 section-anchors. */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
749 if (!opts->x_flag_unit_at_a_time) |
0 | 750 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
751 if (opts->x_flag_section_anchors && opts_set->x_flag_section_anchors) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
752 error_at (loc, "section anchors must be disabled when unit-at-a-time " |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
753 "is disabled"); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
754 opts->x_flag_section_anchors = 0; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
755 if (opts->x_flag_toplevel_reorder == 1) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
756 error_at (loc, "toplevel reorder must be disabled when unit-at-a-time " |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
757 "is disabled"); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
758 opts->x_flag_toplevel_reorder = 0; |
0 | 759 } |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
760 |
111 | 761 /* -fself-test depends on the state of the compiler prior to |
762 compiling anything. Ideally it should be run on an empty source | |
763 file. However, in case we get run with actual source, assume | |
764 -fsyntax-only which will inhibit any compiler initialization | |
765 which may confuse the self tests. */ | |
766 if (opts->x_flag_self_test) | |
767 opts->x_flag_syntax_only = 1; | |
768 | |
769 if (opts->x_flag_tm && opts->x_flag_non_call_exceptions) | |
770 sorry ("transactional memory is not supported with non-call exceptions"); | |
771 | |
0 | 772 /* Unless the user has asked for section anchors, we disable toplevel |
773 reordering at -O0 to disable transformations that might be surprising | |
774 to end users and to get -fno-toplevel-reorder tested. */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
775 if (!opts->x_optimize |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
776 && opts->x_flag_toplevel_reorder == 2 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
777 && !(opts->x_flag_section_anchors && opts_set->x_flag_section_anchors)) |
0 | 778 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
779 opts->x_flag_toplevel_reorder = 0; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
780 opts->x_flag_section_anchors = 0; |
0 | 781 } |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
782 if (!opts->x_flag_toplevel_reorder) |
0 | 783 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
784 if (opts->x_flag_section_anchors && opts_set->x_flag_section_anchors) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
785 error_at (loc, "section anchors must be disabled when toplevel reorder" |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
786 " is disabled"); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
787 opts->x_flag_section_anchors = 0; |
0 | 788 } |
789 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
790 if (!opts->x_flag_opts_finished) |
0 | 791 { |
111 | 792 /* We initialize opts->x_flag_pie to -1 so that targets can set a |
793 default value. */ | |
794 if (opts->x_flag_pie == -1) | |
795 { | |
796 /* We initialize opts->x_flag_pic to -1 so that we can tell if | |
797 -fpic, -fPIC, -fno-pic or -fno-PIC is used. */ | |
798 if (opts->x_flag_pic == -1) | |
799 opts->x_flag_pie = DEFAULT_FLAG_PIE; | |
800 else | |
801 opts->x_flag_pie = 0; | |
802 } | |
803 /* If -fPIE or -fpie is used, turn on PIC. */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
804 if (opts->x_flag_pie) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
805 opts->x_flag_pic = opts->x_flag_pie; |
111 | 806 else if (opts->x_flag_pic == -1) |
807 opts->x_flag_pic = 0; | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
808 if (opts->x_flag_pic && !opts->x_flag_pie) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
809 opts->x_flag_shlib = 1; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
810 opts->x_flag_opts_finished = true; |
0 | 811 } |
812 | |
111 | 813 /* We initialize opts->x_flag_stack_protect to -1 so that targets |
814 can set a default value. */ | |
815 if (opts->x_flag_stack_protect == -1) | |
816 opts->x_flag_stack_protect = DEFAULT_FLAG_SSP; | |
817 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
818 if (opts->x_optimize == 0) |
0 | 819 { |
820 /* Inlining does not work if not optimizing, | |
821 so force it not to be done. */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
822 opts->x_warn_inline = 0; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
823 opts->x_flag_no_inline = 1; |
0 | 824 } |
825 | |
826 /* The optimization to partition hot and cold basic blocks into separate | |
827 sections of the .o and executable files does not work (currently) | |
828 with exception handling. This is because there is no support for | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
829 generating unwind info. If opts->x_flag_exceptions is turned on |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
830 we need to turn off the partitioning optimization. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
831 |
111 | 832 ui_except = targetm_common.except_unwind_info (opts); |
0 | 833 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
834 if (opts->x_flag_exceptions |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
835 && opts->x_flag_reorder_blocks_and_partition |
111 | 836 && (ui_except == UI_SJLJ || ui_except >= UI_TARGET)) |
0 | 837 { |
111 | 838 if (opts_set->x_flag_reorder_blocks_and_partition) |
839 inform (loc, | |
840 "%<-freorder-blocks-and-partition%> does not work " | |
841 "with exceptions on this architecture"); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
842 opts->x_flag_reorder_blocks_and_partition = 0; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
843 opts->x_flag_reorder_blocks = 1; |
0 | 844 } |
845 | |
846 /* If user requested unwind info, then turn off the partitioning | |
847 optimization. */ | |
848 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
849 if (opts->x_flag_unwind_tables |
111 | 850 && !targetm_common.unwind_tables_default |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
851 && opts->x_flag_reorder_blocks_and_partition |
111 | 852 && (ui_except == UI_SJLJ || ui_except >= UI_TARGET)) |
0 | 853 { |
111 | 854 if (opts_set->x_flag_reorder_blocks_and_partition) |
855 inform (loc, | |
856 "%<-freorder-blocks-and-partition%> does not support " | |
857 "unwind info on this architecture"); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
858 opts->x_flag_reorder_blocks_and_partition = 0; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
859 opts->x_flag_reorder_blocks = 1; |
0 | 860 } |
861 | |
862 /* If the target requested unwind info, then turn off the partitioning | |
863 optimization with a different message. Likewise, if the target does not | |
864 support named sections. */ | |
865 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
866 if (opts->x_flag_reorder_blocks_and_partition |
111 | 867 && (!targetm_common.have_named_sections |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
868 || (opts->x_flag_unwind_tables |
111 | 869 && targetm_common.unwind_tables_default |
870 && (ui_except == UI_SJLJ || ui_except >= UI_TARGET)))) | |
0 | 871 { |
111 | 872 if (opts_set->x_flag_reorder_blocks_and_partition) |
873 inform (loc, | |
874 "%<-freorder-blocks-and-partition%> does not work " | |
875 "on this architecture"); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
876 opts->x_flag_reorder_blocks_and_partition = 0; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
877 opts->x_flag_reorder_blocks = 1; |
0 | 878 } |
879 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
880 |
0 | 881 /* Pipelining of outer loops is only possible when general pipelining |
882 capabilities are requested. */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
883 if (!opts->x_flag_sel_sched_pipelining) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
884 opts->x_flag_sel_sched_pipelining_outer_loops = 0; |
0 | 885 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
886 if (opts->x_flag_conserve_stack) |
0 | 887 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
888 maybe_set_param_value (PARAM_LARGE_STACK_FRAME, 100, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
889 opts->x_param_values, opts_set->x_param_values); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
890 maybe_set_param_value (PARAM_STACK_FRAME_GROWTH, 40, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
891 opts->x_param_values, opts_set->x_param_values); |
0 | 892 } |
893 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
894 if (opts->x_flag_lto) |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
895 { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
896 #ifdef ENABLE_LTO |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
897 opts->x_flag_generate_lto = 1; |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
898 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
899 /* When generating IL, do not operate in whole-program mode. |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
900 Otherwise, symbols will be privatized too early, causing link |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
901 errors later. */ |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
902 opts->x_flag_whole_program = 0; |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
903 #else |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
904 error_at (loc, "LTO support has not been enabled in this configuration"); |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
905 #endif |
111 | 906 if (!opts->x_flag_fat_lto_objects |
907 && (!HAVE_LTO_PLUGIN | |
908 || (opts_set->x_flag_use_linker_plugin | |
909 && !opts->x_flag_use_linker_plugin))) | |
910 { | |
911 if (opts_set->x_flag_fat_lto_objects) | |
912 error_at (loc, "%<-fno-fat-lto-objects%> are supported only with " | |
913 "linker plugin"); | |
914 opts->x_flag_fat_lto_objects = 1; | |
915 } | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
916 } |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
917 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
918 /* We initialize opts->x_flag_split_stack to -1 so that targets can set a |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
919 default value if they choose based on other options. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
920 if (opts->x_flag_split_stack == -1) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
921 opts->x_flag_split_stack = 0; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
922 else if (opts->x_flag_split_stack) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
923 { |
111 | 924 if (!targetm_common.supports_split_stack (true, opts)) |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
925 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
926 error_at (loc, "%<-fsplit-stack%> is not supported by " |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
927 "this compiler configuration"); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
928 opts->x_flag_split_stack = 0; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
929 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
930 } |
111 | 931 |
932 /* If stack splitting is turned on, and the user did not explicitly | |
933 request function partitioning, turn off partitioning, as it | |
934 confuses the linker when trying to handle partitioned split-stack | |
935 code that calls a non-split-stack functions. But if partitioning | |
936 was turned on explicitly just hope for the best. */ | |
937 if (opts->x_flag_split_stack | |
938 && opts->x_flag_reorder_blocks_and_partition | |
939 && !opts_set->x_flag_reorder_blocks_and_partition) | |
940 opts->x_flag_reorder_blocks_and_partition = 0; | |
941 | |
942 if (opts->x_flag_reorder_blocks_and_partition | |
943 && !opts_set->x_flag_reorder_functions) | |
944 opts->x_flag_reorder_functions = 1; | |
945 | |
946 /* Tune vectorization related parametees according to cost model. */ | |
947 if (opts->x_flag_vect_cost_model == VECT_COST_MODEL_CHEAP) | |
948 { | |
949 maybe_set_param_value (PARAM_VECT_MAX_VERSION_FOR_ALIAS_CHECKS, | |
950 6, opts->x_param_values, opts_set->x_param_values); | |
951 maybe_set_param_value (PARAM_VECT_MAX_VERSION_FOR_ALIGNMENT_CHECKS, | |
952 0, opts->x_param_values, opts_set->x_param_values); | |
953 maybe_set_param_value (PARAM_VECT_MAX_PEELING_FOR_ALIGNMENT, | |
954 0, opts->x_param_values, opts_set->x_param_values); | |
955 } | |
956 | |
957 /* Set PARAM_MAX_STORES_TO_SINK to 0 if either vectorization or if-conversion | |
958 is disabled. */ | |
959 if ((!opts->x_flag_tree_loop_vectorize && !opts->x_flag_tree_slp_vectorize) | |
960 || !opts->x_flag_tree_loop_if_convert) | |
961 maybe_set_param_value (PARAM_MAX_STORES_TO_SINK, 0, | |
962 opts->x_param_values, opts_set->x_param_values); | |
963 | |
964 /* The -gsplit-dwarf option requires -ggnu-pubnames. */ | |
965 if (opts->x_dwarf_split_debug_info) | |
966 opts->x_debug_generate_pub_sections = 2; | |
967 | |
131 | 968 if ((opts->x_flag_sanitize |
969 & (SANITIZE_USER_ADDRESS | SANITIZE_KERNEL_ADDRESS)) == 0) | |
970 { | |
971 if (opts->x_flag_sanitize & SANITIZE_POINTER_COMPARE) | |
972 error_at (loc, | |
973 "%<-fsanitize=pointer-compare%> must be combined with " | |
974 "%<-fsanitize=address%> or %<-fsanitize=kernel-address%>"); | |
975 if (opts->x_flag_sanitize & SANITIZE_POINTER_SUBTRACT) | |
976 error_at (loc, | |
977 "%<-fsanitize=pointer-subtract%> must be combined with " | |
978 "%<-fsanitize=address%> or %<-fsanitize=kernel-address%>"); | |
979 } | |
980 | |
111 | 981 /* Userspace and kernel ASan conflict with each other. */ |
982 if ((opts->x_flag_sanitize & SANITIZE_USER_ADDRESS) | |
983 && (opts->x_flag_sanitize & SANITIZE_KERNEL_ADDRESS)) | |
984 error_at (loc, | |
985 "%<-fsanitize=address%> is incompatible with " | |
986 "%<-fsanitize=kernel-address%>"); | |
987 | |
988 /* And with TSan. */ | |
989 if ((opts->x_flag_sanitize & SANITIZE_ADDRESS) | |
990 && (opts->x_flag_sanitize & SANITIZE_THREAD)) | |
991 error_at (loc, | |
992 "%<-fsanitize=address%> and %<-fsanitize=kernel-address%> " | |
993 "are incompatible with %<-fsanitize=thread%>"); | |
994 | |
995 if ((opts->x_flag_sanitize & SANITIZE_LEAK) | |
996 && (opts->x_flag_sanitize & SANITIZE_THREAD)) | |
997 error_at (loc, | |
998 "%<-fsanitize=leak%> is incompatible with %<-fsanitize=thread%>"); | |
999 | |
1000 /* Check error recovery for -fsanitize-recover option. */ | |
1001 for (int i = 0; sanitizer_opts[i].name != NULL; ++i) | |
1002 if ((opts->x_flag_sanitize_recover & sanitizer_opts[i].flag) | |
1003 && !sanitizer_opts[i].can_recover) | |
1004 error_at (loc, "%<-fsanitize-recover=%s%> is not supported", | |
1005 sanitizer_opts[i].name); | |
1006 | |
1007 /* When instrumenting the pointers, we don't want to remove | |
1008 the null pointer checks. */ | |
1009 if (opts->x_flag_sanitize & (SANITIZE_NULL | SANITIZE_NONNULL_ATTRIBUTE | |
1010 | SANITIZE_RETURNS_NONNULL_ATTRIBUTE)) | |
1011 opts->x_flag_delete_null_pointer_checks = 0; | |
1012 | |
1013 /* Aggressive compiler optimizations may cause false negatives. */ | |
1014 if (opts->x_flag_sanitize & ~(SANITIZE_LEAK | SANITIZE_UNREACHABLE)) | |
1015 opts->x_flag_aggressive_loop_optimizations = 0; | |
1016 | |
1017 /* Enable -fsanitize-address-use-after-scope if address sanitizer is | |
1018 enabled. */ | |
1019 if ((opts->x_flag_sanitize & SANITIZE_USER_ADDRESS) | |
1020 && !opts_set->x_flag_sanitize_address_use_after_scope) | |
1021 opts->x_flag_sanitize_address_use_after_scope = true; | |
1022 | |
1023 /* Force -fstack-reuse=none in case -fsanitize-address-use-after-scope | |
1024 is enabled. */ | |
1025 if (opts->x_flag_sanitize_address_use_after_scope) | |
1026 { | |
1027 if (opts->x_flag_stack_reuse != SR_NONE | |
1028 && opts_set->x_flag_stack_reuse != SR_NONE) | |
1029 error_at (loc, | |
1030 "%<-fsanitize-address-use-after-scope%> requires " | |
1031 "%<-fstack-reuse=none%> option"); | |
1032 | |
1033 opts->x_flag_stack_reuse = SR_NONE; | |
1034 } | |
1035 | |
1036 if ((opts->x_flag_sanitize & SANITIZE_USER_ADDRESS) && opts->x_flag_tm) | |
1037 sorry ("transactional memory is not supported with %<-fsanitize=address%>"); | |
1038 | |
1039 if ((opts->x_flag_sanitize & SANITIZE_KERNEL_ADDRESS) && opts->x_flag_tm) | |
1040 sorry ("transactional memory is not supported with " | |
1041 "%<-fsanitize=kernel-address%>"); | |
0 | 1042 } |
1043 | |
1044 #define LEFT_COLUMN 27 | |
1045 | |
1046 /* Output ITEM, of length ITEM_WIDTH, in the left column, | |
1047 followed by word-wrapped HELP in a second column. */ | |
1048 static void | |
1049 wrap_help (const char *help, | |
1050 const char *item, | |
1051 unsigned int item_width, | |
1052 unsigned int columns) | |
1053 { | |
1054 unsigned int col_width = LEFT_COLUMN; | |
1055 unsigned int remaining, room, len; | |
1056 | |
1057 remaining = strlen (help); | |
1058 | |
1059 do | |
1060 { | |
1061 room = columns - 3 - MAX (col_width, item_width); | |
1062 if (room > columns) | |
1063 room = 0; | |
1064 len = remaining; | |
1065 | |
1066 if (room < len) | |
1067 { | |
1068 unsigned int i; | |
1069 | |
1070 for (i = 0; help[i]; i++) | |
1071 { | |
1072 if (i >= room && len != remaining) | |
1073 break; | |
1074 if (help[i] == ' ') | |
1075 len = i; | |
1076 else if ((help[i] == '-' || help[i] == '/') | |
1077 && help[i + 1] != ' ' | |
1078 && i > 0 && ISALPHA (help[i - 1])) | |
1079 len = i + 1; | |
1080 } | |
1081 } | |
1082 | |
111 | 1083 printf (" %-*.*s %.*s\n", col_width, item_width, item, len, help); |
0 | 1084 item_width = 0; |
1085 while (help[len] == ' ') | |
1086 len++; | |
1087 help += len; | |
1088 remaining -= len; | |
1089 } | |
1090 while (remaining); | |
1091 } | |
1092 | |
131 | 1093 /* Data structure used to print list of valid option values. */ |
1094 | |
1095 struct option_help_tuple | |
1096 { | |
1097 option_help_tuple (int code, vec<const char *> values): | |
1098 m_code (code), m_values (values) | |
1099 {} | |
1100 | |
1101 /* Code of an option. */ | |
1102 int m_code; | |
1103 | |
1104 /* List of possible values. */ | |
1105 vec<const char *> m_values; | |
1106 }; | |
1107 | |
0 | 1108 /* Print help for a specific front-end, etc. */ |
1109 static void | |
1110 print_filtered_help (unsigned int include_flags, | |
1111 unsigned int exclude_flags, | |
1112 unsigned int any_flags, | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1113 unsigned int columns, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1114 struct gcc_options *opts, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1115 unsigned int lang_mask) |
0 | 1116 { |
1117 unsigned int i; | |
1118 const char *help; | |
1119 bool found = false; | |
1120 bool displayed = false; | |
111 | 1121 char new_help[256]; |
0 | 1122 |
1123 if (include_flags == CL_PARAMS) | |
1124 { | |
1125 for (i = 0; i < LAST_PARAM; i++) | |
1126 { | |
1127 const char *param = compiler_params[i].option; | |
1128 | |
1129 help = compiler_params[i].help; | |
1130 if (help == NULL || *help == '\0') | |
1131 { | |
1132 if (exclude_flags & CL_UNDOCUMENTED) | |
1133 continue; | |
1134 help = undocumented_msg; | |
1135 } | |
1136 | |
1137 /* Get the translation. */ | |
1138 help = _(help); | |
1139 | |
111 | 1140 if (!opts->x_quiet_flag) |
1141 { | |
1142 snprintf (new_help, sizeof (new_help), | |
1143 _("default %d minimum %d maximum %d"), | |
1144 compiler_params[i].default_value, | |
1145 compiler_params[i].min_value, | |
1146 compiler_params[i].max_value); | |
1147 help = new_help; | |
1148 } | |
0 | 1149 wrap_help (help, param, strlen (param), columns); |
1150 } | |
1151 putchar ('\n'); | |
1152 return; | |
1153 } | |
1154 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1155 if (!opts->x_help_printed) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1156 opts->x_help_printed = XCNEWVAR (char, cl_options_count); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1157 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1158 if (!opts->x_help_enum_printed) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1159 opts->x_help_enum_printed = XCNEWVAR (char, cl_enums_count); |
0 | 1160 |
131 | 1161 auto_vec<option_help_tuple> help_tuples; |
1162 | |
0 | 1163 for (i = 0; i < cl_options_count; i++) |
1164 { | |
1165 const struct cl_option *option = cl_options + i; | |
1166 unsigned int len; | |
1167 const char *opt; | |
1168 const char *tab; | |
1169 | |
1170 if (include_flags == 0 | |
1171 || ((option->flags & include_flags) != include_flags)) | |
1172 { | |
1173 if ((option->flags & any_flags) == 0) | |
1174 continue; | |
1175 } | |
1176 | |
1177 /* Skip unwanted switches. */ | |
1178 if ((option->flags & exclude_flags) != 0) | |
1179 continue; | |
1180 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1181 /* The driver currently prints its own help text. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1182 if ((option->flags & CL_DRIVER) != 0 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1183 && (option->flags & (((1U << cl_lang_count) - 1) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1184 | CL_COMMON | CL_TARGET)) == 0) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1185 continue; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1186 |
0 | 1187 found = true; |
1188 /* Skip switches that have already been printed. */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1189 if (opts->x_help_printed[i]) |
0 | 1190 continue; |
1191 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1192 opts->x_help_printed[i] = true; |
0 | 1193 |
1194 help = option->help; | |
1195 if (help == NULL) | |
1196 { | |
1197 if (exclude_flags & CL_UNDOCUMENTED) | |
1198 continue; | |
111 | 1199 |
0 | 1200 help = undocumented_msg; |
1201 } | |
1202 | |
111 | 1203 if (option->alias_target < N_OPTS |
1204 && cl_options [option->alias_target].help) | |
1205 { | |
1206 if (help == undocumented_msg) | |
1207 { | |
1208 /* For undocumented options that are aliases for other options | |
1209 that are documented, point the reader to the other option in | |
1210 preference of the former. */ | |
1211 snprintf (new_help, sizeof new_help, | |
1212 _("Same as %s. Use the latter option instead."), | |
1213 cl_options [option->alias_target].opt_text); | |
1214 } | |
1215 else | |
1216 { | |
1217 /* For documented options with aliases, mention the aliased | |
1218 option's name for reference. */ | |
1219 snprintf (new_help, sizeof new_help, | |
1220 _("%s Same as %s."), | |
1221 help, cl_options [option->alias_target].opt_text); | |
1222 } | |
1223 | |
1224 help = new_help; | |
1225 } | |
1226 | |
1227 if (option->warn_message) | |
1228 { | |
1229 /* Mention that the use of the option will trigger a warning. */ | |
1230 if (help == new_help) | |
1231 snprintf (new_help + strlen (new_help), | |
1232 sizeof new_help - strlen (new_help), | |
1233 " %s", _(use_diagnosed_msg)); | |
1234 else | |
1235 snprintf (new_help, sizeof new_help, | |
1236 "%s %s", help, _(use_diagnosed_msg)); | |
1237 | |
1238 help = new_help; | |
1239 } | |
1240 | |
0 | 1241 /* Get the translation. */ |
1242 help = _(help); | |
1243 | |
1244 /* Find the gap between the name of the | |
1245 option and its descriptive text. */ | |
1246 tab = strchr (help, '\t'); | |
1247 if (tab) | |
1248 { | |
1249 len = tab - help; | |
1250 opt = help; | |
1251 help = tab + 1; | |
1252 } | |
1253 else | |
1254 { | |
1255 opt = option->opt_text; | |
1256 len = strlen (opt); | |
1257 } | |
1258 | |
1259 /* With the -Q option enabled we change the descriptive text associated | |
1260 with an option to be an indication of its current setting. */ | |
111 | 1261 if (!opts->x_quiet_flag) |
0 | 1262 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1263 void *flag_var = option_flag_var (i, opts); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1264 |
0 | 1265 if (len < (LEFT_COLUMN + 2)) |
1266 strcpy (new_help, "\t\t"); | |
1267 else | |
1268 strcpy (new_help, "\t"); | |
1269 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1270 if (flag_var != NULL |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1271 && option->var_type != CLVC_DEFER) |
0 | 1272 { |
1273 if (option->flags & CL_JOINED) | |
1274 { | |
1275 if (option->var_type == CLVC_STRING) | |
1276 { | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1277 if (* (const char **) flag_var != NULL) |
0 | 1278 snprintf (new_help + strlen (new_help), |
1279 sizeof (new_help) - strlen (new_help), | |
111 | 1280 "%s", * (const char **) flag_var); |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1281 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1282 else if (option->var_type == CLVC_ENUM) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1283 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1284 const struct cl_enum *e = &cl_enums[option->var_enum]; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1285 int value; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1286 const char *arg = NULL; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1287 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1288 value = e->get (flag_var); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1289 enum_value_to_arg (e->values, &arg, value, lang_mask); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1290 if (arg == NULL) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1291 arg = _("[default]"); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1292 snprintf (new_help + strlen (new_help), |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1293 sizeof (new_help) - strlen (new_help), |
111 | 1294 "%s", arg); |
0 | 1295 } |
1296 else | |
1297 sprintf (new_help + strlen (new_help), | |
111 | 1298 "%d", * (int *) flag_var); |
0 | 1299 } |
1300 else | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1301 strcat (new_help, option_enabled (i, opts) |
0 | 1302 ? _("[enabled]") : _("[disabled]")); |
1303 } | |
1304 | |
1305 help = new_help; | |
1306 } | |
1307 | |
111 | 1308 if (option->range_max != -1) |
1309 { | |
1310 char b[128]; | |
1311 snprintf (b, sizeof (b), "<%d,%d>", option->range_min, | |
1312 option->range_max); | |
1313 opt = concat (opt, b, NULL); | |
1314 len += strlen (b); | |
1315 } | |
1316 | |
0 | 1317 wrap_help (help, opt, len, columns); |
1318 displayed = true; | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1319 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1320 if (option->var_type == CLVC_ENUM |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1321 && opts->x_help_enum_printed[option->var_enum] != 2) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1322 opts->x_help_enum_printed[option->var_enum] = 1; |
131 | 1323 else |
1324 { | |
1325 vec<const char *> option_values | |
1326 = targetm_common.get_valid_option_values (i, NULL); | |
1327 if (!option_values.is_empty ()) | |
1328 help_tuples.safe_push (option_help_tuple (i, option_values)); | |
1329 } | |
0 | 1330 } |
1331 | |
1332 if (! found) | |
1333 { | |
1334 unsigned int langs = include_flags & CL_LANG_ALL; | |
1335 | |
1336 if (langs == 0) | |
1337 printf (_(" No options with the desired characteristics were found\n")); | |
1338 else | |
1339 { | |
1340 unsigned int i; | |
1341 | |
1342 /* PR 31349: Tell the user how to see all of the | |
1343 options supported by a specific front end. */ | |
1344 for (i = 0; (1U << i) < CL_LANG_ALL; i ++) | |
1345 if ((1U << i) & langs) | |
111 | 1346 printf (_(" None found. Use --help=%s to show *all* the options supported by the %s front-end.\n"), |
0 | 1347 lang_names[i], lang_names[i]); |
1348 } | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
1349 |
0 | 1350 } |
1351 else if (! displayed) | |
1352 printf (_(" All options with the desired characteristics have already been displayed\n")); | |
1353 | |
1354 putchar ('\n'); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1355 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1356 /* Print details of enumerated option arguments, if those |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1357 enumerations have help text headings provided. If no help text |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1358 is provided, presume that the possible values are listed in the |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1359 help text for the relevant options. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1360 for (i = 0; i < cl_enums_count; i++) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1361 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1362 unsigned int j, pos; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1363 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1364 if (opts->x_help_enum_printed[i] != 1) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1365 continue; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1366 if (cl_enums[i].help == NULL) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1367 continue; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1368 printf (" %s\n ", _(cl_enums[i].help)); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1369 pos = 4; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1370 for (j = 0; cl_enums[i].values[j].arg != NULL; j++) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1371 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1372 unsigned int len = strlen (cl_enums[i].values[j].arg); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1373 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1374 if (pos > 4 && pos + 1 + len <= columns) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1375 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1376 printf (" %s", cl_enums[i].values[j].arg); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1377 pos += 1 + len; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1378 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1379 else |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1380 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1381 if (pos > 4) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1382 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1383 printf ("\n "); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1384 pos = 4; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1385 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1386 printf ("%s", cl_enums[i].values[j].arg); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1387 pos += len; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1388 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1389 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1390 printf ("\n\n"); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1391 opts->x_help_enum_printed[i] = 2; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1392 } |
131 | 1393 |
1394 for (unsigned i = 0; i < help_tuples.length (); i++) | |
1395 { | |
1396 const struct cl_option *option = cl_options + help_tuples[i].m_code; | |
1397 printf (" Known valid arguments for %s option:\n ", option->opt_text); | |
1398 for (unsigned j = 0; j < help_tuples[i].m_values.length (); j++) | |
1399 printf (" %s", help_tuples[i].m_values[j]); | |
1400 printf ("\n\n"); | |
1401 } | |
0 | 1402 } |
1403 | |
1404 /* Display help for a specified type of option. | |
1405 The options must have ALL of the INCLUDE_FLAGS set | |
1406 ANY of the flags in the ANY_FLAGS set | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1407 and NONE of the EXCLUDE_FLAGS set. The current option state is in |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1408 OPTS; LANG_MASK is used for interpreting enumerated option state. */ |
0 | 1409 static void |
1410 print_specific_help (unsigned int include_flags, | |
1411 unsigned int exclude_flags, | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1412 unsigned int any_flags, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1413 struct gcc_options *opts, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1414 unsigned int lang_mask) |
0 | 1415 { |
1416 unsigned int all_langs_mask = (1U << cl_lang_count) - 1; | |
1417 const char * description = NULL; | |
1418 const char * descrip_extra = ""; | |
1419 size_t i; | |
1420 unsigned int flag; | |
1421 | |
1422 /* Sanity check: Make sure that we do not have more | |
1423 languages than we have bits available to enumerate them. */ | |
111 | 1424 gcc_assert ((1U << cl_lang_count) <= CL_MIN_OPTION_CLASS); |
0 | 1425 |
1426 /* If we have not done so already, obtain | |
1427 the desired maximum width of the output. */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1428 if (opts->x_help_columns == 0) |
0 | 1429 { |
111 | 1430 opts->x_help_columns = get_terminal_width (); |
1431 if (opts->x_help_columns == INT_MAX) | |
0 | 1432 /* Use a reasonable default. */ |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1433 opts->x_help_columns = 80; |
0 | 1434 } |
1435 | |
1436 /* Decide upon the title for the options that we are going to display. */ | |
1437 for (i = 0, flag = 1; flag <= CL_MAX_OPTION_CLASS; flag <<= 1, i ++) | |
1438 { | |
1439 switch (flag & include_flags) | |
1440 { | |
1441 case 0: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1442 case CL_DRIVER: |
0 | 1443 break; |
1444 | |
1445 case CL_TARGET: | |
1446 description = _("The following options are target specific"); | |
1447 break; | |
1448 case CL_WARNING: | |
1449 description = _("The following options control compiler warning messages"); | |
1450 break; | |
1451 case CL_OPTIMIZATION: | |
1452 description = _("The following options control optimizations"); | |
1453 break; | |
1454 case CL_COMMON: | |
1455 description = _("The following options are language-independent"); | |
1456 break; | |
1457 case CL_PARAMS: | |
1458 description = _("The --param option recognizes the following as parameters"); | |
1459 break; | |
1460 default: | |
1461 if (i >= cl_lang_count) | |
1462 break; | |
1463 if (exclude_flags & all_langs_mask) | |
1464 description = _("The following options are specific to just the language "); | |
1465 else | |
1466 description = _("The following options are supported by the language "); | |
1467 descrip_extra = lang_names [i]; | |
1468 break; | |
1469 } | |
1470 } | |
1471 | |
1472 if (description == NULL) | |
1473 { | |
1474 if (any_flags == 0) | |
1475 { | |
1476 if (include_flags & CL_UNDOCUMENTED) | |
1477 description = _("The following options are not documented"); | |
1478 else if (include_flags & CL_SEPARATE) | |
1479 description = _("The following options take separate arguments"); | |
1480 else if (include_flags & CL_JOINED) | |
1481 description = _("The following options take joined arguments"); | |
1482 else | |
1483 { | |
1484 internal_error ("unrecognized include_flags 0x%x passed to print_specific_help", | |
1485 include_flags); | |
1486 return; | |
1487 } | |
1488 } | |
1489 else | |
1490 { | |
1491 if (any_flags & all_langs_mask) | |
1492 description = _("The following options are language-related"); | |
1493 else | |
1494 description = _("The following options are language-independent"); | |
1495 } | |
1496 } | |
1497 | |
1498 printf ("%s%s:\n", description, descrip_extra); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1499 print_filtered_help (include_flags, exclude_flags, any_flags, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1500 opts->x_help_columns, opts, lang_mask); |
0 | 1501 } |
1502 | |
111 | 1503 /* Enable FDO-related flags. */ |
1504 | |
1505 static void | |
1506 enable_fdo_optimizations (struct gcc_options *opts, | |
1507 struct gcc_options *opts_set, | |
1508 int value) | |
1509 { | |
1510 if (!opts_set->x_flag_branch_probabilities) | |
1511 opts->x_flag_branch_probabilities = value; | |
1512 if (!opts_set->x_flag_profile_values) | |
1513 opts->x_flag_profile_values = value; | |
1514 if (!opts_set->x_flag_unroll_loops) | |
1515 opts->x_flag_unroll_loops = value; | |
1516 if (!opts_set->x_flag_peel_loops) | |
1517 opts->x_flag_peel_loops = value; | |
1518 if (!opts_set->x_flag_tracer) | |
1519 opts->x_flag_tracer = value; | |
1520 if (!opts_set->x_flag_value_profile_transformations) | |
1521 opts->x_flag_value_profile_transformations = value; | |
1522 if (!opts_set->x_flag_inline_functions) | |
1523 opts->x_flag_inline_functions = value; | |
1524 if (!opts_set->x_flag_ipa_cp) | |
1525 opts->x_flag_ipa_cp = value; | |
1526 if (!opts_set->x_flag_ipa_cp_clone | |
1527 && value && opts->x_flag_ipa_cp) | |
1528 opts->x_flag_ipa_cp_clone = value; | |
1529 if (!opts_set->x_flag_ipa_bit_cp | |
1530 && value && opts->x_flag_ipa_cp) | |
1531 opts->x_flag_ipa_bit_cp = value; | |
1532 if (!opts_set->x_flag_predictive_commoning) | |
1533 opts->x_flag_predictive_commoning = value; | |
1534 if (!opts_set->x_flag_split_loops) | |
1535 opts->x_flag_split_loops = value; | |
1536 if (!opts_set->x_flag_unswitch_loops) | |
1537 opts->x_flag_unswitch_loops = value; | |
1538 if (!opts_set->x_flag_gcse_after_reload) | |
1539 opts->x_flag_gcse_after_reload = value; | |
1540 if (!opts_set->x_flag_tree_loop_vectorize) | |
1541 opts->x_flag_tree_loop_vectorize = value; | |
1542 if (!opts_set->x_flag_tree_slp_vectorize) | |
1543 opts->x_flag_tree_slp_vectorize = value; | |
1544 if (!opts_set->x_flag_vect_cost_model) | |
1545 opts->x_flag_vect_cost_model = VECT_COST_MODEL_DYNAMIC; | |
1546 if (!opts_set->x_flag_tree_loop_distribute_patterns) | |
1547 opts->x_flag_tree_loop_distribute_patterns = value; | |
1548 } | |
1549 | |
1550 /* -f{,no-}sanitize{,-recover}= suboptions. */ | |
1551 const struct sanitizer_opts_s sanitizer_opts[] = | |
1552 { | |
1553 #define SANITIZER_OPT(name, flags, recover) \ | |
1554 { #name, flags, sizeof #name - 1, recover } | |
1555 SANITIZER_OPT (address, (SANITIZE_ADDRESS | SANITIZE_USER_ADDRESS), true), | |
1556 SANITIZER_OPT (kernel-address, (SANITIZE_ADDRESS | SANITIZE_KERNEL_ADDRESS), | |
1557 true), | |
131 | 1558 SANITIZER_OPT (pointer-compare, SANITIZE_POINTER_COMPARE, true), |
1559 SANITIZER_OPT (pointer-subtract, SANITIZE_POINTER_SUBTRACT, true), | |
111 | 1560 SANITIZER_OPT (thread, SANITIZE_THREAD, false), |
1561 SANITIZER_OPT (leak, SANITIZE_LEAK, false), | |
1562 SANITIZER_OPT (shift, SANITIZE_SHIFT, true), | |
1563 SANITIZER_OPT (shift-base, SANITIZE_SHIFT_BASE, true), | |
1564 SANITIZER_OPT (shift-exponent, SANITIZE_SHIFT_EXPONENT, true), | |
1565 SANITIZER_OPT (integer-divide-by-zero, SANITIZE_DIVIDE, true), | |
1566 SANITIZER_OPT (undefined, SANITIZE_UNDEFINED, true), | |
1567 SANITIZER_OPT (unreachable, SANITIZE_UNREACHABLE, false), | |
1568 SANITIZER_OPT (vla-bound, SANITIZE_VLA, true), | |
1569 SANITIZER_OPT (return, SANITIZE_RETURN, false), | |
1570 SANITIZER_OPT (null, SANITIZE_NULL, true), | |
1571 SANITIZER_OPT (signed-integer-overflow, SANITIZE_SI_OVERFLOW, true), | |
1572 SANITIZER_OPT (bool, SANITIZE_BOOL, true), | |
1573 SANITIZER_OPT (enum, SANITIZE_ENUM, true), | |
1574 SANITIZER_OPT (float-divide-by-zero, SANITIZE_FLOAT_DIVIDE, true), | |
1575 SANITIZER_OPT (float-cast-overflow, SANITIZE_FLOAT_CAST, true), | |
1576 SANITIZER_OPT (bounds, SANITIZE_BOUNDS, true), | |
1577 SANITIZER_OPT (bounds-strict, SANITIZE_BOUNDS | SANITIZE_BOUNDS_STRICT, true), | |
1578 SANITIZER_OPT (alignment, SANITIZE_ALIGNMENT, true), | |
1579 SANITIZER_OPT (nonnull-attribute, SANITIZE_NONNULL_ATTRIBUTE, true), | |
1580 SANITIZER_OPT (returns-nonnull-attribute, SANITIZE_RETURNS_NONNULL_ATTRIBUTE, | |
1581 true), | |
1582 SANITIZER_OPT (object-size, SANITIZE_OBJECT_SIZE, true), | |
1583 SANITIZER_OPT (vptr, SANITIZE_VPTR, true), | |
1584 SANITIZER_OPT (pointer-overflow, SANITIZE_POINTER_OVERFLOW, true), | |
1585 SANITIZER_OPT (builtin, SANITIZE_BUILTIN, true), | |
1586 SANITIZER_OPT (all, ~0U, true), | |
1587 #undef SANITIZER_OPT | |
1588 { NULL, 0U, 0UL, false } | |
1589 }; | |
1590 | |
1591 /* -f{,no-}sanitize-coverage= suboptions. */ | |
1592 const struct sanitizer_opts_s coverage_sanitizer_opts[] = | |
1593 { | |
1594 #define COVERAGE_SANITIZER_OPT(name, flags) \ | |
1595 { #name, flags, sizeof #name - 1, true } | |
1596 COVERAGE_SANITIZER_OPT (trace-pc, SANITIZE_COV_TRACE_PC), | |
1597 COVERAGE_SANITIZER_OPT (trace-cmp, SANITIZE_COV_TRACE_CMP), | |
1598 #undef COVERAGE_SANITIZER_OPT | |
1599 { NULL, 0U, 0UL, false } | |
1600 }; | |
1601 | |
1602 /* A struct for describing a run of chars within a string. */ | |
1603 | |
1604 struct string_fragment | |
1605 { | |
1606 string_fragment (const char *start, size_t len) | |
1607 : m_start (start), m_len (len) {} | |
1608 | |
1609 const char *m_start; | |
1610 size_t m_len; | |
1611 }; | |
1612 | |
1613 /* Specialization of edit_distance_traits for string_fragment, | |
1614 for use by get_closest_sanitizer_option. */ | |
1615 | |
1616 template <> | |
1617 struct edit_distance_traits<const string_fragment &> | |
1618 { | |
1619 static size_t get_length (const string_fragment &fragment) | |
1620 { | |
1621 return fragment.m_len; | |
1622 } | |
1623 | |
1624 static const char *get_string (const string_fragment &fragment) | |
1625 { | |
1626 return fragment.m_start; | |
1627 } | |
1628 }; | |
1629 | |
1630 /* Given ARG, an unrecognized sanitizer option, return the best | |
1631 matching sanitizer option, or NULL if there isn't one. | |
1632 OPTS is array of candidate sanitizer options. | |
1633 CODE is OPT_fsanitize_, OPT_fsanitize_recover_ or | |
1634 OPT_fsanitize_coverage_. | |
1635 VALUE is non-zero for the regular form of the option, zero | |
1636 for the "no-" form (e.g. "-fno-sanitize-recover="). */ | |
1637 | |
1638 static const char * | |
1639 get_closest_sanitizer_option (const string_fragment &arg, | |
1640 const struct sanitizer_opts_s *opts, | |
1641 enum opt_code code, int value) | |
1642 { | |
1643 best_match <const string_fragment &, const char*> bm (arg); | |
1644 for (int i = 0; opts[i].name != NULL; ++i) | |
1645 { | |
1646 /* -fsanitize=all is not valid, so don't offer it. */ | |
1647 if (code == OPT_fsanitize_ | |
1648 && opts[i].flag == ~0U | |
1649 && value) | |
1650 continue; | |
1651 | |
1652 /* For -fsanitize-recover= (and not -fno-sanitize-recover=), | |
1653 don't offer the non-recoverable options. */ | |
1654 if (code == OPT_fsanitize_recover_ | |
1655 && !opts[i].can_recover | |
1656 && value) | |
1657 continue; | |
1658 | |
1659 bm.consider (opts[i].name); | |
1660 } | |
1661 return bm.get_best_meaningful_candidate (); | |
1662 } | |
1663 | |
1664 /* Parse comma separated sanitizer suboptions from P for option SCODE, | |
1665 adjust previous FLAGS and return new ones. If COMPLAIN is false, | |
1666 don't issue diagnostics. */ | |
1667 | |
1668 unsigned int | |
1669 parse_sanitizer_options (const char *p, location_t loc, int scode, | |
1670 unsigned int flags, int value, bool complain) | |
1671 { | |
1672 enum opt_code code = (enum opt_code) scode; | |
1673 | |
1674 const struct sanitizer_opts_s *opts; | |
1675 if (code == OPT_fsanitize_coverage_) | |
1676 opts = coverage_sanitizer_opts; | |
1677 else | |
1678 opts = sanitizer_opts; | |
1679 | |
1680 while (*p != 0) | |
1681 { | |
1682 size_t len, i; | |
1683 bool found = false; | |
1684 const char *comma = strchr (p, ','); | |
1685 | |
1686 if (comma == NULL) | |
1687 len = strlen (p); | |
1688 else | |
1689 len = comma - p; | |
1690 if (len == 0) | |
1691 { | |
1692 p = comma + 1; | |
1693 continue; | |
1694 } | |
1695 | |
1696 /* Check to see if the string matches an option class name. */ | |
1697 for (i = 0; opts[i].name != NULL; ++i) | |
1698 if (len == opts[i].len && memcmp (p, opts[i].name, len) == 0) | |
1699 { | |
1700 /* Handle both -fsanitize and -fno-sanitize cases. */ | |
1701 if (value && opts[i].flag == ~0U) | |
1702 { | |
1703 if (code == OPT_fsanitize_) | |
1704 { | |
1705 if (complain) | |
1706 error_at (loc, "%<-fsanitize=all%> option is not valid"); | |
1707 } | |
1708 else | |
1709 flags |= ~(SANITIZE_THREAD | SANITIZE_LEAK | |
1710 | SANITIZE_UNREACHABLE | SANITIZE_RETURN); | |
1711 } | |
1712 else if (value) | |
1713 { | |
1714 /* Do not enable -fsanitize-recover=unreachable and | |
1715 -fsanitize-recover=return if -fsanitize-recover=undefined | |
1716 is selected. */ | |
1717 if (code == OPT_fsanitize_recover_ | |
1718 && opts[i].flag == SANITIZE_UNDEFINED) | |
1719 flags |= (SANITIZE_UNDEFINED | |
1720 & ~(SANITIZE_UNREACHABLE | SANITIZE_RETURN)); | |
1721 else | |
1722 flags |= opts[i].flag; | |
1723 } | |
1724 else | |
1725 flags &= ~opts[i].flag; | |
1726 found = true; | |
1727 break; | |
1728 } | |
1729 | |
1730 if (! found && complain) | |
1731 { | |
1732 const char *hint | |
1733 = get_closest_sanitizer_option (string_fragment (p, len), | |
1734 opts, code, value); | |
1735 | |
1736 const char *suffix; | |
1737 if (code == OPT_fsanitize_recover_) | |
1738 suffix = "-recover"; | |
1739 else if (code == OPT_fsanitize_coverage_) | |
1740 suffix = "-coverage"; | |
1741 else | |
1742 suffix = ""; | |
1743 | |
1744 if (hint) | |
1745 error_at (loc, | |
1746 "unrecognized argument to -f%ssanitize%s= option: %q.*s;" | |
1747 " did you mean %qs?", | |
1748 value ? "" : "no-", | |
1749 suffix, (int) len, p, hint); | |
1750 else | |
1751 error_at (loc, | |
1752 "unrecognized argument to -f%ssanitize%s= option: %q.*s", | |
1753 value ? "" : "no-", | |
1754 suffix, (int) len, p); | |
1755 } | |
1756 | |
1757 if (comma == NULL) | |
1758 break; | |
1759 p = comma + 1; | |
1760 } | |
1761 return flags; | |
1762 } | |
1763 | |
1764 /* Parse string values of no_sanitize attribute passed in VALUE. | |
1765 Values are separated with comma. */ | |
1766 | |
1767 unsigned int | |
1768 parse_no_sanitize_attribute (char *value) | |
1769 { | |
1770 unsigned int flags = 0; | |
1771 unsigned int i; | |
1772 char *q = strtok (value, ","); | |
1773 | |
1774 while (q != NULL) | |
1775 { | |
1776 for (i = 0; sanitizer_opts[i].name != NULL; ++i) | |
1777 if (strcmp (sanitizer_opts[i].name, q) == 0) | |
1778 { | |
1779 flags |= sanitizer_opts[i].flag; | |
1780 if (sanitizer_opts[i].flag == SANITIZE_UNDEFINED) | |
1781 flags |= SANITIZE_UNDEFINED_NONDEFAULT; | |
1782 break; | |
1783 } | |
1784 | |
1785 if (sanitizer_opts[i].name == NULL) | |
1786 warning (OPT_Wattributes, | |
1787 "%<%s%> attribute directive ignored", q); | |
1788 | |
1789 q = strtok (NULL, ","); | |
1790 } | |
1791 | |
1792 return flags; | |
1793 } | |
1794 | |
131 | 1795 /* Parse -falign-NAME format for a FLAG value. Return individual |
1796 parsed integer values into RESULT_VALUES array. If REPORT_ERROR is | |
1797 set, print error message at LOC location. */ | |
1798 | |
1799 bool | |
1800 parse_and_check_align_values (const char *flag, | |
1801 const char *name, | |
1802 auto_vec<unsigned> &result_values, | |
1803 bool report_error, | |
1804 location_t loc) | |
1805 { | |
1806 char *str = xstrdup (flag); | |
1807 for (char *p = strtok (str, ":"); p; p = strtok (NULL, ":")) | |
1808 { | |
1809 char *end; | |
1810 int v = strtol (p, &end, 10); | |
1811 if (*end != '\0' || v < 0) | |
1812 { | |
1813 if (report_error) | |
1814 error_at (loc, "invalid arguments for %<-falign-%s%> option: %qs", | |
1815 name, flag); | |
1816 | |
1817 return false; | |
1818 } | |
1819 | |
1820 result_values.safe_push ((unsigned)v); | |
1821 } | |
1822 | |
1823 free (str); | |
1824 | |
1825 /* Check that we have a correct number of values. */ | |
1826 #ifdef SUBALIGN_LOG | |
1827 unsigned max_valid_values = 4; | |
1828 #else | |
1829 unsigned max_valid_values = 2; | |
1830 #endif | |
1831 | |
1832 if (result_values.is_empty () | |
1833 || result_values.length () > max_valid_values) | |
1834 { | |
1835 if (report_error) | |
1836 error_at (loc, "invalid number of arguments for %<-falign-%s%> " | |
1837 "option: %qs", name, flag); | |
1838 return false; | |
1839 } | |
1840 | |
1841 for (unsigned i = 0; i < result_values.length (); i++) | |
1842 if (result_values[i] > MAX_CODE_ALIGN_VALUE) | |
1843 { | |
1844 if (report_error) | |
1845 error_at (loc, "%<-falign-%s%> is not between 0 and %d", | |
1846 name, MAX_CODE_ALIGN_VALUE); | |
1847 return false; | |
1848 } | |
1849 | |
1850 return true; | |
1851 } | |
1852 | |
1853 /* Check that alignment value FLAG for -falign-NAME is valid at a given | |
1854 location LOC. */ | |
1855 | |
1856 static void | |
1857 check_alignment_argument (location_t loc, const char *flag, const char *name) | |
1858 { | |
1859 auto_vec<unsigned> align_result; | |
1860 parse_and_check_align_values (flag, name, align_result, true, loc); | |
1861 } | |
1862 | |
0 | 1863 /* Handle target- and language-independent options. Return zero to |
1864 generate an "unknown option" message. Only options that need | |
1865 extra handling need to be listed here; if you simply want | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1866 DECODED->value assigned to a variable, it happens automatically. */ |
0 | 1867 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1868 bool |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1869 common_handle_option (struct gcc_options *opts, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1870 struct gcc_options *opts_set, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1871 const struct cl_decoded_option *decoded, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1872 unsigned int lang_mask, int kind ATTRIBUTE_UNUSED, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1873 location_t loc, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1874 const struct cl_option_handlers *handlers, |
111 | 1875 diagnostic_context *dc, |
1876 void (*target_option_override_hook) (void)) | |
0 | 1877 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1878 size_t scode = decoded->opt_index; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1879 const char *arg = decoded->arg; |
131 | 1880 HOST_WIDE_INT value = decoded->value; |
0 | 1881 enum opt_code code = (enum opt_code) scode; |
1882 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1883 gcc_assert (decoded->canonical_option_num_elements <= 2); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1884 |
0 | 1885 switch (code) |
1886 { | |
1887 case OPT__param: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1888 handle_param (opts, opts_set, loc, arg); |
0 | 1889 break; |
1890 | |
1891 case OPT__help: | |
1892 { | |
1893 unsigned int all_langs_mask = (1U << cl_lang_count) - 1; | |
1894 unsigned int undoc_mask; | |
1895 unsigned int i; | |
1896 | |
111 | 1897 if (lang_mask == CL_DRIVER) |
1898 break; | |
1899 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1900 undoc_mask = ((opts->x_verbose_flag | opts->x_extra_warnings) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1901 ? 0 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1902 : CL_UNDOCUMENTED); |
111 | 1903 target_option_override_hook (); |
0 | 1904 /* First display any single language specific options. */ |
1905 for (i = 0; i < cl_lang_count; i++) | |
1906 print_specific_help | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1907 (1U << i, (all_langs_mask & (~ (1U << i))) | undoc_mask, 0, opts, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1908 lang_mask); |
0 | 1909 /* Next display any multi language specific options. */ |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1910 print_specific_help (0, undoc_mask, all_langs_mask, opts, lang_mask); |
0 | 1911 /* Then display any remaining, non-language options. */ |
1912 for (i = CL_MIN_OPTION_CLASS; i <= CL_MAX_OPTION_CLASS; i <<= 1) | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1913 if (i != CL_DRIVER) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1914 print_specific_help (i, undoc_mask, 0, opts, lang_mask); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1915 opts->x_exit_after_options = true; |
0 | 1916 break; |
1917 } | |
1918 | |
1919 case OPT__target_help: | |
111 | 1920 if (lang_mask == CL_DRIVER) |
1921 break; | |
1922 | |
1923 target_option_override_hook (); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1924 print_specific_help (CL_TARGET, CL_UNDOCUMENTED, 0, opts, lang_mask); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1925 opts->x_exit_after_options = true; |
0 | 1926 break; |
1927 | |
1928 case OPT__help_: | |
1929 { | |
111 | 1930 const char *a = arg; |
0 | 1931 unsigned int include_flags = 0; |
1932 /* Note - by default we include undocumented options when listing | |
1933 specific classes. If you only want to see documented options | |
1934 then add ",^undocumented" to the --help= option. E.g.: | |
1935 | |
1936 --help=target,^undocumented */ | |
1937 unsigned int exclude_flags = 0; | |
1938 | |
111 | 1939 if (lang_mask == CL_DRIVER) |
1940 break; | |
1941 | |
0 | 1942 /* Walk along the argument string, parsing each word in turn. |
1943 The format is: | |
1944 arg = [^]{word}[,{arg}] | |
1945 word = {optimizers|target|warnings|undocumented| | |
1946 params|common|<language>} */ | |
111 | 1947 while (*a != 0) |
0 | 1948 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
1949 static const struct |
0 | 1950 { |
111 | 1951 const char *string; |
0 | 1952 unsigned int flag; |
1953 } | |
1954 specifics[] = | |
1955 { | |
1956 { "optimizers", CL_OPTIMIZATION }, | |
1957 { "target", CL_TARGET }, | |
1958 { "warnings", CL_WARNING }, | |
1959 { "undocumented", CL_UNDOCUMENTED }, | |
1960 { "params", CL_PARAMS }, | |
1961 { "joined", CL_JOINED }, | |
1962 { "separate", CL_SEPARATE }, | |
1963 { "common", CL_COMMON }, | |
1964 { NULL, 0 } | |
1965 }; | |
111 | 1966 unsigned int *pflags; |
1967 const char *comma; | |
0 | 1968 unsigned int lang_flag, specific_flag; |
1969 unsigned int len; | |
1970 unsigned int i; | |
1971 | |
111 | 1972 if (*a == '^') |
0 | 1973 { |
111 | 1974 ++a; |
1975 if (*a == '\0') | |
1976 { | |
1977 error_at (loc, "missing argument to %qs", "--help=^"); | |
1978 break; | |
1979 } | |
1980 pflags = &exclude_flags; | |
0 | 1981 } |
1982 else | |
111 | 1983 pflags = &include_flags; |
0 | 1984 |
1985 comma = strchr (a, ','); | |
1986 if (comma == NULL) | |
1987 len = strlen (a); | |
1988 else | |
1989 len = comma - a; | |
1990 if (len == 0) | |
1991 { | |
1992 a = comma + 1; | |
1993 continue; | |
1994 } | |
1995 | |
1996 /* Check to see if the string matches an option class name. */ | |
1997 for (i = 0, specific_flag = 0; specifics[i].string != NULL; i++) | |
1998 if (strncasecmp (a, specifics[i].string, len) == 0) | |
1999 { | |
2000 specific_flag = specifics[i].flag; | |
2001 break; | |
2002 } | |
2003 | |
2004 /* Check to see if the string matches a language name. | |
2005 Note - we rely upon the alpha-sorted nature of the entries in | |
2006 the lang_names array, specifically that shorter names appear | |
2007 before their longer variants. (i.e. C before C++). That way | |
2008 when we are attempting to match --help=c for example we will | |
2009 match with C first and not C++. */ | |
2010 for (i = 0, lang_flag = 0; i < cl_lang_count; i++) | |
2011 if (strncasecmp (a, lang_names[i], len) == 0) | |
2012 { | |
2013 lang_flag = 1U << i; | |
2014 break; | |
2015 } | |
2016 | |
2017 if (specific_flag != 0) | |
2018 { | |
2019 if (lang_flag == 0) | |
111 | 2020 *pflags |= specific_flag; |
0 | 2021 else |
2022 { | |
2023 /* The option's argument matches both the start of a | |
2024 language name and the start of an option class name. | |
2025 We have a special case for when the user has | |
2026 specified "--help=c", but otherwise we have to issue | |
2027 a warning. */ | |
2028 if (strncasecmp (a, "c", len) == 0) | |
111 | 2029 *pflags |= lang_flag; |
0 | 2030 else |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2031 warning_at (loc, 0, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2032 "--help argument %q.*s is ambiguous, " |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2033 "please be more specific", |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2034 len, a); |
0 | 2035 } |
2036 } | |
2037 else if (lang_flag != 0) | |
111 | 2038 *pflags |= lang_flag; |
0 | 2039 else |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2040 warning_at (loc, 0, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2041 "unrecognized argument to --help= option: %q.*s", |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2042 len, a); |
0 | 2043 |
2044 if (comma == NULL) | |
2045 break; | |
2046 a = comma + 1; | |
2047 } | |
2048 | |
2049 if (include_flags) | |
111 | 2050 { |
2051 target_option_override_hook (); | |
2052 print_specific_help (include_flags, exclude_flags, 0, opts, | |
2053 lang_mask); | |
2054 } | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2055 opts->x_exit_after_options = true; |
0 | 2056 break; |
2057 } | |
2058 | |
2059 case OPT__version: | |
111 | 2060 if (lang_mask == CL_DRIVER) |
2061 break; | |
2062 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2063 opts->x_exit_after_options = true; |
0 | 2064 break; |
2065 | |
131 | 2066 case OPT__completion_: |
2067 break; | |
2068 | |
111 | 2069 case OPT_fsanitize_: |
2070 opts->x_flag_sanitize | |
2071 = parse_sanitizer_options (arg, loc, code, | |
2072 opts->x_flag_sanitize, value, true); | |
2073 | |
2074 /* Kernel ASan implies normal ASan but does not yet support | |
2075 all features. */ | |
2076 if (opts->x_flag_sanitize & SANITIZE_KERNEL_ADDRESS) | |
2077 { | |
2078 maybe_set_param_value (PARAM_ASAN_INSTRUMENTATION_WITH_CALL_THRESHOLD, | |
2079 0, opts->x_param_values, | |
2080 opts_set->x_param_values); | |
2081 maybe_set_param_value (PARAM_ASAN_GLOBALS, 0, opts->x_param_values, | |
2082 opts_set->x_param_values); | |
2083 maybe_set_param_value (PARAM_ASAN_STACK, 0, opts->x_param_values, | |
2084 opts_set->x_param_values); | |
2085 maybe_set_param_value (PARAM_ASAN_PROTECT_ALLOCAS, 0, | |
2086 opts->x_param_values, | |
2087 opts_set->x_param_values); | |
2088 maybe_set_param_value (PARAM_ASAN_USE_AFTER_RETURN, 0, | |
2089 opts->x_param_values, | |
2090 opts_set->x_param_values); | |
2091 } | |
2092 break; | |
2093 | |
2094 case OPT_fsanitize_recover_: | |
2095 opts->x_flag_sanitize_recover | |
2096 = parse_sanitizer_options (arg, loc, code, | |
2097 opts->x_flag_sanitize_recover, value, true); | |
2098 break; | |
2099 | |
2100 case OPT_fasan_shadow_offset_: | |
2101 /* Deferred. */ | |
2102 break; | |
2103 | |
2104 case OPT_fsanitize_address_use_after_scope: | |
2105 opts->x_flag_sanitize_address_use_after_scope = value; | |
2106 break; | |
2107 | |
2108 case OPT_fsanitize_recover: | |
2109 if (value) | |
2110 opts->x_flag_sanitize_recover | |
2111 |= (SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT) | |
2112 & ~(SANITIZE_UNREACHABLE | SANITIZE_RETURN); | |
2113 else | |
2114 opts->x_flag_sanitize_recover | |
2115 &= ~(SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT); | |
2116 break; | |
2117 | |
2118 case OPT_fsanitize_coverage_: | |
2119 opts->x_flag_sanitize_coverage | |
2120 = parse_sanitizer_options (arg, loc, code, | |
2121 opts->x_flag_sanitize_coverage, value, true); | |
2122 break; | |
2123 | |
0 | 2124 case OPT_O: |
2125 case OPT_Os: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2126 case OPT_Ofast: |
111 | 2127 case OPT_Og: |
0 | 2128 /* Currently handled in a prescan. */ |
2129 break; | |
2130 | |
111 | 2131 case OPT_Werror: |
2132 dc->warning_as_error_requested = value; | |
2133 break; | |
2134 | |
0 | 2135 case OPT_Werror_: |
111 | 2136 if (lang_mask == CL_DRIVER) |
2137 break; | |
2138 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2139 enable_warning_as_error (arg, value, lang_mask, handlers, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2140 opts, opts_set, loc, dc); |
0 | 2141 break; |
2142 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2143 case OPT_Wfatal_errors: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2144 dc->fatal_errors = value; |
0 | 2145 break; |
2146 | |
111 | 2147 case OPT_Wstack_usage_: |
2148 opts->x_flag_stack_usage_info = value != -1; | |
2149 break; | |
2150 | |
0 | 2151 case OPT_Wstrict_aliasing: |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2152 set_Wstrict_aliasing (opts, value); |
0 | 2153 break; |
2154 | |
2155 case OPT_Wstrict_overflow: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2156 opts->x_warn_strict_overflow = (value |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2157 ? (int) WARN_STRICT_OVERFLOW_CONDITIONAL |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2158 : 0); |
0 | 2159 break; |
2160 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2161 case OPT_Wsystem_headers: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2162 dc->dc_warn_system_headers = value; |
0 | 2163 break; |
2164 | |
2165 case OPT_aux_info: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2166 opts->x_flag_gen_aux_info = 1; |
0 | 2167 break; |
2168 | |
2169 case OPT_auxbase_strip: | |
2170 { | |
2171 char *tmp = xstrdup (arg); | |
2172 strip_off_ending (tmp, strlen (tmp)); | |
2173 if (tmp[0]) | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2174 opts->x_aux_base_name = tmp; |
111 | 2175 else |
2176 free (tmp); | |
0 | 2177 } |
2178 break; | |
2179 | |
2180 case OPT_d: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2181 decode_d_option (arg, opts, loc, dc); |
0 | 2182 break; |
2183 | |
2184 case OPT_fcall_used_: | |
2185 case OPT_fcall_saved_: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2186 /* Deferred. */ |
0 | 2187 break; |
2188 | |
2189 case OPT_fdbg_cnt_: | |
111 | 2190 /* Deferred. */ |
2191 break; | |
2192 | |
0 | 2193 case OPT_fdbg_cnt_list: |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2194 /* Deferred. */ |
111 | 2195 opts->x_exit_after_options = true; |
0 | 2196 break; |
2197 | |
2198 case OPT_fdebug_prefix_map_: | |
131 | 2199 case OPT_ffile_prefix_map_: |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2200 /* Deferred. */ |
0 | 2201 break; |
2202 | |
2203 case OPT_fdiagnostics_show_location_: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2204 diagnostic_prefixing_rule (dc) = (diagnostic_prefixing_rule_t) value; |
0 | 2205 break; |
111 | 2206 |
2207 case OPT_fdiagnostics_show_caret: | |
2208 dc->show_caret = value; | |
2209 break; | |
2210 | |
131 | 2211 case OPT_fdiagnostics_show_labels: |
2212 dc->show_labels_p = value; | |
2213 break; | |
2214 | |
2215 case OPT_fdiagnostics_show_line_numbers: | |
2216 dc->show_line_numbers_p = value; | |
2217 break; | |
2218 | |
111 | 2219 case OPT_fdiagnostics_color_: |
2220 diagnostic_color_init (dc, value); | |
2221 break; | |
2222 | |
2223 case OPT_fdiagnostics_parseable_fixits: | |
2224 dc->parseable_fixits_p = value; | |
2225 break; | |
0 | 2226 |
2227 case OPT_fdiagnostics_show_option: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2228 dc->show_option_requested = value; |
0 | 2229 break; |
2230 | |
131 | 2231 case OPT_fdiagnostics_minimum_margin_width_: |
2232 dc->min_margin_width = value; | |
2233 break; | |
2234 | |
0 | 2235 case OPT_fdump_: |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2236 /* Deferred. */ |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2237 break; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2238 |
0 | 2239 case OPT_ffast_math: |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2240 set_fast_math_flags (opts, value); |
0 | 2241 break; |
2242 | |
2243 case OPT_funsafe_math_optimizations: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2244 set_unsafe_math_optimizations_flags (opts, value); |
0 | 2245 break; |
2246 | |
2247 case OPT_ffixed_: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2248 /* Deferred. */ |
0 | 2249 break; |
2250 | |
2251 case OPT_finline_limit_: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2252 set_param_value ("max-inline-insns-single", value / 2, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2253 opts->x_param_values, opts_set->x_param_values); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2254 set_param_value ("max-inline-insns-auto", value / 2, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2255 opts->x_param_values, opts_set->x_param_values); |
0 | 2256 break; |
2257 | |
2258 case OPT_finstrument_functions_exclude_function_list_: | |
2259 add_comma_separated_to_vector | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2260 (&opts->x_flag_instrument_functions_exclude_functions, arg); |
0 | 2261 break; |
2262 | |
2263 case OPT_finstrument_functions_exclude_file_list_: | |
2264 add_comma_separated_to_vector | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2265 (&opts->x_flag_instrument_functions_exclude_files, arg); |
0 | 2266 break; |
2267 | |
2268 case OPT_fmessage_length_: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2269 pp_set_line_maximum_length (dc->printer, value); |
111 | 2270 diagnostic_set_caret_max_width (dc, value); |
0 | 2271 break; |
2272 | |
111 | 2273 case OPT_fopt_info: |
2274 case OPT_fopt_info_: | |
2275 /* Deferred. */ | |
2276 break; | |
2277 | |
2278 case OPT_foffload_: | |
2279 { | |
2280 const char *p = arg; | |
2281 opts->x_flag_disable_hsa = true; | |
2282 while (*p != 0) | |
2283 { | |
2284 const char *comma = strchr (p, ','); | |
2285 | |
2286 if ((strncmp (p, "disable", 7) == 0) | |
2287 && (p[7] == ',' || p[7] == '\0')) | |
2288 { | |
2289 opts->x_flag_disable_hsa = true; | |
2290 break; | |
2291 } | |
2292 | |
2293 if ((strncmp (p, "hsa", 3) == 0) | |
2294 && (p[3] == ',' || p[3] == '\0')) | |
2295 { | |
2296 #ifdef ENABLE_HSA | |
2297 opts->x_flag_disable_hsa = false; | |
2298 #else | |
2299 sorry ("HSA has not been enabled during configuration"); | |
2300 #endif | |
2301 } | |
2302 if (!comma) | |
2303 break; | |
2304 p = comma + 1; | |
2305 } | |
2306 break; | |
2307 } | |
2308 | |
2309 #ifndef ACCEL_COMPILER | |
2310 case OPT_foffload_abi_: | |
2311 error_at (loc, "%<-foffload-abi%> option can be specified only for " | |
2312 "offload compiler"); | |
2313 break; | |
2314 #endif | |
2315 | |
0 | 2316 case OPT_fpack_struct_: |
2317 if (value <= 0 || (value & (value - 1)) || value > 16) | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2318 error_at (loc, |
131 | 2319 "structure alignment must be a small power of two, not %wu", |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2320 value); |
0 | 2321 else |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2322 opts->x_initial_max_fld_align = value; |
0 | 2323 break; |
2324 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2325 case OPT_fplugin_: |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2326 case OPT_fplugin_arg_: |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2327 /* Deferred. */ |
0 | 2328 break; |
2329 | |
2330 case OPT_fprofile_use_: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2331 opts->x_profile_data_prefix = xstrdup (arg); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2332 opts->x_flag_profile_use = true; |
0 | 2333 value = true; |
2334 /* No break here - do -fprofile-use processing. */ | |
111 | 2335 /* FALLTHRU */ |
0 | 2336 case OPT_fprofile_use: |
111 | 2337 enable_fdo_optimizations (opts, opts_set, value); |
2338 if (!opts_set->x_flag_profile_reorder_functions) | |
2339 opts->x_flag_profile_reorder_functions = value; | |
2340 /* Indirect call profiling should do all useful transformations | |
2341 speculative devirtualization does. */ | |
2342 if (!opts_set->x_flag_devirtualize_speculatively | |
2343 && opts->x_flag_value_profile_transformations) | |
2344 opts->x_flag_devirtualize_speculatively = false; | |
2345 break; | |
2346 | |
2347 case OPT_fauto_profile_: | |
2348 opts->x_auto_profile_file = xstrdup (arg); | |
2349 opts->x_flag_auto_profile = true; | |
2350 value = true; | |
2351 /* No break here - do -fauto-profile processing. */ | |
2352 /* FALLTHRU */ | |
2353 case OPT_fauto_profile: | |
2354 enable_fdo_optimizations (opts, opts_set, value); | |
2355 if (!opts_set->x_flag_profile_correction) | |
2356 opts->x_flag_profile_correction = value; | |
2357 maybe_set_param_value ( | |
2358 PARAM_EARLY_INLINER_MAX_ITERATIONS, 10, | |
2359 opts->x_param_values, opts_set->x_param_values); | |
0 | 2360 break; |
2361 | |
2362 case OPT_fprofile_generate_: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2363 opts->x_profile_data_prefix = xstrdup (arg); |
0 | 2364 value = true; |
2365 /* No break here - do -fprofile-generate processing. */ | |
111 | 2366 /* FALLTHRU */ |
0 | 2367 case OPT_fprofile_generate: |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2368 if (!opts_set->x_profile_arc_flag) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2369 opts->x_profile_arc_flag = value; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2370 if (!opts_set->x_flag_profile_values) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2371 opts->x_flag_profile_values = value; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2372 if (!opts_set->x_flag_inline_functions) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2373 opts->x_flag_inline_functions = value; |
111 | 2374 if (!opts_set->x_flag_ipa_bit_cp) |
2375 opts->x_flag_ipa_bit_cp = value; | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2376 /* FIXME: Instrumentation we insert makes ipa-reference bitmaps |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2377 quadratic. Disable the pass until better memory representation |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2378 is done. */ |
111 | 2379 if (!opts_set->x_flag_ipa_reference) |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2380 opts->x_flag_ipa_reference = false; |
0 | 2381 break; |
2382 | |
111 | 2383 case OPT_fpatchable_function_entry_: |
2384 { | |
2385 char *patch_area_arg = xstrdup (arg); | |
2386 char *comma = strchr (patch_area_arg, ','); | |
2387 if (comma) | |
2388 { | |
2389 *comma = '\0'; | |
2390 function_entry_patch_area_size = | |
2391 integral_argument (patch_area_arg); | |
2392 function_entry_patch_area_start = | |
2393 integral_argument (comma + 1); | |
2394 } | |
2395 else | |
2396 { | |
2397 function_entry_patch_area_size = | |
2398 integral_argument (patch_area_arg); | |
2399 function_entry_patch_area_start = 0; | |
2400 } | |
2401 if (function_entry_patch_area_size < 0 | |
2402 || function_entry_patch_area_start < 0 | |
2403 || function_entry_patch_area_size | |
2404 < function_entry_patch_area_start) | |
2405 error ("invalid arguments for %<-fpatchable_function_entry%>"); | |
2406 free (patch_area_arg); | |
2407 } | |
2408 break; | |
2409 | |
2410 case OPT_ftree_vectorize: | |
2411 /* Automatically sets -ftree-loop-vectorize and | |
2412 -ftree-slp-vectorize. Nothing more to do here. */ | |
2413 break; | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2414 case OPT_fshow_column: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2415 dc->show_column = value; |
0 | 2416 break; |
2417 | |
2418 case OPT_frandom_seed: | |
2419 /* The real switch is -fno-random-seed. */ | |
2420 if (value) | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2421 return false; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2422 /* Deferred. */ |
0 | 2423 break; |
2424 | |
2425 case OPT_frandom_seed_: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2426 /* Deferred. */ |
0 | 2427 break; |
2428 | |
2429 case OPT_fsched_verbose_: | |
2430 #ifdef INSN_SCHEDULING | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2431 /* Handled with Var in common.opt. */ |
0 | 2432 break; |
2433 #else | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2434 return false; |
0 | 2435 #endif |
2436 | |
2437 case OPT_fsched_stalled_insns_: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2438 opts->x_flag_sched_stalled_insns = value; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2439 if (opts->x_flag_sched_stalled_insns == 0) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2440 opts->x_flag_sched_stalled_insns = -1; |
0 | 2441 break; |
2442 | |
2443 case OPT_fsched_stalled_insns_dep_: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2444 opts->x_flag_sched_stalled_insns_dep = value; |
0 | 2445 break; |
2446 | |
2447 case OPT_fstack_check_: | |
2448 if (!strcmp (arg, "no")) | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2449 opts->x_flag_stack_check = NO_STACK_CHECK; |
0 | 2450 else if (!strcmp (arg, "generic")) |
2451 /* This is the old stack checking method. */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2452 opts->x_flag_stack_check = STACK_CHECK_BUILTIN |
0 | 2453 ? FULL_BUILTIN_STACK_CHECK |
2454 : GENERIC_STACK_CHECK; | |
2455 else if (!strcmp (arg, "specific")) | |
2456 /* This is the new stack checking method. */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2457 opts->x_flag_stack_check = STACK_CHECK_BUILTIN |
0 | 2458 ? FULL_BUILTIN_STACK_CHECK |
2459 : STACK_CHECK_STATIC_BUILTIN | |
2460 ? STATIC_BUILTIN_STACK_CHECK | |
2461 : GENERIC_STACK_CHECK; | |
2462 else | |
111 | 2463 warning_at (loc, 0, "unknown stack check parameter %qs", arg); |
0 | 2464 break; |
2465 | |
2466 case OPT_fstack_limit: | |
2467 /* The real switch is -fno-stack-limit. */ | |
2468 if (value) | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2469 return false; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2470 /* Deferred. */ |
0 | 2471 break; |
2472 | |
2473 case OPT_fstack_limit_register_: | |
2474 case OPT_fstack_limit_symbol_: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2475 /* Deferred. */ |
0 | 2476 break; |
2477 | |
111 | 2478 case OPT_fstack_usage: |
2479 opts->x_flag_stack_usage = value; | |
2480 opts->x_flag_stack_usage_info = value != 0; | |
0 | 2481 break; |
2482 | |
2483 case OPT_g: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2484 set_debug_level (NO_DEBUG, DEFAULT_GDB_EXTENSIONS, arg, opts, opts_set, |
111 | 2485 loc); |
0 | 2486 break; |
2487 | |
111 | 2488 case OPT_gdwarf: |
2489 if (arg && strlen (arg) != 0) | |
2490 { | |
2491 error_at (loc, "%<-gdwarf%s%> is ambiguous; " | |
2492 "use %<-gdwarf-%s%> for DWARF version " | |
2493 "or %<-gdwarf -g%s%> for debug level", arg, arg, arg); | |
2494 break; | |
2495 } | |
2496 else | |
2497 value = opts->x_dwarf_version; | |
2498 | |
2499 /* FALLTHRU */ | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2500 case OPT_gdwarf_: |
111 | 2501 if (value < 2 || value > 5) |
131 | 2502 error_at (loc, "dwarf version %wu is not supported", value); |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2503 else |
111 | 2504 opts->x_dwarf_version = value; |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2505 set_debug_level (DWARF2_DEBUG, false, "", opts, opts_set, loc); |
0 | 2506 break; |
2507 | |
111 | 2508 case OPT_gsplit_dwarf: |
2509 set_debug_level (NO_DEBUG, DEFAULT_GDB_EXTENSIONS, "", opts, opts_set, | |
2510 loc); | |
2511 break; | |
2512 | |
0 | 2513 case OPT_ggdb: |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2514 set_debug_level (NO_DEBUG, 2, arg, opts, opts_set, loc); |
0 | 2515 break; |
2516 | |
2517 case OPT_gstabs: | |
2518 case OPT_gstabs_: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2519 set_debug_level (DBX_DEBUG, code == OPT_gstabs_, arg, opts, opts_set, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2520 loc); |
0 | 2521 break; |
2522 | |
2523 case OPT_gvms: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2524 set_debug_level (VMS_DEBUG, false, arg, opts, opts_set, loc); |
0 | 2525 break; |
2526 | |
2527 case OPT_gxcoff: | |
2528 case OPT_gxcoff_: | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2529 set_debug_level (XCOFF_DEBUG, code == OPT_gxcoff_, arg, opts, opts_set, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2530 loc); |
0 | 2531 break; |
2532 | |
111 | 2533 case OPT_gz: |
2534 case OPT_gz_: | |
2535 /* Handled completely via specs. */ | |
2536 break; | |
2537 | |
0 | 2538 case OPT_pedantic_errors: |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2539 dc->pedantic_errors = 1; |
111 | 2540 control_warning_option (OPT_Wpedantic, DK_ERROR, NULL, value, |
2541 loc, lang_mask, | |
2542 handlers, opts, opts_set, | |
2543 dc); | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
2544 break; |
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
2545 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2546 case OPT_flto: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2547 opts->x_flag_lto = value ? "" : NULL; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2548 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2549 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2550 case OPT_w: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2551 dc->dc_inhibit_warnings = true; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2552 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2553 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2554 case OPT_fmax_errors_: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2555 dc->max_errors = value; |
0 | 2556 break; |
2557 | |
111 | 2558 case OPT_fuse_ld_bfd: |
2559 case OPT_fuse_ld_gold: | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2560 case OPT_fuse_linker_plugin: |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2561 /* No-op. Used by the driver and passed to us because it starts with f.*/ |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2562 break; |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2563 |
111 | 2564 case OPT_fwrapv: |
2565 if (value) | |
2566 opts->x_flag_trapv = 0; | |
2567 break; | |
2568 | |
2569 case OPT_ftrapv: | |
2570 if (value) | |
2571 opts->x_flag_wrapv = 0; | |
2572 break; | |
2573 | |
131 | 2574 case OPT_fstrict_overflow: |
2575 opts->x_flag_wrapv = !value; | |
2576 opts->x_flag_wrapv_pointer = !value; | |
2577 if (!value) | |
2578 opts->x_flag_trapv = 0; | |
2579 break; | |
2580 | |
111 | 2581 case OPT_fipa_icf: |
2582 opts->x_flag_ipa_icf_functions = value; | |
2583 opts->x_flag_ipa_icf_variables = value; | |
2584 break; | |
2585 | |
131 | 2586 case OPT_falign_loops_: |
2587 check_alignment_argument (loc, arg, "loops"); | |
2588 break; | |
2589 | |
2590 case OPT_falign_jumps_: | |
2591 check_alignment_argument (loc, arg, "jumps"); | |
2592 break; | |
2593 | |
2594 case OPT_falign_labels_: | |
2595 check_alignment_argument (loc, arg, "labels"); | |
2596 break; | |
2597 | |
2598 case OPT_falign_functions_: | |
2599 check_alignment_argument (loc, arg, "functions"); | |
2600 break; | |
2601 | |
0 | 2602 default: |
2603 /* If the flag was handled in a standard way, assume the lack of | |
2604 processing here is intentional. */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2605 gcc_assert (option_flag_var (scode, opts)); |
0 | 2606 break; |
2607 } | |
2608 | |
111 | 2609 common_handle_option_auto (opts, opts_set, decoded, lang_mask, kind, |
2610 loc, handlers, dc); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2611 return true; |
0 | 2612 } |
2613 | |
2614 /* Handle --param NAME=VALUE. */ | |
2615 static void | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2616 handle_param (struct gcc_options *opts, struct gcc_options *opts_set, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2617 location_t loc, const char *carg) |
0 | 2618 { |
2619 char *equal, *arg; | |
2620 int value; | |
2621 | |
2622 arg = xstrdup (carg); | |
2623 equal = strchr (arg, '='); | |
2624 if (!equal) | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2625 error_at (loc, "%s: --param arguments should be of the form NAME=VALUE", |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2626 arg); |
0 | 2627 else |
2628 { | |
111 | 2629 *equal = '\0'; |
2630 | |
2631 enum compiler_param index; | |
2632 if (!find_param (arg, &index)) | |
2633 { | |
2634 const char *suggestion = find_param_fuzzy (arg); | |
2635 if (suggestion) | |
2636 error_at (loc, "invalid --param name %qs; did you mean %qs?", | |
2637 arg, suggestion); | |
2638 else | |
2639 error_at (loc, "invalid --param name %qs", arg); | |
2640 } | |
0 | 2641 else |
2642 { | |
111 | 2643 if (!param_string_value_p (index, equal + 1, &value)) |
2644 value = integral_argument (equal + 1); | |
2645 | |
2646 if (value == -1) | |
2647 error_at (loc, "invalid --param value %qs", equal + 1); | |
2648 else | |
2649 set_param_value (arg, value, | |
2650 opts->x_param_values, opts_set->x_param_values); | |
0 | 2651 } |
2652 } | |
2653 | |
2654 free (arg); | |
2655 } | |
2656 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2657 /* Used to set the level of strict aliasing warnings in OPTS, |
0 | 2658 when no level is specified (i.e., when -Wstrict-aliasing, and not |
2659 -Wstrict-aliasing=level was given). | |
2660 ONOFF is assumed to take value 1 when -Wstrict-aliasing is specified, | |
2661 and 0 otherwise. After calling this function, wstrict_aliasing will be | |
2662 set to the default value of -Wstrict_aliasing=level, currently 3. */ | |
111 | 2663 static void |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2664 set_Wstrict_aliasing (struct gcc_options *opts, int onoff) |
0 | 2665 { |
2666 gcc_assert (onoff == 0 || onoff == 1); | |
2667 if (onoff != 0) | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2668 opts->x_warn_strict_aliasing = 3; |
0 | 2669 else |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2670 opts->x_warn_strict_aliasing = 0; |
0 | 2671 } |
2672 | |
2673 /* The following routines are useful in setting all the flags that | |
2674 -ffast-math and -fno-fast-math imply. */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2675 static void |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2676 set_fast_math_flags (struct gcc_options *opts, int set) |
0 | 2677 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2678 if (!opts->frontend_set_flag_unsafe_math_optimizations) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2679 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2680 opts->x_flag_unsafe_math_optimizations = set; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2681 set_unsafe_math_optimizations_flags (opts, set); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2682 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2683 if (!opts->frontend_set_flag_finite_math_only) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2684 opts->x_flag_finite_math_only = set; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2685 if (!opts->frontend_set_flag_errno_math) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2686 opts->x_flag_errno_math = !set; |
0 | 2687 if (set) |
2688 { | |
111 | 2689 if (opts->frontend_set_flag_excess_precision_cmdline |
2690 == EXCESS_PRECISION_DEFAULT) | |
2691 opts->x_flag_excess_precision_cmdline | |
2692 = set ? EXCESS_PRECISION_FAST : EXCESS_PRECISION_DEFAULT; | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2693 if (!opts->frontend_set_flag_signaling_nans) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2694 opts->x_flag_signaling_nans = 0; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2695 if (!opts->frontend_set_flag_rounding_math) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2696 opts->x_flag_rounding_math = 0; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2697 if (!opts->frontend_set_flag_cx_limited_range) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2698 opts->x_flag_cx_limited_range = 1; |
0 | 2699 } |
2700 } | |
2701 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2702 /* When -funsafe-math-optimizations is set the following |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2703 flags are set as well. */ |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2704 static void |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2705 set_unsafe_math_optimizations_flags (struct gcc_options *opts, int set) |
0 | 2706 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2707 if (!opts->frontend_set_flag_trapping_math) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2708 opts->x_flag_trapping_math = !set; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2709 if (!opts->frontend_set_flag_signed_zeros) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2710 opts->x_flag_signed_zeros = !set; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2711 if (!opts->frontend_set_flag_associative_math) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2712 opts->x_flag_associative_math = set; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2713 if (!opts->frontend_set_flag_reciprocal_math) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2714 opts->x_flag_reciprocal_math = set; |
0 | 2715 } |
2716 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2717 /* Return true iff flags in OPTS are set as if -ffast-math. */ |
0 | 2718 bool |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2719 fast_math_flags_set_p (const struct gcc_options *opts) |
0 | 2720 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2721 return (!opts->x_flag_trapping_math |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2722 && opts->x_flag_unsafe_math_optimizations |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2723 && opts->x_flag_finite_math_only |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2724 && !opts->x_flag_signed_zeros |
111 | 2725 && !opts->x_flag_errno_math |
2726 && opts->x_flag_excess_precision_cmdline | |
2727 == EXCESS_PRECISION_FAST); | |
0 | 2728 } |
2729 | |
2730 /* Return true iff flags are set as if -ffast-math but using the flags stored | |
2731 in the struct cl_optimization structure. */ | |
2732 bool | |
2733 fast_math_flags_struct_set_p (struct cl_optimization *opt) | |
2734 { | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2735 return (!opt->x_flag_trapping_math |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2736 && opt->x_flag_unsafe_math_optimizations |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2737 && opt->x_flag_finite_math_only |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2738 && !opt->x_flag_signed_zeros |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2739 && !opt->x_flag_errno_math); |
0 | 2740 } |
2741 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2742 /* Handle a debug output -g switch for options OPTS |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2743 (OPTS_SET->x_write_symbols storing whether a debug type was passed |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2744 explicitly), location LOC. EXTENDED is true or false to support |
0 | 2745 extended output (2 is special and means "-ggdb" was given). */ |
2746 static void | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2747 set_debug_level (enum debug_info_type type, int extended, const char *arg, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2748 struct gcc_options *opts, struct gcc_options *opts_set, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2749 location_t loc) |
0 | 2750 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2751 opts->x_use_gnu_debug_info_extensions = extended; |
0 | 2752 |
2753 if (type == NO_DEBUG) | |
2754 { | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2755 if (opts->x_write_symbols == NO_DEBUG) |
0 | 2756 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2757 opts->x_write_symbols = PREFERRED_DEBUGGING_TYPE; |
0 | 2758 |
2759 if (extended == 2) | |
2760 { | |
111 | 2761 #if defined DWARF2_DEBUGGING_INFO || defined DWARF2_LINENO_DEBUGGING_INFO |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2762 opts->x_write_symbols = DWARF2_DEBUG; |
0 | 2763 #elif defined DBX_DEBUGGING_INFO |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2764 opts->x_write_symbols = DBX_DEBUG; |
0 | 2765 #endif |
2766 } | |
2767 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2768 if (opts->x_write_symbols == NO_DEBUG) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2769 warning_at (loc, 0, "target system does not support debug output"); |
0 | 2770 } |
2771 } | |
2772 else | |
2773 { | |
2774 /* Does it conflict with an already selected type? */ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2775 if (opts_set->x_write_symbols != NO_DEBUG |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2776 && opts->x_write_symbols != NO_DEBUG |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2777 && type != opts->x_write_symbols) |
111 | 2778 error_at (loc, "debug format %qs conflicts with prior selection", |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2779 debug_type_names[type]); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2780 opts->x_write_symbols = type; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2781 opts_set->x_write_symbols = type; |
0 | 2782 } |
2783 | |
111 | 2784 /* A debug flag without a level defaults to level 2. |
2785 If off or at level 1, set it to level 2, but if already | |
2786 at level 3, don't lower it. */ | |
0 | 2787 if (*arg == '\0') |
2788 { | |
111 | 2789 if (opts->x_debug_info_level < DINFO_LEVEL_NORMAL) |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2790 opts->x_debug_info_level = DINFO_LEVEL_NORMAL; |
0 | 2791 } |
2792 else | |
2793 { | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2794 int argval = integral_argument (arg); |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2795 if (argval == -1) |
111 | 2796 error_at (loc, "unrecognized debug output level %qs", arg); |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2797 else if (argval > 3) |
111 | 2798 error_at (loc, "debug output level %qs is too high", arg); |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2799 else |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2800 opts->x_debug_info_level = (enum debug_info_levels) argval; |
0 | 2801 } |
2802 } | |
2803 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2804 /* Arrange to dump core on error for diagnostic context DC. (The |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2805 regular error message is still printed first, except in the case of |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2806 abort ().) */ |
0 | 2807 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2808 static void |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2809 setup_core_dumping (diagnostic_context *dc) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2810 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2811 #ifdef SIGABRT |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2812 signal (SIGABRT, SIG_DFL); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2813 #endif |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2814 #if defined(HAVE_SETRLIMIT) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2815 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2816 struct rlimit rlim; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2817 if (getrlimit (RLIMIT_CORE, &rlim) != 0) |
111 | 2818 fatal_error (input_location, "getting core file size maximum limit: %m"); |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2819 rlim.rlim_cur = rlim.rlim_max; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2820 if (setrlimit (RLIMIT_CORE, &rlim) != 0) |
111 | 2821 fatal_error (input_location, |
2822 "setting core file size limit to maximum: %m"); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2823 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2824 #endif |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2825 diagnostic_abort_on_error (dc); |
0 | 2826 } |
2827 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2828 /* Parse a -d<ARG> command line switch for OPTS, location LOC, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2829 diagnostic context DC. */ |
0 | 2830 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2831 static void |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2832 decode_d_option (const char *arg, struct gcc_options *opts, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2833 location_t loc, diagnostic_context *dc) |
0 | 2834 { |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2835 int c; |
0 | 2836 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2837 while (*arg) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2838 switch (c = *arg++) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2839 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2840 case 'A': |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2841 opts->x_flag_debug_asm = 1; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2842 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2843 case 'p': |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2844 opts->x_flag_print_asm_name = 1; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2845 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2846 case 'P': |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2847 opts->x_flag_dump_rtl_in_asm = 1; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2848 opts->x_flag_print_asm_name = 1; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2849 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2850 case 'x': |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2851 opts->x_rtl_dump_and_exit = 1; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2852 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2853 case 'D': /* These are handled by the preprocessor. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2854 case 'I': |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2855 case 'M': |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2856 case 'N': |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2857 case 'U': |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2858 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2859 case 'H': |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2860 setup_core_dumping (dc); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2861 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2862 case 'a': |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2863 opts->x_flag_dump_all_passed = true; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2864 break; |
0 | 2865 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2866 default: |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2867 warning_at (loc, 0, "unrecognized gcc debugging option: %c", c); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2868 break; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2869 } |
0 | 2870 } |
2871 | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2872 /* Enable (or disable if VALUE is 0) a warning option ARG (language |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2873 mask LANG_MASK, option handlers HANDLERS) as an error for option |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2874 structures OPTS and OPTS_SET, diagnostic context DC (possibly |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2875 NULL), location LOC. This is used by -Werror=. */ |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
47
diff
changeset
|
2876 |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2877 static void |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2878 enable_warning_as_error (const char *arg, int value, unsigned int lang_mask, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2879 const struct cl_option_handlers *handlers, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2880 struct gcc_options *opts, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2881 struct gcc_options *opts_set, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2882 location_t loc, diagnostic_context *dc) |
0 | 2883 { |
2884 char *new_option; | |
2885 int option_index; | |
2886 | |
2887 new_option = XNEWVEC (char, strlen (arg) + 2); | |
2888 new_option[0] = 'W'; | |
2889 strcpy (new_option + 1, arg); | |
2890 option_index = find_opt (new_option, lang_mask); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2891 if (option_index == OPT_SPECIAL_unknown) |
111 | 2892 error_at (loc, "-Werror=%s: no option -%s", arg, new_option); |
2893 else if (!(cl_options[option_index].flags & CL_WARNING)) | |
2894 error_at (loc, "-Werror=%s: -%s is not an option that controls warnings", | |
2895 arg, new_option); | |
0 | 2896 else |
2897 { | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
2898 const diagnostic_t kind = value ? DK_ERROR : DK_WARNING; |
111 | 2899 const char *arg = NULL; |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
55
diff
changeset
|
2900 |
111 | 2901 if (cl_options[option_index].flags & CL_JOINED) |
2902 arg = new_option + cl_options[option_index].opt_len; | |
2903 control_warning_option (option_index, (int) kind, arg, value, | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2904 loc, lang_mask, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2905 handlers, opts, opts_set, dc); |
0 | 2906 } |
2907 free (new_option); | |
2908 } | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2909 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2910 /* Return malloced memory for the name of the option OPTION_INDEX |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2911 which enabled a diagnostic (context CONTEXT), originally of type |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2912 ORIG_DIAG_KIND but possibly converted to DIAG_KIND by options such |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2913 as -Werror. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2914 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2915 char * |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2916 option_name (diagnostic_context *context, int option_index, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2917 diagnostic_t orig_diag_kind, diagnostic_t diag_kind) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2918 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2919 if (option_index) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2920 { |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2921 /* A warning classified as an error. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2922 if ((orig_diag_kind == DK_WARNING || orig_diag_kind == DK_PEDWARN) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2923 && diag_kind == DK_ERROR) |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2924 return concat (cl_options[OPT_Werror_].opt_text, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2925 /* Skip over "-W". */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2926 cl_options[option_index].opt_text + 2, |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2927 NULL); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2928 /* A warning with option. */ |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2929 else |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2930 return xstrdup (cl_options[option_index].opt_text); |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2931 } |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2932 /* A warning without option classified as an error. */ |
111 | 2933 else if ((orig_diag_kind == DK_WARNING || orig_diag_kind == DK_PEDWARN |
2934 || diag_kind == DK_WARNING) | |
2935 && context->warning_as_error_requested) | |
2936 return xstrdup (cl_options[OPT_Werror].opt_text); | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2937 else |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2938 return NULL; |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2939 } |