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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 /* Command line option handling.
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2 Copyright (C) 2002-2018 Free Software Foundation, Inc.
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 Contributed by Neil Booth.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 This file is part of GCC.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 GCC is free software; you can redistribute it and/or modify it under
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 the terms of the GNU General Public License as published by the Free
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 Software Foundation; either version 3, or (at your option) any later
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 version.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 for more details.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 along with GCC; see the file COPYING3. If not see
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 <http://www.gnu.org/licenses/>. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 #include "config.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 #include "system.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 #include "intl.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 #include "coretypes.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 #include "opts.h"
111
kono
parents: 67
diff changeset
26 #include "tm.h"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 #include "flags.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 #include "params.h"
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
31 #include "insn-attr-common.h"
kono
parents: 67
diff changeset
32 #include "common/common-target.h"
kono
parents: 67
diff changeset
33 #include "spellcheck.h"
kono
parents: 67
diff changeset
34
kono
parents: 67
diff changeset
35 static void set_Wstrict_aliasing (struct gcc_options *opts, int onoff);
kono
parents: 67
diff changeset
36
kono
parents: 67
diff changeset
37 /* Indexed by enum debug_info_type. */
kono
parents: 67
diff changeset
38 const char *const debug_type_names[] =
kono
parents: 67
diff changeset
39 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
40 "none", "stabs", "dwarf-2", "xcoff", "vms"
111
kono
parents: 67
diff changeset
41 };
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 /* Parse the -femit-struct-debug-detailed option value
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 and set the flag variables. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 #define MATCH( prefix, string ) \
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 ((strncmp (prefix, string, sizeof prefix - 1) == 0) \
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 ? ((string += sizeof prefix - 1), 1) : 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 enum debug_struct_file files = DINFO_STRUCT_FILE_ANY;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 /* Default is to apply to as much as possible. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 enum debug_info_usage usage = DINFO_USAGE_NUM_ENUMS;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 int ord = 1, gen = 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 /* What usage? */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 if (MATCH (dfn_lbl, spec))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 usage = DINFO_USAGE_DFN;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 else if (MATCH (dir_lbl, spec))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 usage = DINFO_USAGE_DIR_USE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 else if (MATCH (ind_lbl, spec))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 usage = DINFO_USAGE_IND_USE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 /* Generics or not? */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 if (MATCH (ord_lbl, spec))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 gen = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 else if (MATCH (gen_lbl, spec))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 ord = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 /* What allowable environment? */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 if (MATCH (none_lbl, spec))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 files = DINFO_STRUCT_FILE_NONE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 else if (MATCH (any_lbl, spec))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 files = DINFO_STRUCT_FILE_ANY;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 else if (MATCH (sys_lbl, spec))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 files = DINFO_STRUCT_FILE_SYS;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 else if (MATCH (base_lbl, spec))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 files = DINFO_STRUCT_FILE_BASE;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 /* Effect the specification. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 if (usage == DINFO_USAGE_NUM_ENUMS)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 if (ord)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 if (gen)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
117
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 /* No more -femit-struct-debug-detailed specifications.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 Do final checks. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
157
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 /* Find the base name of a path, stripping off both directories and
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 base_of_path (const char *path, const char **base_out)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 const char *base = path;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 const char *dot = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 const char *p = path;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 char c = *p;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 while (c)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 {
111
kono
parents: 67
diff changeset
169 if (IS_DIR_SEPARATOR (c))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 base = p + 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 dot = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 else if (c == '.')
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 dot = p;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 c = *++p;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 if (!dot)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 dot = p;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 *base_out = base;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 return dot - base;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
183
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 /* What to print when a switch has no documentation. */
111
kono
parents: 67
diff changeset
185 static const char undocumented_msg[] = N_("This option lacks documentation.");
kono
parents: 67
diff changeset
186 static const char use_diagnosed_msg[] = N_("Uses of this option are diagnosed.");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
187
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 typedef char *char_p; /* For DEF_VEC_P. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
220 diagnostic_context *dc, void (*) (void))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
224 return targetm_common.handle_option (opts, opts_set, decoded, loc);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
226
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 /* Add comma-separated strings to a char_p vector. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
228
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 char *tmp;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 char *r;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 char *w;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 char *token_start;
111
kono
parents: 67
diff changeset
236 vec<char_p> *v = (vec<char_p> *) *pvec;
kono
parents: 67
diff changeset
237
kono
parents: 67
diff changeset
238 vec_check_alloc (v, 1);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
239
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 /* We never free this string. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
241 tmp = xstrdup (arg);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
242
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 r = tmp;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 w = tmp;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 token_start = tmp;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
246
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 while (*r != '\0')
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 if (*r == ',')
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 *w++ = '\0';
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 ++r;
111
kono
parents: 67
diff changeset
253 v->safe_push (token_start);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 token_start = w;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 if (*r == '\\' && r[1] == ',')
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
258 *w++ = ',';
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 r += 2;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
262 *w++ = *r++;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
263 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 if (*token_start != '\0')
111
kono
parents: 67
diff changeset
265 v->safe_push (token_start);
kono
parents: 67
diff changeset
266
kono
parents: 67
diff changeset
267 *pvec = v;
kono
parents: 67
diff changeset
268 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
269
111
kono
parents: 67
diff changeset
270 /* Initialize opts_obstack. */
kono
parents: 67
diff changeset
271
kono
parents: 67
diff changeset
272 void
kono
parents: 67
diff changeset
273 init_opts_obstack (void)
kono
parents: 67
diff changeset
274 {
kono
parents: 67
diff changeset
275 gcc_obstack_init (&opts_obstack);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
276 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
279
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
284
111
kono
parents: 67
diff changeset
285 /* Ensure that opts_obstack has already been initialized by the time
kono
parents: 67
diff changeset
286 that we initialize any gcc_options instances (PR jit/68446). */
kono
parents: 67
diff changeset
287 gcc_assert (opts_obstack.chunk_size > 0);
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
290
kono
parents: 67
diff changeset
291 if (opts_set)
kono
parents: 67
diff changeset
292 memset (opts_set, 0, sizeof (*opts_set));
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
296 if (opts_set)
kono
parents: 67
diff changeset
297 opts_set->x_param_values = XCNEWVEC (int, num_params);
kono
parents: 67
diff changeset
298
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
315 targetm_common.option_init_struct (opts);
kono
parents: 67
diff changeset
316 }
kono
parents: 67
diff changeset
317
kono
parents: 67
diff changeset
318 /* Release any allocations owned by OPTS. */
kono
parents: 67
diff changeset
319
kono
parents: 67
diff changeset
320 void
kono
parents: 67
diff changeset
321 finalize_options_struct (struct gcc_options *opts)
kono
parents: 67
diff changeset
322 {
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
327 -Ofast if FAST is set, -Og if DEBUG is set), apply the option DEFAULT_OPT
kono
parents: 67
diff changeset
328 to OPTS and OPTS_SET, diagnostic context DC, location LOC, with language
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
348 if (debug)
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
366 enabled = (level >= 1 && !size && !debug);
kono
parents: 67
diff changeset
367 break;
kono
parents: 67
diff changeset
368
kono
parents: 67
diff changeset
369 case OPT_LEVELS_1_PLUS_NOT_DEBUG:
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
434 level, size, fast, debug,
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
450 { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fif_conversion, NULL, 1 },
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
456 { OPT_LEVELS_1_PLUS, OPT_freorder_blocks, NULL, 1 },
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
460 { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_ftree_bit_ccp, NULL, 1 },
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
473 { OPT_LEVELS_1_PLUS, OPT_ftree_slsr, NULL, 1 },
kono
parents: 67
diff changeset
474 { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fbranch_count_reg, NULL, 1 },
kono
parents: 67
diff changeset
475 { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fmove_loop_invariants, NULL, 1 },
kono
parents: 67
diff changeset
476 { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_ftree_pta, NULL, 1 },
kono
parents: 67
diff changeset
477 { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fssa_phiopt, NULL, 1 },
kono
parents: 67
diff changeset
478 { OPT_LEVELS_1_PLUS, OPT_ftree_builtin_call_dce, NULL, 1 },
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
479 { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 },
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
500 { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_freorder_blocks_algorithm_, NULL,
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
508 { OPT_LEVELS_2_PLUS, OPT_fipa_bit_cp, NULL, 1 },
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
513 { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_falign_loops, NULL, 1 },
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
514 { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_falign_jumps, NULL, 1 },
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
515 { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_falign_labels, NULL, 1 },
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
516 { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_falign_functions, NULL, 1 },
111
kono
parents: 67
diff changeset
517 { OPT_LEVELS_2_PLUS, OPT_ftree_tail_merge, NULL, 1 },
kono
parents: 67
diff changeset
518 { OPT_LEVELS_2_PLUS, OPT_fvect_cost_model_, NULL, VECT_COST_MODEL_CHEAP },
kono
parents: 67
diff changeset
519 { OPT_LEVELS_2_PLUS_SPEED_ONLY, OPT_foptimize_strlen, NULL, 1 },
kono
parents: 67
diff changeset
520 { OPT_LEVELS_2_PLUS, OPT_fhoist_adjacent_loads, NULL, 1 },
kono
parents: 67
diff changeset
521 { OPT_LEVELS_2_PLUS, OPT_fipa_icf, NULL, 1 },
kono
parents: 67
diff changeset
522 { OPT_LEVELS_2_PLUS, OPT_fisolate_erroneous_paths_dereference, NULL, 1 },
kono
parents: 67
diff changeset
523 { OPT_LEVELS_2_PLUS, OPT_fipa_ra, NULL, 1 },
kono
parents: 67
diff changeset
524 { OPT_LEVELS_2_PLUS, OPT_flra_remat, NULL, 1 },
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
529 { OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribution, NULL, 1 },
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
536 { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_finline_functions_called_once, NULL, 1 },
kono
parents: 67
diff changeset
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
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
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
kono
parents: 67
diff changeset
541 { OPT_LEVELS_3_PLUS, OPT_ftree_loop_vectorize, NULL, 1 },
kono
parents: 67
diff changeset
542 { OPT_LEVELS_3_PLUS, OPT_ftree_slp_vectorize, NULL, 1 },
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
545 { OPT_LEVELS_3_PLUS, OPT_ftree_partial_pre, NULL, 1 },
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
589 error_at (loc, "argument to %<-O%> should be a non-negative "
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
617 opts->x_optimize_debug = 0;
kono
parents: 67
diff changeset
618 break;
kono
parents: 67
diff changeset
619
kono
parents: 67
diff changeset
620 case OPT_Og:
kono
parents: 67
diff changeset
621 /* -Og selects optimization level 1. */
kono
parents: 67
diff changeset
622 opts->x_optimize_size = 0;
kono
parents: 67
diff changeset
623 opts->x_optimize = 1;
kono
parents: 67
diff changeset
624 opts->x_optimize_fast = 0;
kono
parents: 67
diff changeset
625 opts->x_optimize_debug = 1;
kono
parents: 67
diff changeset
626 break;
kono
parents: 67
diff changeset
627
kono
parents: 67
diff changeset
628 case OPT_fopenacc:
kono
parents: 67
diff changeset
629 if (opt->value)
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
641 opts->x_optimize_fast, opts->x_optimize_debug,
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
646
111
kono
parents: 67
diff changeset
647 if (openacc_mode
kono
parents: 67
diff changeset
648 && !opts_set->x_flag_ipa_pta)
kono
parents: 67
diff changeset
649 opts->x_flag_ipa_pta = true;
kono
parents: 67
diff changeset
650
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
656
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
662
111
kono
parents: 67
diff changeset
663 /* At -Ofast, allow store motion to introduce potential race conditions. */
kono
parents: 67
diff changeset
664 maybe_set_param_value
kono
parents: 67
diff changeset
665 (PARAM_ALLOW_STORE_DATA_RACES,
kono
parents: 67
diff changeset
666 opts->x_optimize_fast ? 1
kono
parents: 67
diff changeset
667 : default_param_value (PARAM_ALLOW_STORE_DATA_RACES),
kono
parents: 67
diff changeset
668 opts->x_param_values, opts_set->x_param_values);
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
678
111
kono
parents: 67
diff changeset
679 /* Restrict the amount of work combine does at -Og while retaining
kono
parents: 67
diff changeset
680 most of its useful transforms. */
kono
parents: 67
diff changeset
681 if (opts->x_optimize_debug)
kono
parents: 67
diff changeset
682 maybe_set_param_value (PARAM_MAX_COMBINE_INSNS, 2,
kono
parents: 67
diff changeset
683 opts->x_param_values, opts_set->x_param_values);
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
689 opts->x_optimize_fast, opts->x_optimize_debug,
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
701
111
kono
parents: 67
diff changeset
702 if (opts->x_dump_base_name
kono
parents: 67
diff changeset
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
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
705 const char *sep = opts->x_dump_base_name;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
706
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
707 for (; *sep; sep++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
708 if (IS_DIR_SEPARATOR (*sep))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
709 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
710
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
711 if (*sep)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
712 /* If dump_base_path contains subdirectories, don't prepend
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
713 anything. */;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
714 else if (opts->x_dump_dir_name)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
715 /* We have a DUMP_DIR_NAME, prepend that. */
111
kono
parents: 67
diff changeset
716 opts->x_dump_base_name = opts_concat (opts->x_dump_dir_name,
kono
parents: 67
diff changeset
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
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
720 /* AUX_BASE_NAME is set and is not the bit bucket. If it
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
721 contains a directory component, prepend those directories.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
722 Typically this places things in the same directory as the
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
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
kono
parents: 67
diff changeset
731 char *new_dump_base_name
kono
parents: 67
diff changeset
732 = XOBNEWVEC (&opts_obstack, char,
kono
parents: 67
diff changeset
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
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
742
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
743 /* It is definitely prefixed now. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
747 /* Handle related options for unit-at-a-time, toplevel-reorder, and
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
761 /* -fself-test depends on the state of the compiler prior to
kono
parents: 67
diff changeset
762 compiling anything. Ideally it should be run on an empty source
kono
parents: 67
diff changeset
763 file. However, in case we get run with actual source, assume
kono
parents: 67
diff changeset
764 -fsyntax-only which will inhibit any compiler initialization
kono
parents: 67
diff changeset
765 which may confuse the self tests. */
kono
parents: 67
diff changeset
766 if (opts->x_flag_self_test)
kono
parents: 67
diff changeset
767 opts->x_flag_syntax_only = 1;
kono
parents: 67
diff changeset
768
kono
parents: 67
diff changeset
769 if (opts->x_flag_tm && opts->x_flag_non_call_exceptions)
kono
parents: 67
diff changeset
770 sorry ("transactional memory is not supported with non-call exceptions");
kono
parents: 67
diff changeset
771
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
772 /* Unless the user has asked for section anchors, we disable toplevel
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
773 reordering at -O0 to disable transformations that might be surprising
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
788 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
791 {
111
kono
parents: 67
diff changeset
792 /* We initialize opts->x_flag_pie to -1 so that targets can set a
kono
parents: 67
diff changeset
793 default value. */
kono
parents: 67
diff changeset
794 if (opts->x_flag_pie == -1)
kono
parents: 67
diff changeset
795 {
kono
parents: 67
diff changeset
796 /* We initialize opts->x_flag_pic to -1 so that we can tell if
kono
parents: 67
diff changeset
797 -fpic, -fPIC, -fno-pic or -fno-PIC is used. */
kono
parents: 67
diff changeset
798 if (opts->x_flag_pic == -1)
kono
parents: 67
diff changeset
799 opts->x_flag_pie = DEFAULT_FLAG_PIE;
kono
parents: 67
diff changeset
800 else
kono
parents: 67
diff changeset
801 opts->x_flag_pie = 0;
kono
parents: 67
diff changeset
802 }
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
806 else if (opts->x_flag_pic == -1)
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
811 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
812
111
kono
parents: 67
diff changeset
813 /* We initialize opts->x_flag_stack_protect to -1 so that targets
kono
parents: 67
diff changeset
814 can set a default value. */
kono
parents: 67
diff changeset
815 if (opts->x_flag_stack_protect == -1)
kono
parents: 67
diff changeset
816 opts->x_flag_stack_protect = DEFAULT_FLAG_SSP;
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
819 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
820 /* Inlining does not work if not optimizing,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
824 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
825
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
826 /* The optimization to partition hot and cold basic blocks into separate
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
827 sections of the .o and executable files does not work (currently)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
832 ui_except = targetm_common.except_unwind_info (opts);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
836 && (ui_except == UI_SJLJ || ui_except >= UI_TARGET))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
837 {
111
kono
parents: 67
diff changeset
838 if (opts_set->x_flag_reorder_blocks_and_partition)
kono
parents: 67
diff changeset
839 inform (loc,
kono
parents: 67
diff changeset
840 "%<-freorder-blocks-and-partition%> does not work "
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
844 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
845
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
846 /* If user requested unwind info, then turn off the partitioning
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
847 optimization. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
852 && (ui_except == UI_SJLJ || ui_except >= UI_TARGET))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
853 {
111
kono
parents: 67
diff changeset
854 if (opts_set->x_flag_reorder_blocks_and_partition)
kono
parents: 67
diff changeset
855 inform (loc,
kono
parents: 67
diff changeset
856 "%<-freorder-blocks-and-partition%> does not support "
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
860 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
861
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
862 /* If the target requested unwind info, then turn off the partitioning
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
863 optimization with a different message. Likewise, if the target does not
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
864 support named sections. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
869 && targetm_common.unwind_tables_default
kono
parents: 67
diff changeset
870 && (ui_except == UI_SJLJ || ui_except >= UI_TARGET))))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
871 {
111
kono
parents: 67
diff changeset
872 if (opts_set->x_flag_reorder_blocks_and_partition)
kono
parents: 67
diff changeset
873 inform (loc,
kono
parents: 67
diff changeset
874 "%<-freorder-blocks-and-partition%> does not work "
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
878 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
881 /* Pipelining of outer loops is only possible when general pipelining
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
892 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
906 if (!opts->x_flag_fat_lto_objects
kono
parents: 67
diff changeset
907 && (!HAVE_LTO_PLUGIN
kono
parents: 67
diff changeset
908 || (opts_set->x_flag_use_linker_plugin
kono
parents: 67
diff changeset
909 && !opts->x_flag_use_linker_plugin)))
kono
parents: 67
diff changeset
910 {
kono
parents: 67
diff changeset
911 if (opts_set->x_flag_fat_lto_objects)
kono
parents: 67
diff changeset
912 error_at (loc, "%<-fno-fat-lto-objects%> are supported only with "
kono
parents: 67
diff changeset
913 "linker plugin");
kono
parents: 67
diff changeset
914 opts->x_flag_fat_lto_objects = 1;
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
931
kono
parents: 67
diff changeset
932 /* If stack splitting is turned on, and the user did not explicitly
kono
parents: 67
diff changeset
933 request function partitioning, turn off partitioning, as it
kono
parents: 67
diff changeset
934 confuses the linker when trying to handle partitioned split-stack
kono
parents: 67
diff changeset
935 code that calls a non-split-stack functions. But if partitioning
kono
parents: 67
diff changeset
936 was turned on explicitly just hope for the best. */
kono
parents: 67
diff changeset
937 if (opts->x_flag_split_stack
kono
parents: 67
diff changeset
938 && opts->x_flag_reorder_blocks_and_partition
kono
parents: 67
diff changeset
939 && !opts_set->x_flag_reorder_blocks_and_partition)
kono
parents: 67
diff changeset
940 opts->x_flag_reorder_blocks_and_partition = 0;
kono
parents: 67
diff changeset
941
kono
parents: 67
diff changeset
942 if (opts->x_flag_reorder_blocks_and_partition
kono
parents: 67
diff changeset
943 && !opts_set->x_flag_reorder_functions)
kono
parents: 67
diff changeset
944 opts->x_flag_reorder_functions = 1;
kono
parents: 67
diff changeset
945
kono
parents: 67
diff changeset
946 /* Tune vectorization related parametees according to cost model. */
kono
parents: 67
diff changeset
947 if (opts->x_flag_vect_cost_model == VECT_COST_MODEL_CHEAP)
kono
parents: 67
diff changeset
948 {
kono
parents: 67
diff changeset
949 maybe_set_param_value (PARAM_VECT_MAX_VERSION_FOR_ALIAS_CHECKS,
kono
parents: 67
diff changeset
950 6, opts->x_param_values, opts_set->x_param_values);
kono
parents: 67
diff changeset
951 maybe_set_param_value (PARAM_VECT_MAX_VERSION_FOR_ALIGNMENT_CHECKS,
kono
parents: 67
diff changeset
952 0, opts->x_param_values, opts_set->x_param_values);
kono
parents: 67
diff changeset
953 maybe_set_param_value (PARAM_VECT_MAX_PEELING_FOR_ALIGNMENT,
kono
parents: 67
diff changeset
954 0, opts->x_param_values, opts_set->x_param_values);
kono
parents: 67
diff changeset
955 }
kono
parents: 67
diff changeset
956
kono
parents: 67
diff changeset
957 /* Set PARAM_MAX_STORES_TO_SINK to 0 if either vectorization or if-conversion
kono
parents: 67
diff changeset
958 is disabled. */
kono
parents: 67
diff changeset
959 if ((!opts->x_flag_tree_loop_vectorize && !opts->x_flag_tree_slp_vectorize)
kono
parents: 67
diff changeset
960 || !opts->x_flag_tree_loop_if_convert)
kono
parents: 67
diff changeset
961 maybe_set_param_value (PARAM_MAX_STORES_TO_SINK, 0,
kono
parents: 67
diff changeset
962 opts->x_param_values, opts_set->x_param_values);
kono
parents: 67
diff changeset
963
kono
parents: 67
diff changeset
964 /* The -gsplit-dwarf option requires -ggnu-pubnames. */
kono
parents: 67
diff changeset
965 if (opts->x_dwarf_split_debug_info)
kono
parents: 67
diff changeset
966 opts->x_debug_generate_pub_sections = 2;
kono
parents: 67
diff changeset
967
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
968 if ((opts->x_flag_sanitize
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
969 & (SANITIZE_USER_ADDRESS | SANITIZE_KERNEL_ADDRESS)) == 0)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
970 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
971 if (opts->x_flag_sanitize & SANITIZE_POINTER_COMPARE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
972 error_at (loc,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
973 "%<-fsanitize=pointer-compare%> must be combined with "
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
974 "%<-fsanitize=address%> or %<-fsanitize=kernel-address%>");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
975 if (opts->x_flag_sanitize & SANITIZE_POINTER_SUBTRACT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
976 error_at (loc,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
977 "%<-fsanitize=pointer-subtract%> must be combined with "
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
978 "%<-fsanitize=address%> or %<-fsanitize=kernel-address%>");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
979 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
980
111
kono
parents: 67
diff changeset
981 /* Userspace and kernel ASan conflict with each other. */
kono
parents: 67
diff changeset
982 if ((opts->x_flag_sanitize & SANITIZE_USER_ADDRESS)
kono
parents: 67
diff changeset
983 && (opts->x_flag_sanitize & SANITIZE_KERNEL_ADDRESS))
kono
parents: 67
diff changeset
984 error_at (loc,
kono
parents: 67
diff changeset
985 "%<-fsanitize=address%> is incompatible with "
kono
parents: 67
diff changeset
986 "%<-fsanitize=kernel-address%>");
kono
parents: 67
diff changeset
987
kono
parents: 67
diff changeset
988 /* And with TSan. */
kono
parents: 67
diff changeset
989 if ((opts->x_flag_sanitize & SANITIZE_ADDRESS)
kono
parents: 67
diff changeset
990 && (opts->x_flag_sanitize & SANITIZE_THREAD))
kono
parents: 67
diff changeset
991 error_at (loc,
kono
parents: 67
diff changeset
992 "%<-fsanitize=address%> and %<-fsanitize=kernel-address%> "
kono
parents: 67
diff changeset
993 "are incompatible with %<-fsanitize=thread%>");
kono
parents: 67
diff changeset
994
kono
parents: 67
diff changeset
995 if ((opts->x_flag_sanitize & SANITIZE_LEAK)
kono
parents: 67
diff changeset
996 && (opts->x_flag_sanitize & SANITIZE_THREAD))
kono
parents: 67
diff changeset
997 error_at (loc,
kono
parents: 67
diff changeset
998 "%<-fsanitize=leak%> is incompatible with %<-fsanitize=thread%>");
kono
parents: 67
diff changeset
999
kono
parents: 67
diff changeset
1000 /* Check error recovery for -fsanitize-recover option. */
kono
parents: 67
diff changeset
1001 for (int i = 0; sanitizer_opts[i].name != NULL; ++i)
kono
parents: 67
diff changeset
1002 if ((opts->x_flag_sanitize_recover & sanitizer_opts[i].flag)
kono
parents: 67
diff changeset
1003 && !sanitizer_opts[i].can_recover)
kono
parents: 67
diff changeset
1004 error_at (loc, "%<-fsanitize-recover=%s%> is not supported",
kono
parents: 67
diff changeset
1005 sanitizer_opts[i].name);
kono
parents: 67
diff changeset
1006
kono
parents: 67
diff changeset
1007 /* When instrumenting the pointers, we don't want to remove
kono
parents: 67
diff changeset
1008 the null pointer checks. */
kono
parents: 67
diff changeset
1009 if (opts->x_flag_sanitize & (SANITIZE_NULL | SANITIZE_NONNULL_ATTRIBUTE
kono
parents: 67
diff changeset
1010 | SANITIZE_RETURNS_NONNULL_ATTRIBUTE))
kono
parents: 67
diff changeset
1011 opts->x_flag_delete_null_pointer_checks = 0;
kono
parents: 67
diff changeset
1012
kono
parents: 67
diff changeset
1013 /* Aggressive compiler optimizations may cause false negatives. */
kono
parents: 67
diff changeset
1014 if (opts->x_flag_sanitize & ~(SANITIZE_LEAK | SANITIZE_UNREACHABLE))
kono
parents: 67
diff changeset
1015 opts->x_flag_aggressive_loop_optimizations = 0;
kono
parents: 67
diff changeset
1016
kono
parents: 67
diff changeset
1017 /* Enable -fsanitize-address-use-after-scope if address sanitizer is
kono
parents: 67
diff changeset
1018 enabled. */
kono
parents: 67
diff changeset
1019 if ((opts->x_flag_sanitize & SANITIZE_USER_ADDRESS)
kono
parents: 67
diff changeset
1020 && !opts_set->x_flag_sanitize_address_use_after_scope)
kono
parents: 67
diff changeset
1021 opts->x_flag_sanitize_address_use_after_scope = true;
kono
parents: 67
diff changeset
1022
kono
parents: 67
diff changeset
1023 /* Force -fstack-reuse=none in case -fsanitize-address-use-after-scope
kono
parents: 67
diff changeset
1024 is enabled. */
kono
parents: 67
diff changeset
1025 if (opts->x_flag_sanitize_address_use_after_scope)
kono
parents: 67
diff changeset
1026 {
kono
parents: 67
diff changeset
1027 if (opts->x_flag_stack_reuse != SR_NONE
kono
parents: 67
diff changeset
1028 && opts_set->x_flag_stack_reuse != SR_NONE)
kono
parents: 67
diff changeset
1029 error_at (loc,
kono
parents: 67
diff changeset
1030 "%<-fsanitize-address-use-after-scope%> requires "
kono
parents: 67
diff changeset
1031 "%<-fstack-reuse=none%> option");
kono
parents: 67
diff changeset
1032
kono
parents: 67
diff changeset
1033 opts->x_flag_stack_reuse = SR_NONE;
kono
parents: 67
diff changeset
1034 }
kono
parents: 67
diff changeset
1035
kono
parents: 67
diff changeset
1036 if ((opts->x_flag_sanitize & SANITIZE_USER_ADDRESS) && opts->x_flag_tm)
kono
parents: 67
diff changeset
1037 sorry ("transactional memory is not supported with %<-fsanitize=address%>");
kono
parents: 67
diff changeset
1038
kono
parents: 67
diff changeset
1039 if ((opts->x_flag_sanitize & SANITIZE_KERNEL_ADDRESS) && opts->x_flag_tm)
kono
parents: 67
diff changeset
1040 sorry ("transactional memory is not supported with "
kono
parents: 67
diff changeset
1041 "%<-fsanitize=kernel-address%>");
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1042 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1043
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1044 #define LEFT_COLUMN 27
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1045
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1046 /* Output ITEM, of length ITEM_WIDTH, in the left column,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1047 followed by word-wrapped HELP in a second column. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1048 static void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1049 wrap_help (const char *help,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1050 const char *item,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1051 unsigned int item_width,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1052 unsigned int columns)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1053 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1054 unsigned int col_width = LEFT_COLUMN;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1055 unsigned int remaining, room, len;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1056
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1057 remaining = strlen (help);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1058
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1059 do
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1060 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1061 room = columns - 3 - MAX (col_width, item_width);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1062 if (room > columns)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1063 room = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1064 len = remaining;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1065
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1066 if (room < len)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1067 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1068 unsigned int i;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1069
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1070 for (i = 0; help[i]; i++)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1071 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1072 if (i >= room && len != remaining)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1073 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1074 if (help[i] == ' ')
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1075 len = i;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1076 else if ((help[i] == '-' || help[i] == '/')
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1077 && help[i + 1] != ' '
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1078 && i > 0 && ISALPHA (help[i - 1]))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1079 len = i + 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1080 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1081 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1082
111
kono
parents: 67
diff changeset
1083 printf (" %-*.*s %.*s\n", col_width, item_width, item, len, help);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1084 item_width = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1085 while (help[len] == ' ')
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1086 len++;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1087 help += len;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1088 remaining -= len;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1089 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1090 while (remaining);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1091 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1092
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1093 /* Data structure used to print list of valid option values. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1094
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1095 struct option_help_tuple
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1096 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1097 option_help_tuple (int code, vec<const char *> values):
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1098 m_code (code), m_values (values)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1099 {}
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1100
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1101 /* Code of an option. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1102 int m_code;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1103
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1104 /* List of possible values. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1105 vec<const char *> m_values;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1106 };
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1107
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1108 /* Print help for a specific front-end, etc. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1109 static void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1110 print_filtered_help (unsigned int include_flags,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1111 unsigned int exclude_flags,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1116 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1117 unsigned int i;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1118 const char *help;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1119 bool found = false;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1120 bool displayed = false;
111
kono
parents: 67
diff changeset
1121 char new_help[256];
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1122
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1123 if (include_flags == CL_PARAMS)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1124 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1125 for (i = 0; i < LAST_PARAM; i++)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1126 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1127 const char *param = compiler_params[i].option;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1128
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1129 help = compiler_params[i].help;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1130 if (help == NULL || *help == '\0')
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1131 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1132 if (exclude_flags & CL_UNDOCUMENTED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1133 continue;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1134 help = undocumented_msg;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1135 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1136
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1137 /* Get the translation. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1138 help = _(help);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1139
111
kono
parents: 67
diff changeset
1140 if (!opts->x_quiet_flag)
kono
parents: 67
diff changeset
1141 {
kono
parents: 67
diff changeset
1142 snprintf (new_help, sizeof (new_help),
kono
parents: 67
diff changeset
1143 _("default %d minimum %d maximum %d"),
kono
parents: 67
diff changeset
1144 compiler_params[i].default_value,
kono
parents: 67
diff changeset
1145 compiler_params[i].min_value,
kono
parents: 67
diff changeset
1146 compiler_params[i].max_value);
kono
parents: 67
diff changeset
1147 help = new_help;
kono
parents: 67
diff changeset
1148 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1149 wrap_help (help, param, strlen (param), columns);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1150 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1151 putchar ('\n');
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1152 return;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1153 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1160
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1161 auto_vec<option_help_tuple> help_tuples;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1162
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1163 for (i = 0; i < cl_options_count; i++)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1164 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1165 const struct cl_option *option = cl_options + i;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1166 unsigned int len;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1167 const char *opt;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1168 const char *tab;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1169
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1170 if (include_flags == 0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1171 || ((option->flags & include_flags) != include_flags))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1172 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1173 if ((option->flags & any_flags) == 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1174 continue;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1175 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1176
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1177 /* Skip unwanted switches. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1178 if ((option->flags & exclude_flags) != 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1179 continue;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1187 found = true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1190 continue;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1193
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1194 help = option->help;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1195 if (help == NULL)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1196 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1197 if (exclude_flags & CL_UNDOCUMENTED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1198 continue;
111
kono
parents: 67
diff changeset
1199
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1200 help = undocumented_msg;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1201 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1202
111
kono
parents: 67
diff changeset
1203 if (option->alias_target < N_OPTS
kono
parents: 67
diff changeset
1204 && cl_options [option->alias_target].help)
kono
parents: 67
diff changeset
1205 {
kono
parents: 67
diff changeset
1206 if (help == undocumented_msg)
kono
parents: 67
diff changeset
1207 {
kono
parents: 67
diff changeset
1208 /* For undocumented options that are aliases for other options
kono
parents: 67
diff changeset
1209 that are documented, point the reader to the other option in
kono
parents: 67
diff changeset
1210 preference of the former. */
kono
parents: 67
diff changeset
1211 snprintf (new_help, sizeof new_help,
kono
parents: 67
diff changeset
1212 _("Same as %s. Use the latter option instead."),
kono
parents: 67
diff changeset
1213 cl_options [option->alias_target].opt_text);
kono
parents: 67
diff changeset
1214 }
kono
parents: 67
diff changeset
1215 else
kono
parents: 67
diff changeset
1216 {
kono
parents: 67
diff changeset
1217 /* For documented options with aliases, mention the aliased
kono
parents: 67
diff changeset
1218 option's name for reference. */
kono
parents: 67
diff changeset
1219 snprintf (new_help, sizeof new_help,
kono
parents: 67
diff changeset
1220 _("%s Same as %s."),
kono
parents: 67
diff changeset
1221 help, cl_options [option->alias_target].opt_text);
kono
parents: 67
diff changeset
1222 }
kono
parents: 67
diff changeset
1223
kono
parents: 67
diff changeset
1224 help = new_help;
kono
parents: 67
diff changeset
1225 }
kono
parents: 67
diff changeset
1226
kono
parents: 67
diff changeset
1227 if (option->warn_message)
kono
parents: 67
diff changeset
1228 {
kono
parents: 67
diff changeset
1229 /* Mention that the use of the option will trigger a warning. */
kono
parents: 67
diff changeset
1230 if (help == new_help)
kono
parents: 67
diff changeset
1231 snprintf (new_help + strlen (new_help),
kono
parents: 67
diff changeset
1232 sizeof new_help - strlen (new_help),
kono
parents: 67
diff changeset
1233 " %s", _(use_diagnosed_msg));
kono
parents: 67
diff changeset
1234 else
kono
parents: 67
diff changeset
1235 snprintf (new_help, sizeof new_help,
kono
parents: 67
diff changeset
1236 "%s %s", help, _(use_diagnosed_msg));
kono
parents: 67
diff changeset
1237
kono
parents: 67
diff changeset
1238 help = new_help;
kono
parents: 67
diff changeset
1239 }
kono
parents: 67
diff changeset
1240
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1241 /* Get the translation. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1242 help = _(help);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1243
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1244 /* Find the gap between the name of the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1245 option and its descriptive text. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1246 tab = strchr (help, '\t');
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1247 if (tab)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1248 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1249 len = tab - help;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1250 opt = help;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1251 help = tab + 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1252 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1253 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1254 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1255 opt = option->opt_text;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1256 len = strlen (opt);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1257 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1258
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1259 /* With the -Q option enabled we change the descriptive text associated
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1260 with an option to be an indication of its current setting. */
111
kono
parents: 67
diff changeset
1261 if (!opts->x_quiet_flag)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1265 if (len < (LEFT_COLUMN + 2))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1266 strcpy (new_help, "\t\t");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1267 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1268 strcpy (new_help, "\t");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1272 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1273 if (option->flags & CL_JOINED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1274 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1275 if (option->var_type == CLVC_STRING)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1278 snprintf (new_help + strlen (new_help),
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1279 sizeof (new_help) - strlen (new_help),
111
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
1294 "%s", arg);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1295 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1296 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1297 sprintf (new_help + strlen (new_help),
111
kono
parents: 67
diff changeset
1298 "%d", * (int *) flag_var);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1299 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1302 ? _("[enabled]") : _("[disabled]"));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1303 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1304
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1305 help = new_help;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1306 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1307
111
kono
parents: 67
diff changeset
1308 if (option->range_max != -1)
kono
parents: 67
diff changeset
1309 {
kono
parents: 67
diff changeset
1310 char b[128];
kono
parents: 67
diff changeset
1311 snprintf (b, sizeof (b), "<%d,%d>", option->range_min,
kono
parents: 67
diff changeset
1312 option->range_max);
kono
parents: 67
diff changeset
1313 opt = concat (opt, b, NULL);
kono
parents: 67
diff changeset
1314 len += strlen (b);
kono
parents: 67
diff changeset
1315 }
kono
parents: 67
diff changeset
1316
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1317 wrap_help (help, opt, len, columns);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1323 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1324 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1325 vec<const char *> option_values
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1326 = targetm_common.get_valid_option_values (i, NULL);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1327 if (!option_values.is_empty ())
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1328 help_tuples.safe_push (option_help_tuple (i, option_values));
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1329 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1330 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1331
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1332 if (! found)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1333 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1334 unsigned int langs = include_flags & CL_LANG_ALL;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1335
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1336 if (langs == 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1337 printf (_(" No options with the desired characteristics were found\n"));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1338 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1339 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1340 unsigned int i;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1341
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1342 /* PR 31349: Tell the user how to see all of the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1343 options supported by a specific front end. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1344 for (i = 0; (1U << i) < CL_LANG_ALL; i ++)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1345 if ((1U << i) & langs)
111
kono
parents: 67
diff changeset
1346 printf (_(" None found. Use --help=%s to show *all* the options supported by the %s front-end.\n"),
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1347 lang_names[i], lang_names[i]);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1350 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1351 else if (! displayed)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1352 printf (_(" All options with the desired characteristics have already been displayed\n"));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1353
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1393
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1394 for (unsigned i = 0; i < help_tuples.length (); i++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1395 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1396 const struct cl_option *option = cl_options + help_tuples[i].m_code;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1397 printf (" Known valid arguments for %s option:\n ", option->opt_text);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1398 for (unsigned j = 0; j < help_tuples[i].m_values.length (); j++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1399 printf (" %s", help_tuples[i].m_values[j]);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1400 printf ("\n\n");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1401 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1402 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1403
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1404 /* Display help for a specified type of option.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1405 The options must have ALL of the INCLUDE_FLAGS set
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1409 static void
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1410 print_specific_help (unsigned int include_flags,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1415 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1416 unsigned int all_langs_mask = (1U << cl_lang_count) - 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1417 const char * description = NULL;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1418 const char * descrip_extra = "";
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1419 size_t i;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1420 unsigned int flag;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1421
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1422 /* Sanity check: Make sure that we do not have more
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1423 languages than we have bits available to enumerate them. */
111
kono
parents: 67
diff changeset
1424 gcc_assert ((1U << cl_lang_count) <= CL_MIN_OPTION_CLASS);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1425
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1426 /* If we have not done so already, obtain
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1429 {
111
kono
parents: 67
diff changeset
1430 opts->x_help_columns = get_terminal_width ();
kono
parents: 67
diff changeset
1431 if (opts->x_help_columns == INT_MAX)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1434 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1435
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1436 /* Decide upon the title for the options that we are going to display. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1437 for (i = 0, flag = 1; flag <= CL_MAX_OPTION_CLASS; flag <<= 1, i ++)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1438 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1439 switch (flag & include_flags)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1440 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1443 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1444
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1445 case CL_TARGET:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1446 description = _("The following options are target specific");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1447 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1448 case CL_WARNING:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1449 description = _("The following options control compiler warning messages");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1450 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1451 case CL_OPTIMIZATION:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1452 description = _("The following options control optimizations");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1453 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1454 case CL_COMMON:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1455 description = _("The following options are language-independent");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1456 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1457 case CL_PARAMS:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1458 description = _("The --param option recognizes the following as parameters");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1459 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1460 default:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1461 if (i >= cl_lang_count)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1462 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1463 if (exclude_flags & all_langs_mask)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1464 description = _("The following options are specific to just the language ");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1465 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1466 description = _("The following options are supported by the language ");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1467 descrip_extra = lang_names [i];
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1468 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1469 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1470 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1471
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1472 if (description == NULL)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1473 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1474 if (any_flags == 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1475 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1476 if (include_flags & CL_UNDOCUMENTED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1477 description = _("The following options are not documented");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1478 else if (include_flags & CL_SEPARATE)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1479 description = _("The following options take separate arguments");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1480 else if (include_flags & CL_JOINED)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1481 description = _("The following options take joined arguments");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1482 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1483 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1484 internal_error ("unrecognized include_flags 0x%x passed to print_specific_help",
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1485 include_flags);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1486 return;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1487 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1488 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1489 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1490 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1491 if (any_flags & all_langs_mask)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1492 description = _("The following options are language-related");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1493 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1494 description = _("The following options are language-independent");
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1495 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1496 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1497
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1501 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1502
111
kono
parents: 67
diff changeset
1503 /* Enable FDO-related flags. */
kono
parents: 67
diff changeset
1504
kono
parents: 67
diff changeset
1505 static void
kono
parents: 67
diff changeset
1506 enable_fdo_optimizations (struct gcc_options *opts,
kono
parents: 67
diff changeset
1507 struct gcc_options *opts_set,
kono
parents: 67
diff changeset
1508 int value)
kono
parents: 67
diff changeset
1509 {
kono
parents: 67
diff changeset
1510 if (!opts_set->x_flag_branch_probabilities)
kono
parents: 67
diff changeset
1511 opts->x_flag_branch_probabilities = value;
kono
parents: 67
diff changeset
1512 if (!opts_set->x_flag_profile_values)
kono
parents: 67
diff changeset
1513 opts->x_flag_profile_values = value;
kono
parents: 67
diff changeset
1514 if (!opts_set->x_flag_unroll_loops)
kono
parents: 67
diff changeset
1515 opts->x_flag_unroll_loops = value;
kono
parents: 67
diff changeset
1516 if (!opts_set->x_flag_peel_loops)
kono
parents: 67
diff changeset
1517 opts->x_flag_peel_loops = value;
kono
parents: 67
diff changeset
1518 if (!opts_set->x_flag_tracer)
kono
parents: 67
diff changeset
1519 opts->x_flag_tracer = value;
kono
parents: 67
diff changeset
1520 if (!opts_set->x_flag_value_profile_transformations)
kono
parents: 67
diff changeset
1521 opts->x_flag_value_profile_transformations = value;
kono
parents: 67
diff changeset
1522 if (!opts_set->x_flag_inline_functions)
kono
parents: 67
diff changeset
1523 opts->x_flag_inline_functions = value;
kono
parents: 67
diff changeset
1524 if (!opts_set->x_flag_ipa_cp)
kono
parents: 67
diff changeset
1525 opts->x_flag_ipa_cp = value;
kono
parents: 67
diff changeset
1526 if (!opts_set->x_flag_ipa_cp_clone
kono
parents: 67
diff changeset
1527 && value && opts->x_flag_ipa_cp)
kono
parents: 67
diff changeset
1528 opts->x_flag_ipa_cp_clone = value;
kono
parents: 67
diff changeset
1529 if (!opts_set->x_flag_ipa_bit_cp
kono
parents: 67
diff changeset
1530 && value && opts->x_flag_ipa_cp)
kono
parents: 67
diff changeset
1531 opts->x_flag_ipa_bit_cp = value;
kono
parents: 67
diff changeset
1532 if (!opts_set->x_flag_predictive_commoning)
kono
parents: 67
diff changeset
1533 opts->x_flag_predictive_commoning = value;
kono
parents: 67
diff changeset
1534 if (!opts_set->x_flag_split_loops)
kono
parents: 67
diff changeset
1535 opts->x_flag_split_loops = value;
kono
parents: 67
diff changeset
1536 if (!opts_set->x_flag_unswitch_loops)
kono
parents: 67
diff changeset
1537 opts->x_flag_unswitch_loops = value;
kono
parents: 67
diff changeset
1538 if (!opts_set->x_flag_gcse_after_reload)
kono
parents: 67
diff changeset
1539 opts->x_flag_gcse_after_reload = value;
kono
parents: 67
diff changeset
1540 if (!opts_set->x_flag_tree_loop_vectorize)
kono
parents: 67
diff changeset
1541 opts->x_flag_tree_loop_vectorize = value;
kono
parents: 67
diff changeset
1542 if (!opts_set->x_flag_tree_slp_vectorize)
kono
parents: 67
diff changeset
1543 opts->x_flag_tree_slp_vectorize = value;
kono
parents: 67
diff changeset
1544 if (!opts_set->x_flag_vect_cost_model)
kono
parents: 67
diff changeset
1545 opts->x_flag_vect_cost_model = VECT_COST_MODEL_DYNAMIC;
kono
parents: 67
diff changeset
1546 if (!opts_set->x_flag_tree_loop_distribute_patterns)
kono
parents: 67
diff changeset
1547 opts->x_flag_tree_loop_distribute_patterns = value;
kono
parents: 67
diff changeset
1548 }
kono
parents: 67
diff changeset
1549
kono
parents: 67
diff changeset
1550 /* -f{,no-}sanitize{,-recover}= suboptions. */
kono
parents: 67
diff changeset
1551 const struct sanitizer_opts_s sanitizer_opts[] =
kono
parents: 67
diff changeset
1552 {
kono
parents: 67
diff changeset
1553 #define SANITIZER_OPT(name, flags, recover) \
kono
parents: 67
diff changeset
1554 { #name, flags, sizeof #name - 1, recover }
kono
parents: 67
diff changeset
1555 SANITIZER_OPT (address, (SANITIZE_ADDRESS | SANITIZE_USER_ADDRESS), true),
kono
parents: 67
diff changeset
1556 SANITIZER_OPT (kernel-address, (SANITIZE_ADDRESS | SANITIZE_KERNEL_ADDRESS),
kono
parents: 67
diff changeset
1557 true),
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1558 SANITIZER_OPT (pointer-compare, SANITIZE_POINTER_COMPARE, true),
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1559 SANITIZER_OPT (pointer-subtract, SANITIZE_POINTER_SUBTRACT, true),
111
kono
parents: 67
diff changeset
1560 SANITIZER_OPT (thread, SANITIZE_THREAD, false),
kono
parents: 67
diff changeset
1561 SANITIZER_OPT (leak, SANITIZE_LEAK, false),
kono
parents: 67
diff changeset
1562 SANITIZER_OPT (shift, SANITIZE_SHIFT, true),
kono
parents: 67
diff changeset
1563 SANITIZER_OPT (shift-base, SANITIZE_SHIFT_BASE, true),
kono
parents: 67
diff changeset
1564 SANITIZER_OPT (shift-exponent, SANITIZE_SHIFT_EXPONENT, true),
kono
parents: 67
diff changeset
1565 SANITIZER_OPT (integer-divide-by-zero, SANITIZE_DIVIDE, true),
kono
parents: 67
diff changeset
1566 SANITIZER_OPT (undefined, SANITIZE_UNDEFINED, true),
kono
parents: 67
diff changeset
1567 SANITIZER_OPT (unreachable, SANITIZE_UNREACHABLE, false),
kono
parents: 67
diff changeset
1568 SANITIZER_OPT (vla-bound, SANITIZE_VLA, true),
kono
parents: 67
diff changeset
1569 SANITIZER_OPT (return, SANITIZE_RETURN, false),
kono
parents: 67
diff changeset
1570 SANITIZER_OPT (null, SANITIZE_NULL, true),
kono
parents: 67
diff changeset
1571 SANITIZER_OPT (signed-integer-overflow, SANITIZE_SI_OVERFLOW, true),
kono
parents: 67
diff changeset
1572 SANITIZER_OPT (bool, SANITIZE_BOOL, true),
kono
parents: 67
diff changeset
1573 SANITIZER_OPT (enum, SANITIZE_ENUM, true),
kono
parents: 67
diff changeset
1574 SANITIZER_OPT (float-divide-by-zero, SANITIZE_FLOAT_DIVIDE, true),
kono
parents: 67
diff changeset
1575 SANITIZER_OPT (float-cast-overflow, SANITIZE_FLOAT_CAST, true),
kono
parents: 67
diff changeset
1576 SANITIZER_OPT (bounds, SANITIZE_BOUNDS, true),
kono
parents: 67
diff changeset
1577 SANITIZER_OPT (bounds-strict, SANITIZE_BOUNDS | SANITIZE_BOUNDS_STRICT, true),
kono
parents: 67
diff changeset
1578 SANITIZER_OPT (alignment, SANITIZE_ALIGNMENT, true),
kono
parents: 67
diff changeset
1579 SANITIZER_OPT (nonnull-attribute, SANITIZE_NONNULL_ATTRIBUTE, true),
kono
parents: 67
diff changeset
1580 SANITIZER_OPT (returns-nonnull-attribute, SANITIZE_RETURNS_NONNULL_ATTRIBUTE,
kono
parents: 67
diff changeset
1581 true),
kono
parents: 67
diff changeset
1582 SANITIZER_OPT (object-size, SANITIZE_OBJECT_SIZE, true),
kono
parents: 67
diff changeset
1583 SANITIZER_OPT (vptr, SANITIZE_VPTR, true),
kono
parents: 67
diff changeset
1584 SANITIZER_OPT (pointer-overflow, SANITIZE_POINTER_OVERFLOW, true),
kono
parents: 67
diff changeset
1585 SANITIZER_OPT (builtin, SANITIZE_BUILTIN, true),
kono
parents: 67
diff changeset
1586 SANITIZER_OPT (all, ~0U, true),
kono
parents: 67
diff changeset
1587 #undef SANITIZER_OPT
kono
parents: 67
diff changeset
1588 { NULL, 0U, 0UL, false }
kono
parents: 67
diff changeset
1589 };
kono
parents: 67
diff changeset
1590
kono
parents: 67
diff changeset
1591 /* -f{,no-}sanitize-coverage= suboptions. */
kono
parents: 67
diff changeset
1592 const struct sanitizer_opts_s coverage_sanitizer_opts[] =
kono
parents: 67
diff changeset
1593 {
kono
parents: 67
diff changeset
1594 #define COVERAGE_SANITIZER_OPT(name, flags) \
kono
parents: 67
diff changeset
1595 { #name, flags, sizeof #name - 1, true }
kono
parents: 67
diff changeset
1596 COVERAGE_SANITIZER_OPT (trace-pc, SANITIZE_COV_TRACE_PC),
kono
parents: 67
diff changeset
1597 COVERAGE_SANITIZER_OPT (trace-cmp, SANITIZE_COV_TRACE_CMP),
kono
parents: 67
diff changeset
1598 #undef COVERAGE_SANITIZER_OPT
kono
parents: 67
diff changeset
1599 { NULL, 0U, 0UL, false }
kono
parents: 67
diff changeset
1600 };
kono
parents: 67
diff changeset
1601
kono
parents: 67
diff changeset
1602 /* A struct for describing a run of chars within a string. */
kono
parents: 67
diff changeset
1603
kono
parents: 67
diff changeset
1604 struct string_fragment
kono
parents: 67
diff changeset
1605 {
kono
parents: 67
diff changeset
1606 string_fragment (const char *start, size_t len)
kono
parents: 67
diff changeset
1607 : m_start (start), m_len (len) {}
kono
parents: 67
diff changeset
1608
kono
parents: 67
diff changeset
1609 const char *m_start;
kono
parents: 67
diff changeset
1610 size_t m_len;
kono
parents: 67
diff changeset
1611 };
kono
parents: 67
diff changeset
1612
kono
parents: 67
diff changeset
1613 /* Specialization of edit_distance_traits for string_fragment,
kono
parents: 67
diff changeset
1614 for use by get_closest_sanitizer_option. */
kono
parents: 67
diff changeset
1615
kono
parents: 67
diff changeset
1616 template <>
kono
parents: 67
diff changeset
1617 struct edit_distance_traits<const string_fragment &>
kono
parents: 67
diff changeset
1618 {
kono
parents: 67
diff changeset
1619 static size_t get_length (const string_fragment &fragment)
kono
parents: 67
diff changeset
1620 {
kono
parents: 67
diff changeset
1621 return fragment.m_len;
kono
parents: 67
diff changeset
1622 }
kono
parents: 67
diff changeset
1623
kono
parents: 67
diff changeset
1624 static const char *get_string (const string_fragment &fragment)
kono
parents: 67
diff changeset
1625 {
kono
parents: 67
diff changeset
1626 return fragment.m_start;
kono
parents: 67
diff changeset
1627 }
kono
parents: 67
diff changeset
1628 };
kono
parents: 67
diff changeset
1629
kono
parents: 67
diff changeset
1630 /* Given ARG, an unrecognized sanitizer option, return the best
kono
parents: 67
diff changeset
1631 matching sanitizer option, or NULL if there isn't one.
kono
parents: 67
diff changeset
1632 OPTS is array of candidate sanitizer options.
kono
parents: 67
diff changeset
1633 CODE is OPT_fsanitize_, OPT_fsanitize_recover_ or
kono
parents: 67
diff changeset
1634 OPT_fsanitize_coverage_.
kono
parents: 67
diff changeset
1635 VALUE is non-zero for the regular form of the option, zero
kono
parents: 67
diff changeset
1636 for the "no-" form (e.g. "-fno-sanitize-recover="). */
kono
parents: 67
diff changeset
1637
kono
parents: 67
diff changeset
1638 static const char *
kono
parents: 67
diff changeset
1639 get_closest_sanitizer_option (const string_fragment &arg,
kono
parents: 67
diff changeset
1640 const struct sanitizer_opts_s *opts,
kono
parents: 67
diff changeset
1641 enum opt_code code, int value)
kono
parents: 67
diff changeset
1642 {
kono
parents: 67
diff changeset
1643 best_match <const string_fragment &, const char*> bm (arg);
kono
parents: 67
diff changeset
1644 for (int i = 0; opts[i].name != NULL; ++i)
kono
parents: 67
diff changeset
1645 {
kono
parents: 67
diff changeset
1646 /* -fsanitize=all is not valid, so don't offer it. */
kono
parents: 67
diff changeset
1647 if (code == OPT_fsanitize_
kono
parents: 67
diff changeset
1648 && opts[i].flag == ~0U
kono
parents: 67
diff changeset
1649 && value)
kono
parents: 67
diff changeset
1650 continue;
kono
parents: 67
diff changeset
1651
kono
parents: 67
diff changeset
1652 /* For -fsanitize-recover= (and not -fno-sanitize-recover=),
kono
parents: 67
diff changeset
1653 don't offer the non-recoverable options. */
kono
parents: 67
diff changeset
1654 if (code == OPT_fsanitize_recover_
kono
parents: 67
diff changeset
1655 && !opts[i].can_recover
kono
parents: 67
diff changeset
1656 && value)
kono
parents: 67
diff changeset
1657 continue;
kono
parents: 67
diff changeset
1658
kono
parents: 67
diff changeset
1659 bm.consider (opts[i].name);
kono
parents: 67
diff changeset
1660 }
kono
parents: 67
diff changeset
1661 return bm.get_best_meaningful_candidate ();
kono
parents: 67
diff changeset
1662 }
kono
parents: 67
diff changeset
1663
kono
parents: 67
diff changeset
1664 /* Parse comma separated sanitizer suboptions from P for option SCODE,
kono
parents: 67
diff changeset
1665 adjust previous FLAGS and return new ones. If COMPLAIN is false,
kono
parents: 67
diff changeset
1666 don't issue diagnostics. */
kono
parents: 67
diff changeset
1667
kono
parents: 67
diff changeset
1668 unsigned int
kono
parents: 67
diff changeset
1669 parse_sanitizer_options (const char *p, location_t loc, int scode,
kono
parents: 67
diff changeset
1670 unsigned int flags, int value, bool complain)
kono
parents: 67
diff changeset
1671 {
kono
parents: 67
diff changeset
1672 enum opt_code code = (enum opt_code) scode;
kono
parents: 67
diff changeset
1673
kono
parents: 67
diff changeset
1674 const struct sanitizer_opts_s *opts;
kono
parents: 67
diff changeset
1675 if (code == OPT_fsanitize_coverage_)
kono
parents: 67
diff changeset
1676 opts = coverage_sanitizer_opts;
kono
parents: 67
diff changeset
1677 else
kono
parents: 67
diff changeset
1678 opts = sanitizer_opts;
kono
parents: 67
diff changeset
1679
kono
parents: 67
diff changeset
1680 while (*p != 0)
kono
parents: 67
diff changeset
1681 {
kono
parents: 67
diff changeset
1682 size_t len, i;
kono
parents: 67
diff changeset
1683 bool found = false;
kono
parents: 67
diff changeset
1684 const char *comma = strchr (p, ',');
kono
parents: 67
diff changeset
1685
kono
parents: 67
diff changeset
1686 if (comma == NULL)
kono
parents: 67
diff changeset
1687 len = strlen (p);
kono
parents: 67
diff changeset
1688 else
kono
parents: 67
diff changeset
1689 len = comma - p;
kono
parents: 67
diff changeset
1690 if (len == 0)
kono
parents: 67
diff changeset
1691 {
kono
parents: 67
diff changeset
1692 p = comma + 1;
kono
parents: 67
diff changeset
1693 continue;
kono
parents: 67
diff changeset
1694 }
kono
parents: 67
diff changeset
1695
kono
parents: 67
diff changeset
1696 /* Check to see if the string matches an option class name. */
kono
parents: 67
diff changeset
1697 for (i = 0; opts[i].name != NULL; ++i)
kono
parents: 67
diff changeset
1698 if (len == opts[i].len && memcmp (p, opts[i].name, len) == 0)
kono
parents: 67
diff changeset
1699 {
kono
parents: 67
diff changeset
1700 /* Handle both -fsanitize and -fno-sanitize cases. */
kono
parents: 67
diff changeset
1701 if (value && opts[i].flag == ~0U)
kono
parents: 67
diff changeset
1702 {
kono
parents: 67
diff changeset
1703 if (code == OPT_fsanitize_)
kono
parents: 67
diff changeset
1704 {
kono
parents: 67
diff changeset
1705 if (complain)
kono
parents: 67
diff changeset
1706 error_at (loc, "%<-fsanitize=all%> option is not valid");
kono
parents: 67
diff changeset
1707 }
kono
parents: 67
diff changeset
1708 else
kono
parents: 67
diff changeset
1709 flags |= ~(SANITIZE_THREAD | SANITIZE_LEAK
kono
parents: 67
diff changeset
1710 | SANITIZE_UNREACHABLE | SANITIZE_RETURN);
kono
parents: 67
diff changeset
1711 }
kono
parents: 67
diff changeset
1712 else if (value)
kono
parents: 67
diff changeset
1713 {
kono
parents: 67
diff changeset
1714 /* Do not enable -fsanitize-recover=unreachable and
kono
parents: 67
diff changeset
1715 -fsanitize-recover=return if -fsanitize-recover=undefined
kono
parents: 67
diff changeset
1716 is selected. */
kono
parents: 67
diff changeset
1717 if (code == OPT_fsanitize_recover_
kono
parents: 67
diff changeset
1718 && opts[i].flag == SANITIZE_UNDEFINED)
kono
parents: 67
diff changeset
1719 flags |= (SANITIZE_UNDEFINED
kono
parents: 67
diff changeset
1720 & ~(SANITIZE_UNREACHABLE | SANITIZE_RETURN));
kono
parents: 67
diff changeset
1721 else
kono
parents: 67
diff changeset
1722 flags |= opts[i].flag;
kono
parents: 67
diff changeset
1723 }
kono
parents: 67
diff changeset
1724 else
kono
parents: 67
diff changeset
1725 flags &= ~opts[i].flag;
kono
parents: 67
diff changeset
1726 found = true;
kono
parents: 67
diff changeset
1727 break;
kono
parents: 67
diff changeset
1728 }
kono
parents: 67
diff changeset
1729
kono
parents: 67
diff changeset
1730 if (! found && complain)
kono
parents: 67
diff changeset
1731 {
kono
parents: 67
diff changeset
1732 const char *hint
kono
parents: 67
diff changeset
1733 = get_closest_sanitizer_option (string_fragment (p, len),
kono
parents: 67
diff changeset
1734 opts, code, value);
kono
parents: 67
diff changeset
1735
kono
parents: 67
diff changeset
1736 const char *suffix;
kono
parents: 67
diff changeset
1737 if (code == OPT_fsanitize_recover_)
kono
parents: 67
diff changeset
1738 suffix = "-recover";
kono
parents: 67
diff changeset
1739 else if (code == OPT_fsanitize_coverage_)
kono
parents: 67
diff changeset
1740 suffix = "-coverage";
kono
parents: 67
diff changeset
1741 else
kono
parents: 67
diff changeset
1742 suffix = "";
kono
parents: 67
diff changeset
1743
kono
parents: 67
diff changeset
1744 if (hint)
kono
parents: 67
diff changeset
1745 error_at (loc,
kono
parents: 67
diff changeset
1746 "unrecognized argument to -f%ssanitize%s= option: %q.*s;"
kono
parents: 67
diff changeset
1747 " did you mean %qs?",
kono
parents: 67
diff changeset
1748 value ? "" : "no-",
kono
parents: 67
diff changeset
1749 suffix, (int) len, p, hint);
kono
parents: 67
diff changeset
1750 else
kono
parents: 67
diff changeset
1751 error_at (loc,
kono
parents: 67
diff changeset
1752 "unrecognized argument to -f%ssanitize%s= option: %q.*s",
kono
parents: 67
diff changeset
1753 value ? "" : "no-",
kono
parents: 67
diff changeset
1754 suffix, (int) len, p);
kono
parents: 67
diff changeset
1755 }
kono
parents: 67
diff changeset
1756
kono
parents: 67
diff changeset
1757 if (comma == NULL)
kono
parents: 67
diff changeset
1758 break;
kono
parents: 67
diff changeset
1759 p = comma + 1;
kono
parents: 67
diff changeset
1760 }
kono
parents: 67
diff changeset
1761 return flags;
kono
parents: 67
diff changeset
1762 }
kono
parents: 67
diff changeset
1763
kono
parents: 67
diff changeset
1764 /* Parse string values of no_sanitize attribute passed in VALUE.
kono
parents: 67
diff changeset
1765 Values are separated with comma. */
kono
parents: 67
diff changeset
1766
kono
parents: 67
diff changeset
1767 unsigned int
kono
parents: 67
diff changeset
1768 parse_no_sanitize_attribute (char *value)
kono
parents: 67
diff changeset
1769 {
kono
parents: 67
diff changeset
1770 unsigned int flags = 0;
kono
parents: 67
diff changeset
1771 unsigned int i;
kono
parents: 67
diff changeset
1772 char *q = strtok (value, ",");
kono
parents: 67
diff changeset
1773
kono
parents: 67
diff changeset
1774 while (q != NULL)
kono
parents: 67
diff changeset
1775 {
kono
parents: 67
diff changeset
1776 for (i = 0; sanitizer_opts[i].name != NULL; ++i)
kono
parents: 67
diff changeset
1777 if (strcmp (sanitizer_opts[i].name, q) == 0)
kono
parents: 67
diff changeset
1778 {
kono
parents: 67
diff changeset
1779 flags |= sanitizer_opts[i].flag;
kono
parents: 67
diff changeset
1780 if (sanitizer_opts[i].flag == SANITIZE_UNDEFINED)
kono
parents: 67
diff changeset
1781 flags |= SANITIZE_UNDEFINED_NONDEFAULT;
kono
parents: 67
diff changeset
1782 break;
kono
parents: 67
diff changeset
1783 }
kono
parents: 67
diff changeset
1784
kono
parents: 67
diff changeset
1785 if (sanitizer_opts[i].name == NULL)
kono
parents: 67
diff changeset
1786 warning (OPT_Wattributes,
kono
parents: 67
diff changeset
1787 "%<%s%> attribute directive ignored", q);
kono
parents: 67
diff changeset
1788
kono
parents: 67
diff changeset
1789 q = strtok (NULL, ",");
kono
parents: 67
diff changeset
1790 }
kono
parents: 67
diff changeset
1791
kono
parents: 67
diff changeset
1792 return flags;
kono
parents: 67
diff changeset
1793 }
kono
parents: 67
diff changeset
1794
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1795 /* Parse -falign-NAME format for a FLAG value. Return individual
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1796 parsed integer values into RESULT_VALUES array. If REPORT_ERROR is
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1797 set, print error message at LOC location. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1798
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1799 bool
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1800 parse_and_check_align_values (const char *flag,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1801 const char *name,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1802 auto_vec<unsigned> &result_values,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1803 bool report_error,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1804 location_t loc)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1805 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1806 char *str = xstrdup (flag);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1807 for (char *p = strtok (str, ":"); p; p = strtok (NULL, ":"))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1808 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1809 char *end;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1810 int v = strtol (p, &end, 10);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1811 if (*end != '\0' || v < 0)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1812 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1813 if (report_error)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1814 error_at (loc, "invalid arguments for %<-falign-%s%> option: %qs",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1815 name, flag);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1816
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1817 return false;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1818 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1819
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1820 result_values.safe_push ((unsigned)v);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1821 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1822
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1823 free (str);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1824
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1825 /* Check that we have a correct number of values. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1826 #ifdef SUBALIGN_LOG
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1827 unsigned max_valid_values = 4;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1828 #else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1829 unsigned max_valid_values = 2;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1830 #endif
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1831
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1832 if (result_values.is_empty ()
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1833 || result_values.length () > max_valid_values)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1834 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1835 if (report_error)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1836 error_at (loc, "invalid number of arguments for %<-falign-%s%> "
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1837 "option: %qs", name, flag);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1838 return false;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1839 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1840
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1841 for (unsigned i = 0; i < result_values.length (); i++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1842 if (result_values[i] > MAX_CODE_ALIGN_VALUE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1843 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1844 if (report_error)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1845 error_at (loc, "%<-falign-%s%> is not between 0 and %d",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1846 name, MAX_CODE_ALIGN_VALUE);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1847 return false;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1848 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1849
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1850 return true;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1851 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1852
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1853 /* Check that alignment value FLAG for -falign-NAME is valid at a given
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1854 location LOC. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1855
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1856 static void
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1857 check_alignment_argument (location_t loc, const char *flag, const char *name)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1858 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1859 auto_vec<unsigned> align_result;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1860 parse_and_check_align_values (flag, name, align_result, true, loc);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1861 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1862
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1863 /* Handle target- and language-independent options. Return zero to
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1864 generate an "unknown option" message. Only options that need
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
1875 diagnostic_context *dc,
kono
parents: 67
diff changeset
1876 void (*target_option_override_hook) (void))
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1880 HOST_WIDE_INT value = decoded->value;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1881 enum opt_code code = (enum opt_code) scode;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1885 switch (code)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1886 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1889 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1890
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1891 case OPT__help:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1892 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1893 unsigned int all_langs_mask = (1U << cl_lang_count) - 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1894 unsigned int undoc_mask;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1895 unsigned int i;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1896
111
kono
parents: 67
diff changeset
1897 if (lang_mask == CL_DRIVER)
kono
parents: 67
diff changeset
1898 break;
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
1903 target_option_override_hook ();
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1904 /* First display any single language specific options. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1905 for (i = 0; i < cl_lang_count; i++)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1911 /* Then display any remaining, non-language options. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1916 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1917 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1918
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1919 case OPT__target_help:
111
kono
parents: 67
diff changeset
1920 if (lang_mask == CL_DRIVER)
kono
parents: 67
diff changeset
1921 break;
kono
parents: 67
diff changeset
1922
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1926 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1927
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1928 case OPT__help_:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1929 {
111
kono
parents: 67
diff changeset
1930 const char *a = arg;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1931 unsigned int include_flags = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1932 /* Note - by default we include undocumented options when listing
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1933 specific classes. If you only want to see documented options
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1934 then add ",^undocumented" to the --help= option. E.g.:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1935
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1936 --help=target,^undocumented */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1937 unsigned int exclude_flags = 0;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1938
111
kono
parents: 67
diff changeset
1939 if (lang_mask == CL_DRIVER)
kono
parents: 67
diff changeset
1940 break;
kono
parents: 67
diff changeset
1941
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1942 /* Walk along the argument string, parsing each word in turn.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1943 The format is:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1944 arg = [^]{word}[,{arg}]
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1945 word = {optimizers|target|warnings|undocumented|
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1946 params|common|<language>} */
111
kono
parents: 67
diff changeset
1947 while (*a != 0)
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1950 {
111
kono
parents: 67
diff changeset
1951 const char *string;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1952 unsigned int flag;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1953 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1954 specifics[] =
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1955 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1956 { "optimizers", CL_OPTIMIZATION },
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1957 { "target", CL_TARGET },
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1958 { "warnings", CL_WARNING },
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1959 { "undocumented", CL_UNDOCUMENTED },
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1960 { "params", CL_PARAMS },
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1961 { "joined", CL_JOINED },
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1962 { "separate", CL_SEPARATE },
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1963 { "common", CL_COMMON },
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1964 { NULL, 0 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1965 };
111
kono
parents: 67
diff changeset
1966 unsigned int *pflags;
kono
parents: 67
diff changeset
1967 const char *comma;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1968 unsigned int lang_flag, specific_flag;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1969 unsigned int len;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1970 unsigned int i;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1971
111
kono
parents: 67
diff changeset
1972 if (*a == '^')
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1973 {
111
kono
parents: 67
diff changeset
1974 ++a;
kono
parents: 67
diff changeset
1975 if (*a == '\0')
kono
parents: 67
diff changeset
1976 {
kono
parents: 67
diff changeset
1977 error_at (loc, "missing argument to %qs", "--help=^");
kono
parents: 67
diff changeset
1978 break;
kono
parents: 67
diff changeset
1979 }
kono
parents: 67
diff changeset
1980 pflags = &exclude_flags;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1981 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1982 else
111
kono
parents: 67
diff changeset
1983 pflags = &include_flags;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1984
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1985 comma = strchr (a, ',');
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1986 if (comma == NULL)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1987 len = strlen (a);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1988 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1989 len = comma - a;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1990 if (len == 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1991 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1992 a = comma + 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1993 continue;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1994 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1995
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1996 /* Check to see if the string matches an option class name. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1997 for (i = 0, specific_flag = 0; specifics[i].string != NULL; i++)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1998 if (strncasecmp (a, specifics[i].string, len) == 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1999 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2000 specific_flag = specifics[i].flag;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2001 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2002 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2003
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2004 /* Check to see if the string matches a language name.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2005 Note - we rely upon the alpha-sorted nature of the entries in
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2006 the lang_names array, specifically that shorter names appear
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2007 before their longer variants. (i.e. C before C++). That way
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2008 when we are attempting to match --help=c for example we will
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2009 match with C first and not C++. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2010 for (i = 0, lang_flag = 0; i < cl_lang_count; i++)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2011 if (strncasecmp (a, lang_names[i], len) == 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2012 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2013 lang_flag = 1U << i;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2014 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2015 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2016
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2017 if (specific_flag != 0)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2018 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2019 if (lang_flag == 0)
111
kono
parents: 67
diff changeset
2020 *pflags |= specific_flag;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2021 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2022 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2023 /* The option's argument matches both the start of a
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2024 language name and the start of an option class name.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2025 We have a special case for when the user has
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2026 specified "--help=c", but otherwise we have to issue
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2027 a warning. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2028 if (strncasecmp (a, "c", len) == 0)
111
kono
parents: 67
diff changeset
2029 *pflags |= lang_flag;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2035 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2036 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2037 else if (lang_flag != 0)
111
kono
parents: 67
diff changeset
2038 *pflags |= lang_flag;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2043
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2044 if (comma == NULL)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2045 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2046 a = comma + 1;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2047 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2048
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2049 if (include_flags)
111
kono
parents: 67
diff changeset
2050 {
kono
parents: 67
diff changeset
2051 target_option_override_hook ();
kono
parents: 67
diff changeset
2052 print_specific_help (include_flags, exclude_flags, 0, opts,
kono
parents: 67
diff changeset
2053 lang_mask);
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2056 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2057 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2058
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2059 case OPT__version:
111
kono
parents: 67
diff changeset
2060 if (lang_mask == CL_DRIVER)
kono
parents: 67
diff changeset
2061 break;
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2064 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2065
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2066 case OPT__completion_:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2067 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2068
111
kono
parents: 67
diff changeset
2069 case OPT_fsanitize_:
kono
parents: 67
diff changeset
2070 opts->x_flag_sanitize
kono
parents: 67
diff changeset
2071 = parse_sanitizer_options (arg, loc, code,
kono
parents: 67
diff changeset
2072 opts->x_flag_sanitize, value, true);
kono
parents: 67
diff changeset
2073
kono
parents: 67
diff changeset
2074 /* Kernel ASan implies normal ASan but does not yet support
kono
parents: 67
diff changeset
2075 all features. */
kono
parents: 67
diff changeset
2076 if (opts->x_flag_sanitize & SANITIZE_KERNEL_ADDRESS)
kono
parents: 67
diff changeset
2077 {
kono
parents: 67
diff changeset
2078 maybe_set_param_value (PARAM_ASAN_INSTRUMENTATION_WITH_CALL_THRESHOLD,
kono
parents: 67
diff changeset
2079 0, opts->x_param_values,
kono
parents: 67
diff changeset
2080 opts_set->x_param_values);
kono
parents: 67
diff changeset
2081 maybe_set_param_value (PARAM_ASAN_GLOBALS, 0, opts->x_param_values,
kono
parents: 67
diff changeset
2082 opts_set->x_param_values);
kono
parents: 67
diff changeset
2083 maybe_set_param_value (PARAM_ASAN_STACK, 0, opts->x_param_values,
kono
parents: 67
diff changeset
2084 opts_set->x_param_values);
kono
parents: 67
diff changeset
2085 maybe_set_param_value (PARAM_ASAN_PROTECT_ALLOCAS, 0,
kono
parents: 67
diff changeset
2086 opts->x_param_values,
kono
parents: 67
diff changeset
2087 opts_set->x_param_values);
kono
parents: 67
diff changeset
2088 maybe_set_param_value (PARAM_ASAN_USE_AFTER_RETURN, 0,
kono
parents: 67
diff changeset
2089 opts->x_param_values,
kono
parents: 67
diff changeset
2090 opts_set->x_param_values);
kono
parents: 67
diff changeset
2091 }
kono
parents: 67
diff changeset
2092 break;
kono
parents: 67
diff changeset
2093
kono
parents: 67
diff changeset
2094 case OPT_fsanitize_recover_:
kono
parents: 67
diff changeset
2095 opts->x_flag_sanitize_recover
kono
parents: 67
diff changeset
2096 = parse_sanitizer_options (arg, loc, code,
kono
parents: 67
diff changeset
2097 opts->x_flag_sanitize_recover, value, true);
kono
parents: 67
diff changeset
2098 break;
kono
parents: 67
diff changeset
2099
kono
parents: 67
diff changeset
2100 case OPT_fasan_shadow_offset_:
kono
parents: 67
diff changeset
2101 /* Deferred. */
kono
parents: 67
diff changeset
2102 break;
kono
parents: 67
diff changeset
2103
kono
parents: 67
diff changeset
2104 case OPT_fsanitize_address_use_after_scope:
kono
parents: 67
diff changeset
2105 opts->x_flag_sanitize_address_use_after_scope = value;
kono
parents: 67
diff changeset
2106 break;
kono
parents: 67
diff changeset
2107
kono
parents: 67
diff changeset
2108 case OPT_fsanitize_recover:
kono
parents: 67
diff changeset
2109 if (value)
kono
parents: 67
diff changeset
2110 opts->x_flag_sanitize_recover
kono
parents: 67
diff changeset
2111 |= (SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT)
kono
parents: 67
diff changeset
2112 & ~(SANITIZE_UNREACHABLE | SANITIZE_RETURN);
kono
parents: 67
diff changeset
2113 else
kono
parents: 67
diff changeset
2114 opts->x_flag_sanitize_recover
kono
parents: 67
diff changeset
2115 &= ~(SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT);
kono
parents: 67
diff changeset
2116 break;
kono
parents: 67
diff changeset
2117
kono
parents: 67
diff changeset
2118 case OPT_fsanitize_coverage_:
kono
parents: 67
diff changeset
2119 opts->x_flag_sanitize_coverage
kono
parents: 67
diff changeset
2120 = parse_sanitizer_options (arg, loc, code,
kono
parents: 67
diff changeset
2121 opts->x_flag_sanitize_coverage, value, true);
kono
parents: 67
diff changeset
2122 break;
kono
parents: 67
diff changeset
2123
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2124 case OPT_O:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
2127 case OPT_Og:
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2128 /* Currently handled in a prescan. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2129 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2130
111
kono
parents: 67
diff changeset
2131 case OPT_Werror:
kono
parents: 67
diff changeset
2132 dc->warning_as_error_requested = value;
kono
parents: 67
diff changeset
2133 break;
kono
parents: 67
diff changeset
2134
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2135 case OPT_Werror_:
111
kono
parents: 67
diff changeset
2136 if (lang_mask == CL_DRIVER)
kono
parents: 67
diff changeset
2137 break;
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2141 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2145 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2146
111
kono
parents: 67
diff changeset
2147 case OPT_Wstack_usage_:
kono
parents: 67
diff changeset
2148 opts->x_flag_stack_usage_info = value != -1;
kono
parents: 67
diff changeset
2149 break;
kono
parents: 67
diff changeset
2150
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2153 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2154
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2159 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2163 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2164
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2167 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2168
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2169 case OPT_auxbase_strip:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2170 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2171 char *tmp = xstrdup (arg);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2172 strip_off_ending (tmp, strlen (tmp));
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
2175 else
kono
parents: 67
diff changeset
2176 free (tmp);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2177 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2178 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2179
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2182 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2183
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2184 case OPT_fcall_used_:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2187 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2188
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2189 case OPT_fdbg_cnt_:
111
kono
parents: 67
diff changeset
2190 /* Deferred. */
kono
parents: 67
diff changeset
2191 break;
kono
parents: 67
diff changeset
2192
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
2195 opts->x_exit_after_options = true;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2196 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2197
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2198 case OPT_fdebug_prefix_map_:
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2201 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2202
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2205 break;
111
kono
parents: 67
diff changeset
2206
kono
parents: 67
diff changeset
2207 case OPT_fdiagnostics_show_caret:
kono
parents: 67
diff changeset
2208 dc->show_caret = value;
kono
parents: 67
diff changeset
2209 break;
kono
parents: 67
diff changeset
2210
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2211 case OPT_fdiagnostics_show_labels:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2212 dc->show_labels_p = value;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2213 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2214
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2215 case OPT_fdiagnostics_show_line_numbers:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2216 dc->show_line_numbers_p = value;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2217 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2218
111
kono
parents: 67
diff changeset
2219 case OPT_fdiagnostics_color_:
kono
parents: 67
diff changeset
2220 diagnostic_color_init (dc, value);
kono
parents: 67
diff changeset
2221 break;
kono
parents: 67
diff changeset
2222
kono
parents: 67
diff changeset
2223 case OPT_fdiagnostics_parseable_fixits:
kono
parents: 67
diff changeset
2224 dc->parseable_fixits_p = value;
kono
parents: 67
diff changeset
2225 break;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2226
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2229 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2230
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2231 case OPT_fdiagnostics_minimum_margin_width_:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2232 dc->min_margin_width = value;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2233 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2234
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2241 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2242
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2245 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2246
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2249 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2250
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2256 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2257
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2258 case OPT_finstrument_functions_exclude_function_list_:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2261 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2262
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2263 case OPT_finstrument_functions_exclude_file_list_:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2266 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2267
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
2270 diagnostic_set_caret_max_width (dc, value);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2271 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2272
111
kono
parents: 67
diff changeset
2273 case OPT_fopt_info:
kono
parents: 67
diff changeset
2274 case OPT_fopt_info_:
kono
parents: 67
diff changeset
2275 /* Deferred. */
kono
parents: 67
diff changeset
2276 break;
kono
parents: 67
diff changeset
2277
kono
parents: 67
diff changeset
2278 case OPT_foffload_:
kono
parents: 67
diff changeset
2279 {
kono
parents: 67
diff changeset
2280 const char *p = arg;
kono
parents: 67
diff changeset
2281 opts->x_flag_disable_hsa = true;
kono
parents: 67
diff changeset
2282 while (*p != 0)
kono
parents: 67
diff changeset
2283 {
kono
parents: 67
diff changeset
2284 const char *comma = strchr (p, ',');
kono
parents: 67
diff changeset
2285
kono
parents: 67
diff changeset
2286 if ((strncmp (p, "disable", 7) == 0)
kono
parents: 67
diff changeset
2287 && (p[7] == ',' || p[7] == '\0'))
kono
parents: 67
diff changeset
2288 {
kono
parents: 67
diff changeset
2289 opts->x_flag_disable_hsa = true;
kono
parents: 67
diff changeset
2290 break;
kono
parents: 67
diff changeset
2291 }
kono
parents: 67
diff changeset
2292
kono
parents: 67
diff changeset
2293 if ((strncmp (p, "hsa", 3) == 0)
kono
parents: 67
diff changeset
2294 && (p[3] == ',' || p[3] == '\0'))
kono
parents: 67
diff changeset
2295 {
kono
parents: 67
diff changeset
2296 #ifdef ENABLE_HSA
kono
parents: 67
diff changeset
2297 opts->x_flag_disable_hsa = false;
kono
parents: 67
diff changeset
2298 #else
kono
parents: 67
diff changeset
2299 sorry ("HSA has not been enabled during configuration");
kono
parents: 67
diff changeset
2300 #endif
kono
parents: 67
diff changeset
2301 }
kono
parents: 67
diff changeset
2302 if (!comma)
kono
parents: 67
diff changeset
2303 break;
kono
parents: 67
diff changeset
2304 p = comma + 1;
kono
parents: 67
diff changeset
2305 }
kono
parents: 67
diff changeset
2306 break;
kono
parents: 67
diff changeset
2307 }
kono
parents: 67
diff changeset
2308
kono
parents: 67
diff changeset
2309 #ifndef ACCEL_COMPILER
kono
parents: 67
diff changeset
2310 case OPT_foffload_abi_:
kono
parents: 67
diff changeset
2311 error_at (loc, "%<-foffload-abi%> option can be specified only for "
kono
parents: 67
diff changeset
2312 "offload compiler");
kono
parents: 67
diff changeset
2313 break;
kono
parents: 67
diff changeset
2314 #endif
kono
parents: 67
diff changeset
2315
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2316 case OPT_fpack_struct_:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2323 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2328 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2329
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2333 value = true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2334 /* No break here - do -fprofile-use processing. */
111
kono
parents: 67
diff changeset
2335 /* FALLTHRU */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2336 case OPT_fprofile_use:
111
kono
parents: 67
diff changeset
2337 enable_fdo_optimizations (opts, opts_set, value);
kono
parents: 67
diff changeset
2338 if (!opts_set->x_flag_profile_reorder_functions)
kono
parents: 67
diff changeset
2339 opts->x_flag_profile_reorder_functions = value;
kono
parents: 67
diff changeset
2340 /* Indirect call profiling should do all useful transformations
kono
parents: 67
diff changeset
2341 speculative devirtualization does. */
kono
parents: 67
diff changeset
2342 if (!opts_set->x_flag_devirtualize_speculatively
kono
parents: 67
diff changeset
2343 && opts->x_flag_value_profile_transformations)
kono
parents: 67
diff changeset
2344 opts->x_flag_devirtualize_speculatively = false;
kono
parents: 67
diff changeset
2345 break;
kono
parents: 67
diff changeset
2346
kono
parents: 67
diff changeset
2347 case OPT_fauto_profile_:
kono
parents: 67
diff changeset
2348 opts->x_auto_profile_file = xstrdup (arg);
kono
parents: 67
diff changeset
2349 opts->x_flag_auto_profile = true;
kono
parents: 67
diff changeset
2350 value = true;
kono
parents: 67
diff changeset
2351 /* No break here - do -fauto-profile processing. */
kono
parents: 67
diff changeset
2352 /* FALLTHRU */
kono
parents: 67
diff changeset
2353 case OPT_fauto_profile:
kono
parents: 67
diff changeset
2354 enable_fdo_optimizations (opts, opts_set, value);
kono
parents: 67
diff changeset
2355 if (!opts_set->x_flag_profile_correction)
kono
parents: 67
diff changeset
2356 opts->x_flag_profile_correction = value;
kono
parents: 67
diff changeset
2357 maybe_set_param_value (
kono
parents: 67
diff changeset
2358 PARAM_EARLY_INLINER_MAX_ITERATIONS, 10,
kono
parents: 67
diff changeset
2359 opts->x_param_values, opts_set->x_param_values);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2360 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2361
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2364 value = true;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2365 /* No break here - do -fprofile-generate processing. */
111
kono
parents: 67
diff changeset
2366 /* FALLTHRU */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
2374 if (!opts_set->x_flag_ipa_bit_cp)
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2381 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2382
111
kono
parents: 67
diff changeset
2383 case OPT_fpatchable_function_entry_:
kono
parents: 67
diff changeset
2384 {
kono
parents: 67
diff changeset
2385 char *patch_area_arg = xstrdup (arg);
kono
parents: 67
diff changeset
2386 char *comma = strchr (patch_area_arg, ',');
kono
parents: 67
diff changeset
2387 if (comma)
kono
parents: 67
diff changeset
2388 {
kono
parents: 67
diff changeset
2389 *comma = '\0';
kono
parents: 67
diff changeset
2390 function_entry_patch_area_size =
kono
parents: 67
diff changeset
2391 integral_argument (patch_area_arg);
kono
parents: 67
diff changeset
2392 function_entry_patch_area_start =
kono
parents: 67
diff changeset
2393 integral_argument (comma + 1);
kono
parents: 67
diff changeset
2394 }
kono
parents: 67
diff changeset
2395 else
kono
parents: 67
diff changeset
2396 {
kono
parents: 67
diff changeset
2397 function_entry_patch_area_size =
kono
parents: 67
diff changeset
2398 integral_argument (patch_area_arg);
kono
parents: 67
diff changeset
2399 function_entry_patch_area_start = 0;
kono
parents: 67
diff changeset
2400 }
kono
parents: 67
diff changeset
2401 if (function_entry_patch_area_size < 0
kono
parents: 67
diff changeset
2402 || function_entry_patch_area_start < 0
kono
parents: 67
diff changeset
2403 || function_entry_patch_area_size
kono
parents: 67
diff changeset
2404 < function_entry_patch_area_start)
kono
parents: 67
diff changeset
2405 error ("invalid arguments for %<-fpatchable_function_entry%>");
kono
parents: 67
diff changeset
2406 free (patch_area_arg);
kono
parents: 67
diff changeset
2407 }
kono
parents: 67
diff changeset
2408 break;
kono
parents: 67
diff changeset
2409
kono
parents: 67
diff changeset
2410 case OPT_ftree_vectorize:
kono
parents: 67
diff changeset
2411 /* Automatically sets -ftree-loop-vectorize and
kono
parents: 67
diff changeset
2412 -ftree-slp-vectorize. Nothing more to do here. */
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2416 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2417
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2418 case OPT_frandom_seed:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2419 /* The real switch is -fno-random-seed. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2423 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2424
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2427 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2428
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2429 case OPT_fsched_verbose_:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2432 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2435 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2436
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2441 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2442
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2445 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2446
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2447 case OPT_fstack_check_:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2450 else if (!strcmp (arg, "generic"))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2453 ? FULL_BUILTIN_STACK_CHECK
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2454 : GENERIC_STACK_CHECK;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2455 else if (!strcmp (arg, "specific"))
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2458 ? FULL_BUILTIN_STACK_CHECK
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2459 : STACK_CHECK_STATIC_BUILTIN
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2460 ? STATIC_BUILTIN_STACK_CHECK
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2461 : GENERIC_STACK_CHECK;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2462 else
111
kono
parents: 67
diff changeset
2463 warning_at (loc, 0, "unknown stack check parameter %qs", arg);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2464 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2465
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2466 case OPT_fstack_limit:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2467 /* The real switch is -fno-stack-limit. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2471 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2472
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2473 case OPT_fstack_limit_register_:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2476 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2477
111
kono
parents: 67
diff changeset
2478 case OPT_fstack_usage:
kono
parents: 67
diff changeset
2479 opts->x_flag_stack_usage = value;
kono
parents: 67
diff changeset
2480 opts->x_flag_stack_usage_info = value != 0;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2481 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2482
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
2485 loc);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2486 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2487
111
kono
parents: 67
diff changeset
2488 case OPT_gdwarf:
kono
parents: 67
diff changeset
2489 if (arg && strlen (arg) != 0)
kono
parents: 67
diff changeset
2490 {
kono
parents: 67
diff changeset
2491 error_at (loc, "%<-gdwarf%s%> is ambiguous; "
kono
parents: 67
diff changeset
2492 "use %<-gdwarf-%s%> for DWARF version "
kono
parents: 67
diff changeset
2493 "or %<-gdwarf -g%s%> for debug level", arg, arg, arg);
kono
parents: 67
diff changeset
2494 break;
kono
parents: 67
diff changeset
2495 }
kono
parents: 67
diff changeset
2496 else
kono
parents: 67
diff changeset
2497 value = opts->x_dwarf_version;
kono
parents: 67
diff changeset
2498
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
2501 if (value < 2 || value > 5)
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
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
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2506 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2507
111
kono
parents: 67
diff changeset
2508 case OPT_gsplit_dwarf:
kono
parents: 67
diff changeset
2509 set_debug_level (NO_DEBUG, DEFAULT_GDB_EXTENSIONS, "", opts, opts_set,
kono
parents: 67
diff changeset
2510 loc);
kono
parents: 67
diff changeset
2511 break;
kono
parents: 67
diff changeset
2512
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2515 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2516
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2517 case OPT_gstabs:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2521 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2522
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2525 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2526
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2527 case OPT_gxcoff:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2531 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2532
111
kono
parents: 67
diff changeset
2533 case OPT_gz:
kono
parents: 67
diff changeset
2534 case OPT_gz_:
kono
parents: 67
diff changeset
2535 /* Handled completely via specs. */
kono
parents: 67
diff changeset
2536 break;
kono
parents: 67
diff changeset
2537
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
2540 control_warning_option (OPT_Wpedantic, DK_ERROR, NULL, value,
kono
parents: 67
diff changeset
2541 loc, lang_mask,
kono
parents: 67
diff changeset
2542 handlers, opts, opts_set,
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2556 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2557
111
kono
parents: 67
diff changeset
2558 case OPT_fuse_ld_bfd:
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
2564 case OPT_fwrapv:
kono
parents: 67
diff changeset
2565 if (value)
kono
parents: 67
diff changeset
2566 opts->x_flag_trapv = 0;
kono
parents: 67
diff changeset
2567 break;
kono
parents: 67
diff changeset
2568
kono
parents: 67
diff changeset
2569 case OPT_ftrapv:
kono
parents: 67
diff changeset
2570 if (value)
kono
parents: 67
diff changeset
2571 opts->x_flag_wrapv = 0;
kono
parents: 67
diff changeset
2572 break;
kono
parents: 67
diff changeset
2573
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2574 case OPT_fstrict_overflow:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2575 opts->x_flag_wrapv = !value;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2576 opts->x_flag_wrapv_pointer = !value;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2577 if (!value)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2578 opts->x_flag_trapv = 0;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2579 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2580
111
kono
parents: 67
diff changeset
2581 case OPT_fipa_icf:
kono
parents: 67
diff changeset
2582 opts->x_flag_ipa_icf_functions = value;
kono
parents: 67
diff changeset
2583 opts->x_flag_ipa_icf_variables = value;
kono
parents: 67
diff changeset
2584 break;
kono
parents: 67
diff changeset
2585
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2586 case OPT_falign_loops_:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2587 check_alignment_argument (loc, arg, "loops");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2588 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2589
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2590 case OPT_falign_jumps_:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2591 check_alignment_argument (loc, arg, "jumps");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2592 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2593
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2594 case OPT_falign_labels_:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2595 check_alignment_argument (loc, arg, "labels");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2596 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2597
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2598 case OPT_falign_functions_:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2599 check_alignment_argument (loc, arg, "functions");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2600 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2601
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2602 default:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2603 /* If the flag was handled in a standard way, assume the lack of
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2606 break;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2607 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2608
111
kono
parents: 67
diff changeset
2609 common_handle_option_auto (opts, opts_set, decoded, lang_mask, kind,
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2612 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2613
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2614 /* Handle --param NAME=VALUE. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2618 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2619 char *equal, *arg;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2620 int value;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2621
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2622 arg = xstrdup (carg);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2623 equal = strchr (arg, '=');
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2627 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2628 {
111
kono
parents: 67
diff changeset
2629 *equal = '\0';
kono
parents: 67
diff changeset
2630
kono
parents: 67
diff changeset
2631 enum compiler_param index;
kono
parents: 67
diff changeset
2632 if (!find_param (arg, &index))
kono
parents: 67
diff changeset
2633 {
kono
parents: 67
diff changeset
2634 const char *suggestion = find_param_fuzzy (arg);
kono
parents: 67
diff changeset
2635 if (suggestion)
kono
parents: 67
diff changeset
2636 error_at (loc, "invalid --param name %qs; did you mean %qs?",
kono
parents: 67
diff changeset
2637 arg, suggestion);
kono
parents: 67
diff changeset
2638 else
kono
parents: 67
diff changeset
2639 error_at (loc, "invalid --param name %qs", arg);
kono
parents: 67
diff changeset
2640 }
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2641 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2642 {
111
kono
parents: 67
diff changeset
2643 if (!param_string_value_p (index, equal + 1, &value))
kono
parents: 67
diff changeset
2644 value = integral_argument (equal + 1);
kono
parents: 67
diff changeset
2645
kono
parents: 67
diff changeset
2646 if (value == -1)
kono
parents: 67
diff changeset
2647 error_at (loc, "invalid --param value %qs", equal + 1);
kono
parents: 67
diff changeset
2648 else
kono
parents: 67
diff changeset
2649 set_param_value (arg, value,
kono
parents: 67
diff changeset
2650 opts->x_param_values, opts_set->x_param_values);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2651 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2652 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2653
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2654 free (arg);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2655 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2658 when no level is specified (i.e., when -Wstrict-aliasing, and not
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2659 -Wstrict-aliasing=level was given).
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2660 ONOFF is assumed to take value 1 when -Wstrict-aliasing is specified,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2661 and 0 otherwise. After calling this function, wstrict_aliasing will be
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2662 set to the default value of -Wstrict_aliasing=level, currently 3. */
111
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2665 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2666 gcc_assert (onoff == 0 || onoff == 1);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2671 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2672
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2673 /* The following routines are useful in setting all the flags that
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2687 if (set)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2688 {
111
kono
parents: 67
diff changeset
2689 if (opts->frontend_set_flag_excess_precision_cmdline
kono
parents: 67
diff changeset
2690 == EXCESS_PRECISION_DEFAULT)
kono
parents: 67
diff changeset
2691 opts->x_flag_excess_precision_cmdline
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2699 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2700 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2715 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
2725 && !opts->x_flag_errno_math
kono
parents: 67
diff changeset
2726 && opts->x_flag_excess_precision_cmdline
kono
parents: 67
diff changeset
2727 == EXCESS_PRECISION_FAST);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2728 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2729
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2730 /* Return true iff flags are set as if -ffast-math but using the flags stored
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2731 in the struct cl_optimization structure. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2732 bool
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2733 fast_math_flags_struct_set_p (struct cl_optimization *opt)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2740 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2745 extended output (2 is special and means "-ggdb" was given). */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2752
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2753 if (type == NO_DEBUG)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2758
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2759 if (extended == 2)
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2760 {
111
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2765 #endif
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2766 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2770 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2771 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2772 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2773 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2782 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2783
111
kono
parents: 67
diff changeset
2784 /* A debug flag without a level defaults to level 2.
kono
parents: 67
diff changeset
2785 If off or at level 1, set it to level 2, but if already
kono
parents: 67
diff changeset
2786 at level 3, don't lower it. */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2787 if (*arg == '\0')
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2788 {
111
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2791 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2792 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2801 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2802 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
2821 fatal_error (input_location,
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2826 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2870 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2883 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2884 char *new_option;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2885 int option_index;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2886
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2887 new_option = XNEWVEC (char, strlen (arg) + 2);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2888 new_option[0] = 'W';
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2889 strcpy (new_option + 1, arg);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
2892 error_at (loc, "-Werror=%s: no option -%s", arg, new_option);
kono
parents: 67
diff changeset
2893 else if (!(cl_options[option_index].flags & CL_WARNING))
kono
parents: 67
diff changeset
2894 error_at (loc, "-Werror=%s: -%s is not an option that controls warnings",
kono
parents: 67
diff changeset
2895 arg, new_option);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2896 else
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
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
kono
parents: 67
diff changeset
2901 if (cl_options[option_index].flags & CL_JOINED)
kono
parents: 67
diff changeset
2902 arg = new_option + cl_options[option_index].opt_len;
kono
parents: 67
diff changeset
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
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2906 }
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2907 free (new_option);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
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
kono
parents: 67
diff changeset
2933 else if ((orig_diag_kind == DK_WARNING || orig_diag_kind == DK_PEDWARN
kono
parents: 67
diff changeset
2934 || diag_kind == DK_WARNING)
kono
parents: 67
diff changeset
2935 && context->warning_as_error_requested)
kono
parents: 67
diff changeset
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 }