annotate gcc/c-family/c-opts.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 /* C/ObjC/C++ command line option handling.
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 Copyright (C) 2002-2020 Free Software Foundation, Inc.
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 Contributed by Neil Booth.
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 This file is part of GCC.
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 GCC is free software; you can redistribute it and/or modify it under
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 the terms of the GNU General Public License as published by the Free
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 Software Foundation; either version 3, or (at your option) any later
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 version.
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 for more details.
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 along with GCC; see the file COPYING3. If not see
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 <http://www.gnu.org/licenses/>. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 #include "config.h"
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 #include "system.h"
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 #include "coretypes.h"
111
kono
parents: 68
diff changeset
24 #include "tm.h"
kono
parents: 68
diff changeset
25 #include "c-target.h"
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 #include "c-common.h"
111
kono
parents: 68
diff changeset
27 #include "memmodel.h"
kono
parents: 68
diff changeset
28 #include "tm_p.h" /* For C_COMMON_OVERRIDE_OPTIONS. */
kono
parents: 68
diff changeset
29 #include "diagnostic.h"
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 #include "c-pragma.h"
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 #include "flags.h"
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 #include "toplev.h"
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 #include "langhooks.h"
111
kono
parents: 68
diff changeset
34 #include "tree-diagnostic.h" /* for virt_loc_aware_diagnostic_finalizer */
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 #include "intl.h"
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 #include "cppdefault.h"
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 #include "incpath.h"
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 #include "debug.h" /* For debug_hooks. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 #include "opts.h"
111
kono
parents: 68
diff changeset
40 #include "plugin.h" /* For PLUGIN_INCLUDE_FILE event. */
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 #include "mkdeps.h"
111
kono
parents: 68
diff changeset
42 #include "dumpfile.h"
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
43 #include "file-prefix-map.h" /* add_*_prefix_map() */
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 #ifndef DOLLARS_IN_IDENTIFIERS
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 # define DOLLARS_IN_IDENTIFIERS true
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 #endif
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 #ifndef TARGET_SYSTEM_ROOT
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 # define TARGET_SYSTEM_ROOT NULL
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 #endif
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 #ifndef TARGET_OPTF
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 #define TARGET_OPTF(ARG)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 #endif
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 /* CPP's options. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 cpp_options *cpp_opts;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 /* Input filename. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 static const char *this_input_filename;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 /* Filename and stream for preprocessed output. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 static const char *out_fname;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 static FILE *out_stream;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 /* Append dependencies to deps_file. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 static bool deps_append;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 /* If dependency switches (-MF etc.) have been given. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 static bool deps_seen;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 /* If -v seen. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 static bool verbose;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 /* Dependency output file. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 static const char *deps_file;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 /* The prefix given by -iprefix, if any. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 static const char *iprefix;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 /* The multilib directory given by -imultilib, if any. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 static const char *imultilib;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 /* The system root, if any. Overridden by -isysroot. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 static const char *sysroot = TARGET_SYSTEM_ROOT;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 /* Zero disables all standard directories for headers. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 static bool std_inc = true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 /* Zero disables the C++-specific standard directories for headers. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 static bool std_cxx_inc = true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 /* If the quote chain has been split by -I-. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 static bool quote_chain_split;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 /* Number of deferred options. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 static size_t deferred_count;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
99
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 /* Number of deferred options scanned for -include. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 static size_t include_cursor;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102
111
kono
parents: 68
diff changeset
103 /* Dump files/flags to use during parsing. */
kono
parents: 68
diff changeset
104 static FILE *original_dump_file = NULL;
kono
parents: 68
diff changeset
105 static dump_flags_t original_dump_flags;
kono
parents: 68
diff changeset
106
kono
parents: 68
diff changeset
107 /* Whether any standard preincluded header has been preincluded. */
kono
parents: 68
diff changeset
108 static bool done_preinclude;
kono
parents: 68
diff changeset
109
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 static void handle_OPT_d (const char *);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 static void set_std_cxx98 (int);
111
kono
parents: 68
diff changeset
112 static void set_std_cxx11 (int);
kono
parents: 68
diff changeset
113 static void set_std_cxx14 (int);
kono
parents: 68
diff changeset
114 static void set_std_cxx17 (int);
kono
parents: 68
diff changeset
115 static void set_std_cxx2a (int);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 static void set_std_c89 (int, int);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 static void set_std_c99 (int);
111
kono
parents: 68
diff changeset
118 static void set_std_c11 (int);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
119 static void set_std_c17 (int);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
120 static void set_std_c2x (int);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 static void check_deps_environment_vars (void);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 static void handle_deferred_opts (void);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 static void sanitize_cpp_opts (void);
111
kono
parents: 68
diff changeset
124 static void add_prefixed_path (const char *, incpath_kind);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 static void push_command_line_include (void);
111
kono
parents: 68
diff changeset
126 static void cb_file_change (cpp_reader *, const line_map_ordinary *);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 static void cb_dir_change (cpp_reader *, const char *);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 static void c_finish_options (void);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
129
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 #ifndef STDC_0_IN_SYSTEM_HEADERS
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 #define STDC_0_IN_SYSTEM_HEADERS 0
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 #endif
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
133
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 /* Holds switches parsed by c_common_handle_option (), but whose
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 handling is deferred to c_common_post_options (). */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 static void defer_opt (enum opt_code, const char *);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 static struct deferred_opt
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 enum opt_code code;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 const char *arg;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 } *deferred_opts;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
142
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
143
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 extern const unsigned int
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 c_family_lang_mask = (CL_C | CL_CXX | CL_ObjC | CL_ObjCXX);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
146
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 /* Defer option CODE with argument ARG. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 static void
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 defer_opt (enum opt_code code, const char *arg)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 deferred_opts[deferred_count].code = code;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 deferred_opts[deferred_count].arg = arg;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 deferred_count++;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
155
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 /* Return language mask for option parsing. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 unsigned int
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 c_common_option_lang_mask (void)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 static const unsigned int lang_flags[] = {CL_C, CL_ObjC, CL_CXX, CL_ObjCXX};
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
161
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 return lang_flags[c_language];
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
164
111
kono
parents: 68
diff changeset
165 /* Diagnostic finalizer for C/C++/Objective-C/Objective-C++. */
kono
parents: 68
diff changeset
166 static void
kono
parents: 68
diff changeset
167 c_diagnostic_finalizer (diagnostic_context *context,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
168 diagnostic_info *diagnostic,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
169 diagnostic_t)
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
171 char *saved_prefix = pp_take_prefix (context->printer);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
172 pp_set_prefix (context->printer, NULL);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
173 pp_newline (context->printer);
111
kono
parents: 68
diff changeset
174 diagnostic_show_locus (context, diagnostic->richloc, diagnostic->kind);
kono
parents: 68
diff changeset
175 /* By default print macro expansion contexts in the diagnostic
kono
parents: 68
diff changeset
176 finalizer -- for tokens resulting from macro expansion. */
kono
parents: 68
diff changeset
177 virt_loc_aware_diagnostic_finalizer (context, diagnostic);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
178 pp_set_prefix (context->printer, saved_prefix);
111
kono
parents: 68
diff changeset
179 pp_flush (context->printer);
kono
parents: 68
diff changeset
180 }
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
181
111
kono
parents: 68
diff changeset
182 /* Common default settings for diagnostics. */
kono
parents: 68
diff changeset
183 void
kono
parents: 68
diff changeset
184 c_common_diagnostics_set_defaults (diagnostic_context *context)
kono
parents: 68
diff changeset
185 {
kono
parents: 68
diff changeset
186 diagnostic_finalizer (context) = c_diagnostic_finalizer;
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 context->opt_permissive = OPT_fpermissive;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
189
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 /* Whether options from all C-family languages should be accepted
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 quietly. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 static bool accept_all_c_family_options = false;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
193
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 /* Return whether to complain about a wrong-language option. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 bool
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 c_common_complain_wrong_lang_p (const struct cl_option *option)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 if (accept_all_c_family_options
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 && (option->flags & c_family_lang_mask))
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 return false;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
201
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 return true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
204
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 /* Initialize options structure OPTS. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 void
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 c_common_init_options_struct (struct gcc_options *opts)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 opts->x_flag_exceptions = c_dialect_cxx ();
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 opts->x_warn_pointer_arith = c_dialect_cxx ();
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 opts->x_warn_write_strings = c_dialect_cxx ();
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 opts->x_flag_warn_unused_result = true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
213
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 /* By default, C99-like requirements for complex multiply and divide. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 opts->x_flag_complex_method = 2;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
217
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 /* Common initialization before calling option handlers. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 void
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 c_common_init_options (unsigned int decoded_options_count,
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 struct cl_decoded_option *decoded_options)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 unsigned int i;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 struct cpp_callbacks *cb;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
225
111
kono
parents: 68
diff changeset
226 g_string_concat_db
kono
parents: 68
diff changeset
227 = new (ggc_alloc <string_concat_db> ()) string_concat_db ();
kono
parents: 68
diff changeset
228
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 parse_in = cpp_create_reader (c_dialect_cxx () ? CLK_GNUCXX: CLK_GNUC89,
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 ident_hash, line_table);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 cb = cpp_get_callbacks (parse_in);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
232 cb->diagnostic = c_cpp_diagnostic;
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
233
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 cpp_opts = cpp_get_options (parse_in);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 cpp_opts->dollars_in_ident = DOLLARS_IN_IDENTIFIERS;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 cpp_opts->objc = c_dialect_objc ();
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
237
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 /* Reset to avoid warnings on internal definitions. We set it just
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 before passing on command-line options to cpplib. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 cpp_opts->warn_dollars = 0;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
241
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 deferred_opts = XNEWVEC (struct deferred_opt, decoded_options_count);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
243
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 if (c_language == clk_c)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
246 /* The default for C is gnu17. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
247 set_std_c17 (false /* ISO */);
111
kono
parents: 68
diff changeset
248
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 /* If preprocessing assembly language, accept any of the C-family
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 front end options since the driver may pass them through. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 for (i = 1; i < decoded_options_count; i++)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 if (decoded_options[i].opt_index == OPT_lang_asm)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 accept_all_c_family_options = true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 }
111
kono
parents: 68
diff changeset
258
kono
parents: 68
diff changeset
259 /* Set C++ standard to C++14 if not specified on the command line. */
kono
parents: 68
diff changeset
260 if (c_dialect_cxx ())
kono
parents: 68
diff changeset
261 set_std_cxx14 (/*ISO*/false);
kono
parents: 68
diff changeset
262
kono
parents: 68
diff changeset
263 global_dc->colorize_source_p = true;
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
265
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 /* Handle switch SCODE with argument ARG. VALUE is true, unless no-
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
267 form of an -f or -W option was given. Returns false if the switch was
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
268 invalid, true if valid. Use HANDLERS in recursive handle_option calls. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
269 bool
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
270 c_common_handle_option (size_t scode, const char *arg, HOST_WIDE_INT value,
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
271 int kind, location_t loc,
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
272 const struct cl_option_handlers *handlers)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
273 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
274 const struct cl_option *option = &cl_options[scode];
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
275 enum opt_code code = (enum opt_code) scode;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
276 bool result = true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
277
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
278 /* Prevent resetting the language standard to a C dialect when the driver
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
279 has already determined that we're looking at assembler input. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
280 bool preprocessing_asm_p = (cpp_get_options (parse_in)->lang == CLK_ASM);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
281
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
282 switch (code)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 default:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
285 if (cl_options[code].flags & c_family_lang_mask)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
286 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
287 if ((option->flags & CL_TARGET)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
288 && ! targetcm.handle_c_option (scode, arg, value))
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 result = false;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
290 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
291 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 result = false;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
294
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
295 case OPT__output_pch_:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
296 pch_file = arg;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
297 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
298
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
299 case OPT_A:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
300 defer_opt (code, arg);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
301 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
302
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
303 case OPT_C:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
304 cpp_opts->discard_comments = 0;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
305 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
306
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
307 case OPT_CC:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
308 cpp_opts->discard_comments = 0;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
309 cpp_opts->discard_comments_in_macro_exp = 0;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
310 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
311
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
312 case OPT_D:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
313 defer_opt (code, arg);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
314 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
315
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
316 case OPT_H:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
317 cpp_opts->print_include_names = 1;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
318 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
319
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
320 case OPT_F:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
321 TARGET_OPTF (xstrdup (arg));
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
322 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
323
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
324 case OPT_I:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
325 if (strcmp (arg, "-"))
111
kono
parents: 68
diff changeset
326 add_path (xstrdup (arg), INC_BRACKET, 0, true);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
327 else
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
328 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
329 if (quote_chain_split)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
330 error ("%<-I-%> specified twice");
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
331 quote_chain_split = true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
332 split_quote_chain ();
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
333 inform (input_location, "obsolete option %<-I-%> used, "
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
334 "please use %<-iquote%> instead");
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
335 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
336 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
337
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
338 case OPT_M:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
339 case OPT_MM:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
340 /* When doing dependencies with -M or -MM, suppress normal
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
341 preprocessed output, but still do -dM etc. as software
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
342 depends on this. Preprocessed output does occur if -MD, -MMD
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
343 or environment var dependency generation is used. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
344 cpp_opts->deps.style = (code == OPT_M ? DEPS_SYSTEM: DEPS_USER);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
345 flag_no_output = 1;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
346 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
347
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
348 case OPT_MD:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
349 case OPT_MMD:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
350 cpp_opts->deps.style = (code == OPT_MD ? DEPS_SYSTEM: DEPS_USER);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
351 cpp_opts->deps.need_preprocessor_output = true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
352 deps_file = arg;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
353 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
354
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
355 case OPT_MF:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
356 deps_seen = true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
357 deps_file = arg;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
358 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
359
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
360 case OPT_MG:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
361 deps_seen = true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
362 cpp_opts->deps.missing_files = true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
363 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
364
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
365 case OPT_MP:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
366 deps_seen = true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
367 cpp_opts->deps.phony_targets = true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
368 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
369
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
370 case OPT_MQ:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
371 case OPT_MT:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
372 deps_seen = true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
373 defer_opt (code, arg);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
374 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
375
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
376 case OPT_P:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
377 flag_no_line_commands = 1;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
378 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
379
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
380 case OPT_U:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
381 defer_opt (code, arg);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
382 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
383
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
384 case OPT_Wall:
111
kono
parents: 68
diff changeset
385 /* ??? Don't add new options here. Use LangEnabledBy in c.opt. */
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
386
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
387 cpp_opts->warn_num_sign_change = value;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
388 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
389
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
390 case OPT_Wunknown_pragmas:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
391 /* Set to greater than 1, so that even unknown pragmas in
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
392 system headers will be warned about. */
111
kono
parents: 68
diff changeset
393 /* ??? There is no way to handle this automatically for now. */
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
394 warn_unknown_pragmas = value * 2;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
395 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
396
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
397 case OPT_ansi:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
398 if (!c_dialect_cxx ())
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
399 set_std_c89 (false, true);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
400 else
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
401 set_std_cxx98 (true);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
402 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
403
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
404 case OPT_d:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
405 handle_OPT_d (arg);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
406 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
407
111
kono
parents: 68
diff changeset
408 case OPT_Wabi_:
kono
parents: 68
diff changeset
409 warn_abi = true;
kono
parents: 68
diff changeset
410 if (value == 1)
kono
parents: 68
diff changeset
411 {
kono
parents: 68
diff changeset
412 warning (0, "%<-Wabi=1%> is not supported, using =2");
kono
parents: 68
diff changeset
413 value = 2;
kono
parents: 68
diff changeset
414 }
kono
parents: 68
diff changeset
415 warn_abi_version = value;
kono
parents: 68
diff changeset
416 break;
kono
parents: 68
diff changeset
417
kono
parents: 68
diff changeset
418 case OPT_fcanonical_system_headers:
kono
parents: 68
diff changeset
419 cpp_opts->canonical_system_headers = value;
kono
parents: 68
diff changeset
420 break;
kono
parents: 68
diff changeset
421
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
422 case OPT_fcond_mismatch:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
423 if (!c_dialect_cxx ())
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
424 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
425 flag_cond_mismatch = value;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
426 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
427 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
428 warning (0, "switch %qs is no longer supported", option->opt_text);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
429 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
430
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
431 case OPT_fbuiltin_:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
432 if (value)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
433 result = false;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
434 else
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
435 disable_builtin_function (arg);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
436 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
437
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
438 case OPT_fdirectives_only:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
439 cpp_opts->directives_only = value;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
440 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
441
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
442 case OPT_fdollars_in_identifiers:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
443 cpp_opts->dollars_in_ident = value;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
444 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
445
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
446 case OPT_fmacro_prefix_map_:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
447 add_macro_prefix_map (arg);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
448 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
449
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
450 case OPT_ffreestanding:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
451 value = !value;
111
kono
parents: 68
diff changeset
452 /* Fall through. */
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
453 case OPT_fhosted:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
454 flag_hosted = value;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
455 flag_no_builtin = !value;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
456 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
457
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
458 case OPT_fconstant_string_class_:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
459 constant_string_class_name = arg;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
460 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
461
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
462 case OPT_fextended_identifiers:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
463 cpp_opts->extended_identifiers = value;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
464 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
465
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
466 case OPT_fmax_include_depth_:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
467 cpp_opts->max_include_depth = value;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
468 break;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
469
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
470 case OPT_foperator_names:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
471 cpp_opts->operator_names = value;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
472 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
473
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
474 case OPT_fpch_deps:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
475 cpp_opts->restore_pch_deps = value;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
476 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
477
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
478 case OPT_fpch_preprocess:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
479 flag_pch_preprocess = value;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
480 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
481
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
482 case OPT_fpermissive:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
483 flag_permissive = value;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
484 global_dc->permissive = value;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
485 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
486
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
487 case OPT_fpreprocessed:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
488 cpp_opts->preprocessed = value;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
489 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
490
111
kono
parents: 68
diff changeset
491 case OPT_fdebug_cpp:
kono
parents: 68
diff changeset
492 cpp_opts->debug = 1;
kono
parents: 68
diff changeset
493 break;
kono
parents: 68
diff changeset
494
kono
parents: 68
diff changeset
495 case OPT_ftrack_macro_expansion:
kono
parents: 68
diff changeset
496 if (value)
kono
parents: 68
diff changeset
497 value = 2;
kono
parents: 68
diff changeset
498 /* Fall Through. */
kono
parents: 68
diff changeset
499
kono
parents: 68
diff changeset
500 case OPT_ftrack_macro_expansion_:
kono
parents: 68
diff changeset
501 if (arg && *arg != '\0')
kono
parents: 68
diff changeset
502 cpp_opts->track_macro_expansion = value;
kono
parents: 68
diff changeset
503 else
kono
parents: 68
diff changeset
504 cpp_opts->track_macro_expansion = 2;
kono
parents: 68
diff changeset
505 break;
kono
parents: 68
diff changeset
506
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
507 case OPT_ftabstop_:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
508 /* It is documented that we silently ignore silly values. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
509 if (value >= 1 && value <= 100)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
510 cpp_opts->tabstop = value;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
511 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
512
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
513 case OPT_fexec_charset_:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
514 cpp_opts->narrow_charset = arg;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
515 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
516
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
517 case OPT_fwide_exec_charset_:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
518 cpp_opts->wide_charset = arg;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
519 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
520
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
521 case OPT_finput_charset_:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
522 cpp_opts->input_charset = arg;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
523 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
524
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
525 case OPT_ftemplate_depth_:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
526 max_tinst_depth = value;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
527 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
528
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
529 case OPT_fvisibility_inlines_hidden:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
530 visibility_options.inlines_hidden = value;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
531 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
532
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
533 case OPT_femit_struct_debug_baseonly:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
534 set_struct_debug_option (&global_options, loc, "base");
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
535 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
536
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
537 case OPT_femit_struct_debug_reduced:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
538 set_struct_debug_option (&global_options, loc,
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
539 "dir:ord:sys,dir:gen:any,ind:base");
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
540 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
541
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
542 case OPT_femit_struct_debug_detailed_:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
543 set_struct_debug_option (&global_options, loc, arg);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
544 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
545
111
kono
parents: 68
diff changeset
546 case OPT_fext_numeric_literals:
kono
parents: 68
diff changeset
547 cpp_opts->ext_numeric_literals = value;
kono
parents: 68
diff changeset
548 break;
kono
parents: 68
diff changeset
549
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
550 case OPT_idirafter:
111
kono
parents: 68
diff changeset
551 add_path (xstrdup (arg), INC_AFTER, 0, true);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
552 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
553
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
554 case OPT_imacros:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
555 case OPT_include:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
556 defer_opt (code, arg);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
557 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
558
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
559 case OPT_imultilib:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
560 imultilib = arg;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
561 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
562
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
563 case OPT_iprefix:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
564 iprefix = arg;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
565 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
566
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
567 case OPT_iquote:
111
kono
parents: 68
diff changeset
568 add_path (xstrdup (arg), INC_QUOTE, 0, true);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
569 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
570
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
571 case OPT_isysroot:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
572 sysroot = arg;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
573 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
574
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
575 case OPT_isystem:
111
kono
parents: 68
diff changeset
576 add_path (xstrdup (arg), INC_SYSTEM, 0, true);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
577 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
578
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
579 case OPT_iwithprefix:
111
kono
parents: 68
diff changeset
580 add_prefixed_path (arg, INC_SYSTEM);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
581 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
582
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
583 case OPT_iwithprefixbefore:
111
kono
parents: 68
diff changeset
584 add_prefixed_path (arg, INC_BRACKET);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
585 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
586
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
587 case OPT_lang_asm:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
588 cpp_set_lang (parse_in, CLK_ASM);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
589 cpp_opts->dollars_in_ident = false;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
590 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
591
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
592 case OPT_nostdinc:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
593 std_inc = false;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
594 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
595
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
596 case OPT_nostdinc__:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
597 std_cxx_inc = false;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
598 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
599
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
600 case OPT_o:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
601 if (!out_fname)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
602 out_fname = arg;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
603 else
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
604 error ("output filename specified twice");
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
605 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
606
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
607 case OPT_print_objc_runtime_info:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
608 print_struct_values = 1;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
609 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
610
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
611 case OPT_remap:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
612 cpp_opts->remap = 1;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
613 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
614
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
615 case OPT_std_c__98:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
616 case OPT_std_gnu__98:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
617 if (!preprocessing_asm_p)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
618 set_std_cxx98 (code == OPT_std_c__98 /* ISO */);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
619 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
620
111
kono
parents: 68
diff changeset
621 case OPT_std_c__11:
kono
parents: 68
diff changeset
622 case OPT_std_gnu__11:
kono
parents: 68
diff changeset
623 if (!preprocessing_asm_p)
kono
parents: 68
diff changeset
624 set_std_cxx11 (code == OPT_std_c__11 /* ISO */);
kono
parents: 68
diff changeset
625 break;
kono
parents: 68
diff changeset
626
kono
parents: 68
diff changeset
627 case OPT_std_c__14:
kono
parents: 68
diff changeset
628 case OPT_std_gnu__14:
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
629 if (!preprocessing_asm_p)
111
kono
parents: 68
diff changeset
630 set_std_cxx14 (code == OPT_std_c__14 /* ISO */);
kono
parents: 68
diff changeset
631 break;
kono
parents: 68
diff changeset
632
kono
parents: 68
diff changeset
633 case OPT_std_c__17:
kono
parents: 68
diff changeset
634 case OPT_std_gnu__17:
kono
parents: 68
diff changeset
635 if (!preprocessing_asm_p)
kono
parents: 68
diff changeset
636 set_std_cxx17 (code == OPT_std_c__17 /* ISO */);
kono
parents: 68
diff changeset
637 break;
kono
parents: 68
diff changeset
638
kono
parents: 68
diff changeset
639 case OPT_std_c__2a:
kono
parents: 68
diff changeset
640 case OPT_std_gnu__2a:
kono
parents: 68
diff changeset
641 if (!preprocessing_asm_p)
kono
parents: 68
diff changeset
642 set_std_cxx2a (code == OPT_std_c__2a /* ISO */);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
643 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
644
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
645 case OPT_std_c90:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
646 case OPT_std_iso9899_199409:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
647 if (!preprocessing_asm_p)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
648 set_std_c89 (code == OPT_std_iso9899_199409 /* c94 */, true /* ISO */);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
649 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
650
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
651 case OPT_std_gnu90:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
652 if (!preprocessing_asm_p)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
653 set_std_c89 (false /* c94 */, false /* ISO */);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
654 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
655
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
656 case OPT_std_c99:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
657 if (!preprocessing_asm_p)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
658 set_std_c99 (true /* ISO */);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
659 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
660
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
661 case OPT_std_gnu99:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
662 if (!preprocessing_asm_p)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
663 set_std_c99 (false /* ISO */);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
664 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
665
111
kono
parents: 68
diff changeset
666 case OPT_std_c11:
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
667 if (!preprocessing_asm_p)
111
kono
parents: 68
diff changeset
668 set_std_c11 (true /* ISO */);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
669 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
670
111
kono
parents: 68
diff changeset
671 case OPT_std_gnu11:
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
672 if (!preprocessing_asm_p)
111
kono
parents: 68
diff changeset
673 set_std_c11 (false /* ISO */);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
674 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
675
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
676 case OPT_std_c17:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
677 if (!preprocessing_asm_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
678 set_std_c17 (true /* ISO */);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
679 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
680
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
681 case OPT_std_gnu17:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
682 if (!preprocessing_asm_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
683 set_std_c17 (false /* ISO */);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
684 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
685
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
686 case OPT_std_c2x:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
687 if (!preprocessing_asm_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
688 set_std_c2x (true /* ISO */);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
689 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
690
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
691 case OPT_std_gnu2x:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
692 if (!preprocessing_asm_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
693 set_std_c2x (false /* ISO */);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
694 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
695
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
696 case OPT_trigraphs:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
697 cpp_opts->trigraphs = 1;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
698 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
699
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
700 case OPT_traditional_cpp:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
701 cpp_opts->traditional = 1;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
702 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
703
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
704 case OPT_v:
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
705 verbose = true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
706 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
707 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
708
111
kono
parents: 68
diff changeset
709 switch (c_language)
kono
parents: 68
diff changeset
710 {
kono
parents: 68
diff changeset
711 case clk_c:
kono
parents: 68
diff changeset
712 C_handle_option_auto (&global_options, &global_options_set,
kono
parents: 68
diff changeset
713 scode, arg, value,
kono
parents: 68
diff changeset
714 c_family_lang_mask, kind,
kono
parents: 68
diff changeset
715 loc, handlers, global_dc);
kono
parents: 68
diff changeset
716 break;
kono
parents: 68
diff changeset
717
kono
parents: 68
diff changeset
718 case clk_objc:
kono
parents: 68
diff changeset
719 ObjC_handle_option_auto (&global_options, &global_options_set,
kono
parents: 68
diff changeset
720 scode, arg, value,
kono
parents: 68
diff changeset
721 c_family_lang_mask, kind,
kono
parents: 68
diff changeset
722 loc, handlers, global_dc);
kono
parents: 68
diff changeset
723 break;
kono
parents: 68
diff changeset
724
kono
parents: 68
diff changeset
725 case clk_cxx:
kono
parents: 68
diff changeset
726 CXX_handle_option_auto (&global_options, &global_options_set,
kono
parents: 68
diff changeset
727 scode, arg, value,
kono
parents: 68
diff changeset
728 c_family_lang_mask, kind,
kono
parents: 68
diff changeset
729 loc, handlers, global_dc);
kono
parents: 68
diff changeset
730 break;
kono
parents: 68
diff changeset
731
kono
parents: 68
diff changeset
732 case clk_objcxx:
kono
parents: 68
diff changeset
733 ObjCXX_handle_option_auto (&global_options, &global_options_set,
kono
parents: 68
diff changeset
734 scode, arg, value,
kono
parents: 68
diff changeset
735 c_family_lang_mask, kind,
kono
parents: 68
diff changeset
736 loc, handlers, global_dc);
kono
parents: 68
diff changeset
737 break;
kono
parents: 68
diff changeset
738
kono
parents: 68
diff changeset
739 default:
kono
parents: 68
diff changeset
740 gcc_unreachable ();
kono
parents: 68
diff changeset
741 }
kono
parents: 68
diff changeset
742
kono
parents: 68
diff changeset
743 cpp_handle_option_auto (&global_options, scode, cpp_opts);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
744 return result;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
745 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
746
111
kono
parents: 68
diff changeset
747 /* Default implementation of TARGET_HANDLE_C_OPTION. */
kono
parents: 68
diff changeset
748
kono
parents: 68
diff changeset
749 bool
kono
parents: 68
diff changeset
750 default_handle_c_option (size_t code ATTRIBUTE_UNUSED,
kono
parents: 68
diff changeset
751 const char *arg ATTRIBUTE_UNUSED,
kono
parents: 68
diff changeset
752 int value ATTRIBUTE_UNUSED)
kono
parents: 68
diff changeset
753 {
kono
parents: 68
diff changeset
754 return false;
kono
parents: 68
diff changeset
755 }
kono
parents: 68
diff changeset
756
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
757 /* Post-switch processing. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
758 bool
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
759 c_common_post_options (const char **pfilename)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
760 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
761 struct cpp_callbacks *cb;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
762
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
763 /* Canonicalize the input and output filenames. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
764 if (in_fnames == NULL)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
765 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
766 in_fnames = XNEWVEC (const char *, 1);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
767 in_fnames[0] = "";
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
768 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
769 else if (strcmp (in_fnames[0], "-") == 0)
111
kono
parents: 68
diff changeset
770 {
kono
parents: 68
diff changeset
771 if (pch_file)
kono
parents: 68
diff changeset
772 error ("cannot use %<-%> as input filename for a precompiled header");
kono
parents: 68
diff changeset
773
kono
parents: 68
diff changeset
774 in_fnames[0] = "";
kono
parents: 68
diff changeset
775 }
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
776
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
777 if (out_fname == NULL || !strcmp (out_fname, "-"))
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
778 out_fname = "";
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
779
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
780 if (cpp_opts->deps.style == DEPS_NONE)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
781 check_deps_environment_vars ();
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
782
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
783 handle_deferred_opts ();
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
784
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
785 sanitize_cpp_opts ();
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
786
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
787 register_include_chains (parse_in, sysroot, iprefix, imultilib,
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
788 std_inc, std_cxx_inc && c_dialect_cxx (), verbose);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
789
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
790 #ifdef C_COMMON_OVERRIDE_OPTIONS
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
791 /* Some machines may reject certain combinations of C
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
792 language-specific options. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
793 C_COMMON_OVERRIDE_OPTIONS;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
794 #endif
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
795
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
796 /* Excess precision other than "fast" requires front-end
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
797 support. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
798 if (c_dialect_cxx ())
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
799 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
800 if (flag_excess_precision == EXCESS_PRECISION_STANDARD)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
801 sorry ("%<-fexcess-precision=standard%> for C++");
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
802 flag_excess_precision = EXCESS_PRECISION_FAST;
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
803 }
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
804 else if (flag_excess_precision == EXCESS_PRECISION_DEFAULT)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
805 flag_excess_precision = (flag_iso ? EXCESS_PRECISION_STANDARD
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
806 : EXCESS_PRECISION_FAST);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
807
111
kono
parents: 68
diff changeset
808 /* ISO C restricts floating-point expression contraction to within
kono
parents: 68
diff changeset
809 source-language expressions (-ffp-contract=on, currently an alias
kono
parents: 68
diff changeset
810 for -ffp-contract=off). */
kono
parents: 68
diff changeset
811 if (flag_iso
kono
parents: 68
diff changeset
812 && !c_dialect_cxx ()
kono
parents: 68
diff changeset
813 && (global_options_set.x_flag_fp_contract_mode
kono
parents: 68
diff changeset
814 == (enum fp_contract_mode) 0)
kono
parents: 68
diff changeset
815 && flag_unsafe_math_optimizations == 0)
kono
parents: 68
diff changeset
816 flag_fp_contract_mode = FP_CONTRACT_OFF;
kono
parents: 68
diff changeset
817
kono
parents: 68
diff changeset
818 /* If we are compiling C, and we are outside of a standards mode,
kono
parents: 68
diff changeset
819 we can permit the new values from ISO/IEC TS 18661-3 for
kono
parents: 68
diff changeset
820 FLT_EVAL_METHOD. Otherwise, we must restrict the possible values to
kono
parents: 68
diff changeset
821 the set specified in ISO C99/C11. */
kono
parents: 68
diff changeset
822 if (!flag_iso
kono
parents: 68
diff changeset
823 && !c_dialect_cxx ()
kono
parents: 68
diff changeset
824 && (global_options_set.x_flag_permitted_flt_eval_methods
kono
parents: 68
diff changeset
825 == PERMITTED_FLT_EVAL_METHODS_DEFAULT))
kono
parents: 68
diff changeset
826 flag_permitted_flt_eval_methods = PERMITTED_FLT_EVAL_METHODS_TS_18661;
kono
parents: 68
diff changeset
827 else
kono
parents: 68
diff changeset
828 flag_permitted_flt_eval_methods = PERMITTED_FLT_EVAL_METHODS_C11;
kono
parents: 68
diff changeset
829
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
830 /* C2X Annex F does not permit certain built-in functions to raise
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
831 "inexact". */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
832 if (flag_isoc2x)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
833 SET_OPTION_IF_UNSET (&global_options, &global_options_set,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
834 flag_fp_int_builtin_inexact, 0);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
835
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
836 /* By default we use C99 inline semantics in GNU99 or C99 mode. C99
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
837 inline semantics are not supported in GNU89 or C89 mode. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
838 if (flag_gnu89_inline == -1)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
839 flag_gnu89_inline = !flag_isoc99;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
840 else if (!flag_gnu89_inline && !flag_isoc99)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
841 error ("%<-fno-gnu89-inline%> is only supported in GNU99 or C99 mode");
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
842
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
843 /* Default to ObjC sjlj exception handling if NeXT runtime. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
844 if (flag_objc_sjlj_exceptions < 0)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
845 flag_objc_sjlj_exceptions = flag_next_runtime;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
846 if (flag_objc_exceptions && !flag_objc_sjlj_exceptions)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
847 flag_exceptions = 1;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
848
111
kono
parents: 68
diff changeset
849 /* If -ffreestanding, -fno-hosted or -fno-builtin then disable
kono
parents: 68
diff changeset
850 pattern recognition. */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
851 if (flag_no_builtin)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
852 SET_OPTION_IF_UNSET (&global_options, &global_options_set,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
853 flag_tree_loop_distribute_patterns, 0);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
854
111
kono
parents: 68
diff changeset
855 /* -Woverlength-strings is off by default, but is enabled by -Wpedantic.
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
856 It is never enabled in C++, as the minimum limit is not normative
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
857 in that standard. */
111
kono
parents: 68
diff changeset
858 if (c_dialect_cxx ())
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
859 warn_overlength_strings = 0;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
860
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
861 /* Wmain is enabled by default in C++ but not in C. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
862 /* Wmain is disabled by default for -ffreestanding (!flag_hosted),
111
kono
parents: 68
diff changeset
863 even if -Wall or -Wpedantic was given (warn_main will be 2 if set
kono
parents: 68
diff changeset
864 by -Wall, 1 if set by -Wmain). */
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
865 if (warn_main == -1)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
866 warn_main = (c_dialect_cxx () && flag_hosted) ? 1 : 0;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
867 else if (warn_main == 2)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
868 warn_main = flag_hosted ? 1 : 0;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
869
111
kono
parents: 68
diff changeset
870 /* In C, -Wall and -Wc++-compat enable -Wenum-compare; if it has not
kono
parents: 68
diff changeset
871 yet been set, it is disabled by default. In C++, it is enabled
kono
parents: 68
diff changeset
872 by default. */
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
873 if (warn_enum_compare == -1)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
874 warn_enum_compare = c_dialect_cxx () ? 1 : 0;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
875
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
876 /* -Wpacked-bitfield-compat is on by default for the C languages. The
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
877 warning is issued in stor-layout.c which is not part of the front-end so
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
878 we need to selectively turn it on here. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
879 if (warn_packed_bitfield_compat == -1)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
880 warn_packed_bitfield_compat = 1;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
881
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
882 /* Special format checking options don't work without -Wformat; warn if
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
883 they are used. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
884 if (!warn_format)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
885 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
886 warning (OPT_Wformat_y2k,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
887 "%<-Wformat-y2k%> ignored without %<-Wformat%>");
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
888 warning (OPT_Wformat_extra_args,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
889 "%<-Wformat-extra-args%> ignored without %<-Wformat%>");
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
890 warning (OPT_Wformat_zero_length,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
891 "%<-Wformat-zero-length%> ignored without %<-Wformat%>");
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
892 warning (OPT_Wformat_nonliteral,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
893 "%<-Wformat-nonliteral%> ignored without %<-Wformat%>");
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
894 warning (OPT_Wformat_contains_nul,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
895 "%<-Wformat-contains-nul%> ignored without %<-Wformat%>");
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
896 warning (OPT_Wformat_security,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
897 "%<-Wformat-security%> ignored without %<-Wformat%>");
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
898 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
899
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
900 /* -Wimplicit-function-declaration is enabled by default for C99. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
901 if (warn_implicit_function_declaration == -1)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
902 warn_implicit_function_declaration = flag_isoc99;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
903
111
kono
parents: 68
diff changeset
904 /* -Wimplicit-int is enabled by default for C99. */
kono
parents: 68
diff changeset
905 if (warn_implicit_int == -1)
kono
parents: 68
diff changeset
906 warn_implicit_int = flag_isoc99;
kono
parents: 68
diff changeset
907
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
908 /* -Wold-style-definition is enabled by default for C2X. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
909 if (warn_old_style_definition == -1)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
910 warn_old_style_definition = flag_isoc2x;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
911
111
kono
parents: 68
diff changeset
912 /* -Wshift-overflow is enabled by default in C99 and C++11 modes. */
kono
parents: 68
diff changeset
913 if (warn_shift_overflow == -1)
kono
parents: 68
diff changeset
914 warn_shift_overflow = cxx_dialect >= cxx11 || flag_isoc99;
kono
parents: 68
diff changeset
915
kono
parents: 68
diff changeset
916 /* -Wshift-negative-value is enabled by -Wextra in C99 and C++11 modes. */
kono
parents: 68
diff changeset
917 if (warn_shift_negative_value == -1)
kono
parents: 68
diff changeset
918 warn_shift_negative_value = (extra_warnings
kono
parents: 68
diff changeset
919 && (cxx_dialect >= cxx11 || flag_isoc99));
kono
parents: 68
diff changeset
920
kono
parents: 68
diff changeset
921 /* -Wregister is enabled by default in C++17. */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
922 SET_OPTION_IF_UNSET (&global_options, &global_options_set, warn_register,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
923 cxx_dialect >= cxx17);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
924
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
925 /* -Wcomma-subscript is enabled by default in C++20. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
926 SET_OPTION_IF_UNSET (&global_options, &global_options_set,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
927 warn_comma_subscript,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
928 cxx_dialect >= cxx2a && warn_deprecated);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
929
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
930 /* -Wvolatile is enabled by default in C++20. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
931 SET_OPTION_IF_UNSET (&global_options, &global_options_set, warn_volatile,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
932 cxx_dialect >= cxx2a && warn_deprecated);
111
kono
parents: 68
diff changeset
933
kono
parents: 68
diff changeset
934 /* Declone C++ 'structors if -Os. */
kono
parents: 68
diff changeset
935 if (flag_declone_ctor_dtor == -1)
kono
parents: 68
diff changeset
936 flag_declone_ctor_dtor = optimize_size;
kono
parents: 68
diff changeset
937
kono
parents: 68
diff changeset
938 if (flag_abi_compat_version == 1)
kono
parents: 68
diff changeset
939 {
kono
parents: 68
diff changeset
940 warning (0, "%<-fabi-compat-version=1%> is not supported, using =2");
kono
parents: 68
diff changeset
941 flag_abi_compat_version = 2;
kono
parents: 68
diff changeset
942 }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
943
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
944 /* Change flag_abi_version to be the actual current ABI level, for the
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
945 benefit of c_cpp_builtins, and to make comparison simpler. */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
946 const int latest_abi_version = 14;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
947 /* Generate compatibility aliases for ABI v11 (7.1) by default. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
948 const int abi_compat_default = 11;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
949
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
950 #define clamp(X) if (X == 0 || X > latest_abi_version) X = latest_abi_version
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
951 clamp (flag_abi_version);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
952 clamp (warn_abi_version);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
953 clamp (flag_abi_compat_version);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
954 #undef clamp
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
955
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
956 /* Default -Wabi= or -fabi-compat-version= from each other. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
957 if (warn_abi_version == -1 && flag_abi_compat_version != -1)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
958 warn_abi_version = flag_abi_compat_version;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
959 else if (flag_abi_compat_version == -1 && warn_abi_version != -1)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
960 flag_abi_compat_version = warn_abi_version;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
961 else if (warn_abi_version == -1 && flag_abi_compat_version == -1)
111
kono
parents: 68
diff changeset
962 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
963 warn_abi_version = latest_abi_version;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
964 if (flag_abi_version == latest_abi_version)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
965 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
966 auto_diagnostic_group d;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
967 if (warning (OPT_Wabi, "%<-Wabi%> won%'t warn about anything"))
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
968 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
969 inform (input_location, "%<-Wabi%> warns about differences "
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
970 "from the most up-to-date ABI, which is also used "
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
971 "by default");
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
972 inform (input_location, "use e.g. %<-Wabi=11%> to warn about "
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
973 "changes from GCC 7");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
974 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
975 flag_abi_compat_version = abi_compat_default;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
976 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
977 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
978 flag_abi_compat_version = latest_abi_version;
111
kono
parents: 68
diff changeset
979 }
kono
parents: 68
diff changeset
980
kono
parents: 68
diff changeset
981 /* By default, enable the new inheriting constructor semantics along with ABI
kono
parents: 68
diff changeset
982 11. New and old should coexist fine, but it is a change in what
kono
parents: 68
diff changeset
983 artificial symbols are generated. */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
984 SET_OPTION_IF_UNSET (&global_options, &global_options_set,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
985 flag_new_inheriting_ctors,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
986 abi_version_at_least (11));
111
kono
parents: 68
diff changeset
987
kono
parents: 68
diff changeset
988 /* For GCC 7, only enable DR150 resolution by default if -std=c++17. */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
989 SET_OPTION_IF_UNSET (&global_options, &global_options_set, flag_new_ttp,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
990 cxx_dialect >= cxx17);
111
kono
parents: 68
diff changeset
991
kono
parents: 68
diff changeset
992 if (cxx_dialect >= cxx11)
kono
parents: 68
diff changeset
993 {
kono
parents: 68
diff changeset
994 /* If we're allowing C++0x constructs, don't warn about C++98
kono
parents: 68
diff changeset
995 identifiers which are keywords in C++0x. */
kono
parents: 68
diff changeset
996 warn_cxx11_compat = 0;
kono
parents: 68
diff changeset
997 cpp_opts->cpp_warn_cxx11_compat = 0;
kono
parents: 68
diff changeset
998
kono
parents: 68
diff changeset
999 if (warn_narrowing == -1)
kono
parents: 68
diff changeset
1000 warn_narrowing = 1;
kono
parents: 68
diff changeset
1001
kono
parents: 68
diff changeset
1002 /* Unless -f{,no-}ext-numeric-literals has been used explicitly,
kono
parents: 68
diff changeset
1003 for -std=c++{11,14,17,2a} default to -fno-ext-numeric-literals. */
kono
parents: 68
diff changeset
1004 if (flag_iso && !global_options_set.x_flag_ext_numeric_literals)
kono
parents: 68
diff changeset
1005 cpp_opts->ext_numeric_literals = 0;
kono
parents: 68
diff changeset
1006 }
kono
parents: 68
diff changeset
1007 else if (warn_narrowing == -1)
kono
parents: 68
diff changeset
1008 warn_narrowing = 0;
kono
parents: 68
diff changeset
1009
kono
parents: 68
diff changeset
1010 /* C++17 has stricter evaluation order requirements; let's use some of them
kono
parents: 68
diff changeset
1011 for earlier C++ as well, so chaining works as expected. */
kono
parents: 68
diff changeset
1012 if (c_dialect_cxx ()
kono
parents: 68
diff changeset
1013 && flag_strong_eval_order == -1)
kono
parents: 68
diff changeset
1014 flag_strong_eval_order = (cxx_dialect >= cxx17 ? 2 : 1);
kono
parents: 68
diff changeset
1015
kono
parents: 68
diff changeset
1016 /* Global sized deallocation is new in C++14. */
kono
parents: 68
diff changeset
1017 if (flag_sized_deallocation == -1)
kono
parents: 68
diff changeset
1018 flag_sized_deallocation = (cxx_dialect >= cxx14);
kono
parents: 68
diff changeset
1019
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1020 /* char8_t support is new in C++2A. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1021 if (flag_char8_t == -1)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1022 flag_char8_t = (cxx_dialect >= cxx2a);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1023
111
kono
parents: 68
diff changeset
1024 if (flag_extern_tls_init)
kono
parents: 68
diff changeset
1025 {
kono
parents: 68
diff changeset
1026 if (!TARGET_SUPPORTS_ALIASES || !SUPPORTS_WEAK)
kono
parents: 68
diff changeset
1027 {
kono
parents: 68
diff changeset
1028 /* Lazy TLS initialization for a variable in another TU requires
kono
parents: 68
diff changeset
1029 alias and weak reference support. */
kono
parents: 68
diff changeset
1030 if (flag_extern_tls_init > 0)
kono
parents: 68
diff changeset
1031 sorry ("external TLS initialization functions not supported "
kono
parents: 68
diff changeset
1032 "on this target");
kono
parents: 68
diff changeset
1033
kono
parents: 68
diff changeset
1034 flag_extern_tls_init = 0;
kono
parents: 68
diff changeset
1035 }
kono
parents: 68
diff changeset
1036 else
kono
parents: 68
diff changeset
1037 flag_extern_tls_init = 1;
kono
parents: 68
diff changeset
1038 }
kono
parents: 68
diff changeset
1039
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1040 /* Enable by default only for C++ and C++ with ObjC extensions. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1041 if (warn_return_type == -1 && c_dialect_cxx ())
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1042 warn_return_type = 1;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1043
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1044 /* C++2a is the final version of concepts. We still use -fconcepts
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1045 to know when concepts are enabled. Note that -fconcepts-ts can
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1046 be used to include additional features, although modified to
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1047 work with the standard. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1048 if (cxx_dialect >= cxx2a || flag_concepts_ts)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1049 flag_concepts = 1;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1050 else if (flag_concepts)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1051 /* For -std=c++17 -fconcepts, imply -fconcepts-ts. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1052 flag_concepts_ts = 1;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1053
111
kono
parents: 68
diff changeset
1054 if (num_in_fnames > 1)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1055 error ("too many filenames given; type %<%s %s%> for usage",
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1056 progname, "--help");
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1057
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1058 if (flag_preprocess_only)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1059 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1060 /* Open the output now. We must do so even if flag_no_output is
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1061 on, because there may be other output than from the actual
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1062 preprocessing (e.g. from -dM). */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1063 if (out_fname[0] == '\0')
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1064 out_stream = stdout;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1065 else
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1066 out_stream = fopen (out_fname, "w");
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1067
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1068 if (out_stream == NULL)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1069 {
111
kono
parents: 68
diff changeset
1070 fatal_error (input_location, "opening output file %s: %m", out_fname);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1071 return false;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1072 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1073
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1074 init_pp_output (out_stream);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1075 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1076 else
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1077 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1078 init_c_lex ();
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1079
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1080 /* When writing a PCH file, avoid reading some other PCH file,
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1081 because the default address space slot then can't be used
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1082 for the output PCH file. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1083 if (pch_file)
111
kono
parents: 68
diff changeset
1084 {
kono
parents: 68
diff changeset
1085 c_common_no_more_pch ();
kono
parents: 68
diff changeset
1086 /* Only -g0 and -gdwarf* are supported with PCH, for other
kono
parents: 68
diff changeset
1087 debug formats we warn here and refuse to load any PCH files. */
kono
parents: 68
diff changeset
1088 if (write_symbols != NO_DEBUG && write_symbols != DWARF2_DEBUG)
kono
parents: 68
diff changeset
1089 warning (OPT_Wdeprecated,
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1090 "the %qs debug format cannot be used with "
111
kono
parents: 68
diff changeset
1091 "pre-compiled headers", debug_type_names[write_symbols]);
kono
parents: 68
diff changeset
1092 }
kono
parents: 68
diff changeset
1093 else if (write_symbols != NO_DEBUG && write_symbols != DWARF2_DEBUG)
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1094 c_common_no_more_pch ();
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1095
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1096 /* Yuk. WTF is this? I do know ObjC relies on it somewhere. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1097 input_location = UNKNOWN_LOCATION;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1098 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1099
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1100 cb = cpp_get_callbacks (parse_in);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1101 cb->file_change = cb_file_change;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1102 cb->dir_change = cb_dir_change;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1103 cpp_post_options (parse_in);
111
kono
parents: 68
diff changeset
1104 init_global_opts_from_cpp (&global_options, cpp_get_options (parse_in));
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1105
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1106 input_location = UNKNOWN_LOCATION;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1107
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1108 *pfilename = this_input_filename
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1109 = cpp_read_main_file (parse_in, in_fnames[0]);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1110 /* Don't do any compilation or preprocessing if there is no input file. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1111 if (this_input_filename == NULL)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1112 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1113 errorcount++;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1114 return false;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1115 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1116
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1117 if (flag_working_directory
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1118 && flag_preprocess_only && !flag_no_line_commands)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1119 pp_dir_change (parse_in, get_src_pwd ());
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1120
111
kono
parents: 68
diff changeset
1121 /* Disable LTO output when outputting a precompiled header. */
kono
parents: 68
diff changeset
1122 if (pch_file && flag_lto)
kono
parents: 68
diff changeset
1123 {
kono
parents: 68
diff changeset
1124 flag_lto = 0;
kono
parents: 68
diff changeset
1125 flag_generate_lto = 0;
kono
parents: 68
diff changeset
1126 }
kono
parents: 68
diff changeset
1127
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1128 return flag_preprocess_only;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1129 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1130
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1131 /* Front end initialization common to C, ObjC and C++. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1132 bool
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1133 c_common_init (void)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1134 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1135 /* Set up preprocessor arithmetic. Must be done after call to
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1136 c_common_nodes_and_builtins for type nodes to be good. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1137 cpp_opts->precision = TYPE_PRECISION (intmax_type_node);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1138 cpp_opts->char_precision = TYPE_PRECISION (char_type_node);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1139 cpp_opts->int_precision = TYPE_PRECISION (integer_type_node);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1140 cpp_opts->wchar_precision = TYPE_PRECISION (wchar_type_node);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1141 cpp_opts->unsigned_wchar = TYPE_UNSIGNED (wchar_type_node);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1142 cpp_opts->bytes_big_endian = BYTES_BIG_ENDIAN;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1143
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1144 /* This can't happen until after wchar_precision and bytes_big_endian
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1145 are known. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1146 cpp_init_iconv (parse_in);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1147
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1148 if (version_flag)
111
kono
parents: 68
diff changeset
1149 {
kono
parents: 68
diff changeset
1150 int i;
kono
parents: 68
diff changeset
1151 fputs ("Compiler executable checksum: ", stderr);
kono
parents: 68
diff changeset
1152 for (i = 0; i < 16; i++)
kono
parents: 68
diff changeset
1153 fprintf (stderr, "%02x", executable_checksum[i]);
kono
parents: 68
diff changeset
1154 putc ('\n', stderr);
kono
parents: 68
diff changeset
1155 }
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1156
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1157 /* Has to wait until now so that cpplib has its hash table. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1158 init_pragma ();
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1159
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1160 if (flag_preprocess_only)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1161 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1162 c_finish_options ();
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1163 preprocess_file (parse_in);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1164 return false;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1165 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1166
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1167 return true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1168 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1169
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1170 /* Initialize the integrated preprocessor after debug output has been
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1171 initialized; loop over each input file. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1172 void
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1173 c_common_parse_file (void)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1174 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1175 unsigned int i;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1176
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1177 i = 0;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1178 for (;;)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1179 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1180 c_finish_options ();
111
kono
parents: 68
diff changeset
1181 /* Open the dump file to use for the original dump output
kono
parents: 68
diff changeset
1182 here, to be used during parsing for the current file. */
kono
parents: 68
diff changeset
1183 original_dump_file = dump_begin (TDI_original, &original_dump_flags);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1184 pch_init ();
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1185 push_file_scope ();
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1186 c_parse_file ();
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1187 pop_file_scope ();
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1188 /* And end the main input file, if the debug writer wants it */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1189 if (debug_hooks->start_end_main_source_file)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1190 (*debug_hooks->end_source_file) (0);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1191 if (++i >= num_in_fnames)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1192 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1193 cpp_undef_all (parse_in);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1194 cpp_clear_file_cache (parse_in);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1195 this_input_filename
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1196 = cpp_read_main_file (parse_in, in_fnames[i]);
111
kono
parents: 68
diff changeset
1197 if (original_dump_file)
kono
parents: 68
diff changeset
1198 {
kono
parents: 68
diff changeset
1199 dump_end (TDI_original, original_dump_file);
kono
parents: 68
diff changeset
1200 original_dump_file = NULL;
kono
parents: 68
diff changeset
1201 }
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1202 /* If an input file is missing, abandon further compilation.
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1203 cpplib has issued a diagnostic. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1204 if (!this_input_filename)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1205 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1206 }
111
kono
parents: 68
diff changeset
1207
kono
parents: 68
diff changeset
1208 c_parse_final_cleanups ();
kono
parents: 68
diff changeset
1209 }
kono
parents: 68
diff changeset
1210
kono
parents: 68
diff changeset
1211 /* Returns the appropriate dump file for PHASE to dump with FLAGS. */
kono
parents: 68
diff changeset
1212
kono
parents: 68
diff changeset
1213 FILE *
kono
parents: 68
diff changeset
1214 get_dump_info (int phase, dump_flags_t *flags)
kono
parents: 68
diff changeset
1215 {
kono
parents: 68
diff changeset
1216 gcc_assert (phase == TDI_original);
kono
parents: 68
diff changeset
1217
kono
parents: 68
diff changeset
1218 *flags = original_dump_flags;
kono
parents: 68
diff changeset
1219 return original_dump_file;
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1220 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1221
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1222 /* Common finish hook for the C, ObjC and C++ front ends. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1223 void
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1224 c_common_finish (void)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1225 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1226 FILE *deps_stream = NULL;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1227
111
kono
parents: 68
diff changeset
1228 /* Note that we write the dependencies even if there are errors. This is
kono
parents: 68
diff changeset
1229 useful for handling outdated generated headers that now trigger errors
kono
parents: 68
diff changeset
1230 (for example, with #error) which would be resolved by re-generating
kono
parents: 68
diff changeset
1231 them. In a sense, this complements -MG. */
kono
parents: 68
diff changeset
1232 if (cpp_opts->deps.style != DEPS_NONE)
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1233 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1234 /* If -M or -MM was seen without -MF, default output to the
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1235 output stream. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1236 if (!deps_file)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1237 deps_stream = out_stream;
111
kono
parents: 68
diff changeset
1238 else if (deps_file[0] == '-' && deps_file[1] == '\0')
kono
parents: 68
diff changeset
1239 deps_stream = stdout;
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1240 else
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1241 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1242 deps_stream = fopen (deps_file, deps_append ? "a": "w");
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1243 if (!deps_stream)
111
kono
parents: 68
diff changeset
1244 fatal_error (input_location, "opening dependency file %s: %m",
kono
parents: 68
diff changeset
1245 deps_file);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1246 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1247 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1248
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1249 /* For performance, avoid tearing down cpplib's internal structures
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1250 with cpp_destroy (). */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1251 cpp_finish (parse_in, deps_stream);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1252
111
kono
parents: 68
diff changeset
1253 if (deps_stream && deps_stream != out_stream && deps_stream != stdout
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1254 && (ferror (deps_stream) || fclose (deps_stream)))
111
kono
parents: 68
diff changeset
1255 fatal_error (input_location, "closing dependency file %s: %m", deps_file);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1256
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1257 if (out_stream && (ferror (out_stream) || fclose (out_stream)))
111
kono
parents: 68
diff changeset
1258 fatal_error (input_location, "when writing output to %s: %m", out_fname);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1259 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1260
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1261 /* Either of two environment variables can specify output of
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1262 dependencies. Their value is either "OUTPUT_FILE" or "OUTPUT_FILE
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1263 DEPS_TARGET", where OUTPUT_FILE is the file to write deps info to
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1264 and DEPS_TARGET is the target to mention in the deps. They also
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1265 result in dependency information being appended to the output file
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1266 rather than overwriting it, and like Sun's compiler
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1267 SUNPRO_DEPENDENCIES suppresses the dependency on the main file. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1268 static void
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1269 check_deps_environment_vars (void)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1270 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1271 char *spec;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1272
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1273 spec = getenv ("DEPENDENCIES_OUTPUT");
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1274 if (spec)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1275 cpp_opts->deps.style = DEPS_USER;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1276 else
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1277 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1278 spec = getenv ("SUNPRO_DEPENDENCIES");
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1279 if (spec)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1280 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1281 cpp_opts->deps.style = DEPS_SYSTEM;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1282 cpp_opts->deps.ignore_main_file = true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1283 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1284 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1285
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1286 if (spec)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1287 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1288 /* Find the space before the DEPS_TARGET, if there is one. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1289 char *s = strchr (spec, ' ');
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1290 if (s)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1291 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1292 /* Let the caller perform MAKE quoting. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1293 defer_opt (OPT_MT, s + 1);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1294 *s = '\0';
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1295 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1296
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1297 /* Command line -MF overrides environment variables and default. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1298 if (!deps_file)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1299 deps_file = spec;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1300
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1301 deps_append = 1;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1302 deps_seen = true;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1303 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1304 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1305
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1306 /* Handle deferred command line switches. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1307 static void
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1308 handle_deferred_opts (void)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1309 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1310 /* Avoid allocating the deps buffer if we don't need it.
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1311 (This flag may be true without there having been -MT or -MQ
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1312 options, but we'll still need the deps buffer.) */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1313 if (!deps_seen)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1314 return;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1315
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1316 mkdeps *deps = cpp_get_deps (parse_in);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1317
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1318 for (size_t i = 0; i < deferred_count; i++)
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1319 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1320 struct deferred_opt *opt = &deferred_opts[i];
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1321
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1322 if (opt->code == OPT_MT || opt->code == OPT_MQ)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1323 deps_add_target (deps, opt->arg, opt->code == OPT_MQ);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1324 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1325 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1326
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1327 /* These settings are appropriate for GCC, but not necessarily so for
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1328 cpplib as a library. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1329 static void
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1330 sanitize_cpp_opts (void)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1331 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1332 /* If we don't know what style of dependencies to output, complain
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1333 if any other dependency switches have been given. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1334 if (deps_seen && cpp_opts->deps.style == DEPS_NONE)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1335 error ("to generate dependencies you must specify either %<-M%> "
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1336 "or %<-MM%>");
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1337
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1338 /* -dM and dependencies suppress normal output; do it here so that
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1339 the last -d[MDN] switch overrides earlier ones. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1340 if (flag_dump_macros == 'M')
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1341 flag_no_output = 1;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1342
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1343 /* By default, -fdirectives-only implies -dD. This allows subsequent phases
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1344 to perform proper macro expansion. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1345 if (cpp_opts->directives_only && !cpp_opts->preprocessed && !flag_dump_macros)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1346 flag_dump_macros = 'D';
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1347
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1348 /* Disable -dD, -dN and -dI if normal output is suppressed. Allow
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1349 -dM since at least glibc relies on -M -dM to work. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1350 /* Also, flag_no_output implies flag_no_line_commands, always. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1351 if (flag_no_output)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1352 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1353 if (flag_dump_macros != 'M')
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1354 flag_dump_macros = 0;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1355 flag_dump_includes = 0;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1356 flag_no_line_commands = 1;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1357 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1358 else if (cpp_opts->deps.missing_files)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1359 error ("%<-MG%> may only be used with %<-M%> or %<-MM%>");
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1360
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1361 cpp_opts->unsigned_char = !flag_signed_char;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1362 cpp_opts->stdc_0_in_system_headers = STDC_0_IN_SYSTEM_HEADERS;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1363
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1364 /* Wlong-long is disabled by default. It is enabled by:
111
kono
parents: 68
diff changeset
1365 [-Wpedantic | -Wtraditional] -std=[gnu|c]++98 ; or
kono
parents: 68
diff changeset
1366 [-Wpedantic | -Wtraditional] -std=non-c99
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1367
111
kono
parents: 68
diff changeset
1368 Either -Wlong-long or -Wno-long-long override any other settings.
kono
parents: 68
diff changeset
1369 ??? These conditions should be handled in c.opt. */
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1370 if (warn_long_long == -1)
111
kono
parents: 68
diff changeset
1371 {
kono
parents: 68
diff changeset
1372 warn_long_long = ((pedantic || warn_traditional)
kono
parents: 68
diff changeset
1373 && (c_dialect_cxx () ? cxx_dialect == cxx98 : !flag_isoc99));
kono
parents: 68
diff changeset
1374 cpp_opts->cpp_warn_long_long = warn_long_long;
kono
parents: 68
diff changeset
1375 }
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1376
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1377 /* If we're generating preprocessor output, emit current directory
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1378 if explicitly requested or if debugging information is enabled.
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1379 ??? Maybe we should only do it for debugging formats that
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1380 actually output the current directory? */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1381 if (flag_working_directory == -1)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1382 flag_working_directory = (debug_info_level != DINFO_LEVEL_NONE);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1383
111
kono
parents: 68
diff changeset
1384 if (warn_implicit_fallthrough < 5)
kono
parents: 68
diff changeset
1385 cpp_opts->cpp_warn_implicit_fallthrough = warn_implicit_fallthrough;
kono
parents: 68
diff changeset
1386 else
kono
parents: 68
diff changeset
1387 cpp_opts->cpp_warn_implicit_fallthrough = 0;
kono
parents: 68
diff changeset
1388
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1389 if (cpp_opts->directives_only)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1390 {
111
kono
parents: 68
diff changeset
1391 if (cpp_warn_unused_macros)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1392 error ("%<-fdirectives-only%> is incompatible "
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1393 "with %<-Wunused-macros%>");
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1394 if (cpp_opts->traditional)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1395 error ("%<-fdirectives-only%> is incompatible with %<-traditional%>");
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1396 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1397 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1398
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1399 /* Add include path with a prefix at the front of its name. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1400 static void
111
kono
parents: 68
diff changeset
1401 add_prefixed_path (const char *suffix, incpath_kind chain)
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1402 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1403 char *path;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1404 const char *prefix;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1405 size_t prefix_len, suffix_len;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1406
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1407 suffix_len = strlen (suffix);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1408 prefix = iprefix ? iprefix : cpp_GCC_INCLUDE_DIR;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1409 prefix_len = iprefix ? strlen (iprefix) : cpp_GCC_INCLUDE_DIR_len;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1410
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1411 path = (char *) xmalloc (prefix_len + suffix_len + 1);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1412 memcpy (path, prefix, prefix_len);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1413 memcpy (path + prefix_len, suffix, suffix_len);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1414 path[prefix_len + suffix_len] = '\0';
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1415
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1416 add_path (path, chain, 0, false);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1417 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1418
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1419 /* Handle -D, -U, -A, -imacros, and the first -include. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1420 static void
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1421 c_finish_options (void)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1422 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1423 if (!cpp_opts->preprocessed)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1424 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1425 const line_map_ordinary *bltin_map
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1426 = linemap_check_ordinary (linemap_add (line_table, LC_RENAME, 0,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1427 _("<built-in>"), 0));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1428 cb_file_change (parse_in, bltin_map);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1429
111
kono
parents: 68
diff changeset
1430 /* Make sure all of the builtins about to be declared have
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1431 BUILTINS_LOCATION has their location_t. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1432 cpp_force_token_locations (parse_in, BUILTINS_LOCATION);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1433
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1434 cpp_init_builtins (parse_in, flag_hosted);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1435 c_cpp_builtins (parse_in);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1436
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1437 /* We're about to send user input to cpplib, so make it warn for
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1438 things that we previously (when we sent it internal definitions)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1439 told it to not warn.
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1440
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1441 C99 permits implementation-defined characters in identifiers.
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1442 The documented meaning of -std= is to turn off extensions that
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1443 conflict with the specified standard, and since a strictly
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1444 conforming program cannot contain a '$', we do not condition
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1445 their acceptance on the -std= setting. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1446 cpp_opts->warn_dollars = (cpp_opts->cpp_pedantic && !cpp_opts->c99);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1447
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1448 const line_map_ordinary *cmd_map
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1449 = linemap_check_ordinary (linemap_add (line_table, LC_RENAME, 0,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1450 _("<command-line>"), 0));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1451 cb_file_change (parse_in, cmd_map);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1452
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1453 /* All command line defines must have the same location. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1454 cpp_force_token_locations (parse_in, cmd_map->start_location);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1455 for (size_t i = 0; i < deferred_count; i++)
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1456 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1457 struct deferred_opt *opt = &deferred_opts[i];
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1458
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1459 if (opt->code == OPT_D)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1460 cpp_define (parse_in, opt->arg);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1461 else if (opt->code == OPT_U)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1462 cpp_undef (parse_in, opt->arg);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1463 else if (opt->code == OPT_A)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1464 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1465 if (opt->arg[0] == '-')
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1466 cpp_unassert (parse_in, opt->arg + 1);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1467 else
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1468 cpp_assert (parse_in, opt->arg);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1469 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1470 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1471
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1472 cpp_stop_forcing_token_locations (parse_in);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1473 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1474 else if (cpp_opts->directives_only)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1475 cpp_init_special_builtins (parse_in);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1476
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1477 /* Start the main input file, if the debug writer wants it. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1478 if (debug_hooks->start_end_main_source_file
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1479 && !flag_preprocess_only)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1480 (*debug_hooks->start_source_file) (0, this_input_filename);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1481
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1482 if (!cpp_opts->preprocessed)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1483 /* Handle -imacros after -D and -U. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1484 for (size_t i = 0; i < deferred_count; i++)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1485 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1486 struct deferred_opt *opt = &deferred_opts[i];
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1487
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1488 if (opt->code == OPT_imacros
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1489 && cpp_push_include (parse_in, opt->arg))
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1490 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1491 /* Disable push_command_line_include callback for now. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1492 include_cursor = deferred_count + 1;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1493 cpp_scan_nooutput (parse_in);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1494 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1495 }
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1496
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1497 include_cursor = 0;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1498 push_command_line_include ();
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1499 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1500
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1501 /* Give CPP the next file given by -include, if any. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1502 static void
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1503 push_command_line_include (void)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1504 {
111
kono
parents: 68
diff changeset
1505 /* This can happen if disabled by -imacros for example.
kono
parents: 68
diff changeset
1506 Punt so that we don't set "<command-line>" as the filename for
kono
parents: 68
diff changeset
1507 the header. */
kono
parents: 68
diff changeset
1508 if (include_cursor > deferred_count)
kono
parents: 68
diff changeset
1509 return;
kono
parents: 68
diff changeset
1510
kono
parents: 68
diff changeset
1511 if (!done_preinclude)
kono
parents: 68
diff changeset
1512 {
kono
parents: 68
diff changeset
1513 done_preinclude = true;
kono
parents: 68
diff changeset
1514 if (flag_hosted && std_inc && !cpp_opts->preprocessed)
kono
parents: 68
diff changeset
1515 {
kono
parents: 68
diff changeset
1516 const char *preinc = targetcm.c_preinclude ();
kono
parents: 68
diff changeset
1517 if (preinc && cpp_push_default_include (parse_in, preinc))
kono
parents: 68
diff changeset
1518 return;
kono
parents: 68
diff changeset
1519 }
kono
parents: 68
diff changeset
1520 }
kono
parents: 68
diff changeset
1521
kono
parents: 68
diff changeset
1522 pch_cpp_save_state ();
kono
parents: 68
diff changeset
1523
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1524 while (include_cursor < deferred_count)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1525 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1526 struct deferred_opt *opt = &deferred_opts[include_cursor++];
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1527
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1528 if (!cpp_opts->preprocessed && opt->code == OPT_include
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1529 && cpp_push_include (parse_in, opt->arg))
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1530 return;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1531 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1532
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1533 if (include_cursor == deferred_count)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1534 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1535 include_cursor++;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1536 /* -Wunused-macros should only warn about macros defined hereafter. */
111
kono
parents: 68
diff changeset
1537 cpp_opts->warn_unused_macros = cpp_warn_unused_macros;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1538 /* Restore the line map back to the main file. */
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1539 if (!cpp_opts->preprocessed)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1540 cpp_change_file (parse_in, LC_RENAME, this_input_filename);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1541
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1542 /* Set this here so the client can change the option if it wishes,
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1543 and after stacking the main file so we don't trace the main file. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1544 line_table->trace_includes = cpp_opts->print_include_names;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1545 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1546 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1547
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1548 /* File change callback. Has to handle -include files. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1549 static void
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1550 cb_file_change (cpp_reader * ARG_UNUSED (pfile),
111
kono
parents: 68
diff changeset
1551 const line_map_ordinary *new_map)
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1552 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1553 if (flag_preprocess_only)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1554 pp_file_change (new_map);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1555 else
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1556 fe_file_change (new_map);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1557
111
kono
parents: 68
diff changeset
1558 if (new_map
kono
parents: 68
diff changeset
1559 && (new_map->reason == LC_ENTER || new_map->reason == LC_RENAME))
kono
parents: 68
diff changeset
1560 {
kono
parents: 68
diff changeset
1561 /* Signal to plugins that a file is included. This could happen
kono
parents: 68
diff changeset
1562 several times with the same file path, e.g. because of
kono
parents: 68
diff changeset
1563 several '#include' or '#line' directives... */
kono
parents: 68
diff changeset
1564 invoke_plugin_callbacks
kono
parents: 68
diff changeset
1565 (PLUGIN_INCLUDE_FILE,
kono
parents: 68
diff changeset
1566 const_cast<char*> (ORDINARY_MAP_FILE_NAME (new_map)));
kono
parents: 68
diff changeset
1567 }
kono
parents: 68
diff changeset
1568
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1569 if (new_map == 0 || (new_map->reason == LC_LEAVE && MAIN_FILE_P (new_map)))
111
kono
parents: 68
diff changeset
1570 {
kono
parents: 68
diff changeset
1571 pch_cpp_save_state ();
kono
parents: 68
diff changeset
1572 push_command_line_include ();
kono
parents: 68
diff changeset
1573 }
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1574 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1575
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1576 void
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1577 cb_dir_change (cpp_reader * ARG_UNUSED (pfile), const char *dir)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1578 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1579 if (!set_src_pwd (dir))
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1580 warning (0, "too late for # directive to set debug directory");
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1581 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1582
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1583 /* Set the C 89 standard (with 1994 amendments if C94, without GNU
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1584 extensions if ISO). There is no concept of gnu94. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1585 static void
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1586 set_std_c89 (int c94, int iso)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1587 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1588 cpp_set_lang (parse_in, c94 ? CLK_STDC94: iso ? CLK_STDC89: CLK_GNUC89);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1589 flag_iso = iso;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1590 flag_no_asm = iso;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1591 flag_no_gnu_keywords = iso;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1592 flag_no_nonansi_builtin = iso;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1593 flag_isoc94 = c94;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1594 flag_isoc99 = 0;
111
kono
parents: 68
diff changeset
1595 flag_isoc11 = 0;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1596 flag_isoc2x = 0;
111
kono
parents: 68
diff changeset
1597 lang_hooks.name = "GNU C89";
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1598 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1599
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1600 /* Set the C 99 standard (without GNU extensions if ISO). */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1601 static void
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1602 set_std_c99 (int iso)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1603 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1604 cpp_set_lang (parse_in, iso ? CLK_STDC99: CLK_GNUC99);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1605 flag_no_asm = iso;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1606 flag_no_nonansi_builtin = iso;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1607 flag_iso = iso;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1608 flag_isoc2x = 0;
111
kono
parents: 68
diff changeset
1609 flag_isoc11 = 0;
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1610 flag_isoc99 = 1;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1611 flag_isoc94 = 1;
111
kono
parents: 68
diff changeset
1612 lang_hooks.name = "GNU C99";
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1613 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1614
111
kono
parents: 68
diff changeset
1615 /* Set the C 11 standard (without GNU extensions if ISO). */
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1616 static void
111
kono
parents: 68
diff changeset
1617 set_std_c11 (int iso)
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1618 {
111
kono
parents: 68
diff changeset
1619 cpp_set_lang (parse_in, iso ? CLK_STDC11: CLK_GNUC11);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1620 flag_no_asm = iso;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1621 flag_no_nonansi_builtin = iso;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1622 flag_iso = iso;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1623 flag_isoc2x = 0;
111
kono
parents: 68
diff changeset
1624 flag_isoc11 = 1;
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1625 flag_isoc99 = 1;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1626 flag_isoc94 = 1;
111
kono
parents: 68
diff changeset
1627 lang_hooks.name = "GNU C11";
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1628 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1629
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1630 /* Set the C 17 standard (without GNU extensions if ISO). */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1631 static void
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1632 set_std_c17 (int iso)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1633 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1634 cpp_set_lang (parse_in, iso ? CLK_STDC17: CLK_GNUC17);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1635 flag_no_asm = iso;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1636 flag_no_nonansi_builtin = iso;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1637 flag_iso = iso;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1638 flag_isoc2x = 0;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1639 flag_isoc11 = 1;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1640 flag_isoc99 = 1;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1641 flag_isoc94 = 1;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1642 lang_hooks.name = "GNU C17";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1643 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1644
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1645 /* Set the C 2X standard (without GNU extensions if ISO). */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1646 static void
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1647 set_std_c2x (int iso)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1648 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1649 cpp_set_lang (parse_in, iso ? CLK_STDC2X: CLK_GNUC2X);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1650 flag_no_asm = iso;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1651 flag_no_nonansi_builtin = iso;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1652 flag_iso = iso;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1653 flag_isoc2x = 1;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1654 flag_isoc11 = 1;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1655 flag_isoc99 = 1;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1656 flag_isoc94 = 1;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1657 lang_hooks.name = "GNU C2X";
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1658 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1659
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1660
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1661 /* Set the C++ 98 standard (without GNU extensions if ISO). */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1662 static void
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1663 set_std_cxx98 (int iso)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1664 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1665 cpp_set_lang (parse_in, iso ? CLK_CXX98: CLK_GNUCXX);
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1666 flag_no_gnu_keywords = iso;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1667 flag_no_nonansi_builtin = iso;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1668 flag_iso = iso;
111
kono
parents: 68
diff changeset
1669 flag_isoc94 = 0;
kono
parents: 68
diff changeset
1670 flag_isoc99 = 0;
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1671 cxx_dialect = cxx98;
111
kono
parents: 68
diff changeset
1672 lang_hooks.name = "GNU C++98";
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1673 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1674
111
kono
parents: 68
diff changeset
1675 /* Set the C++ 2011 standard (without GNU extensions if ISO). */
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1676 static void
111
kono
parents: 68
diff changeset
1677 set_std_cxx11 (int iso)
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1678 {
111
kono
parents: 68
diff changeset
1679 cpp_set_lang (parse_in, iso ? CLK_CXX11: CLK_GNUCXX11);
kono
parents: 68
diff changeset
1680 flag_no_gnu_keywords = iso;
kono
parents: 68
diff changeset
1681 flag_no_nonansi_builtin = iso;
kono
parents: 68
diff changeset
1682 flag_iso = iso;
kono
parents: 68
diff changeset
1683 /* C++11 includes the C99 standard library. */
kono
parents: 68
diff changeset
1684 flag_isoc94 = 1;
kono
parents: 68
diff changeset
1685 flag_isoc99 = 1;
kono
parents: 68
diff changeset
1686 cxx_dialect = cxx11;
kono
parents: 68
diff changeset
1687 lang_hooks.name = "GNU C++11";
kono
parents: 68
diff changeset
1688 }
kono
parents: 68
diff changeset
1689
kono
parents: 68
diff changeset
1690 /* Set the C++ 2014 standard (without GNU extensions if ISO). */
kono
parents: 68
diff changeset
1691 static void
kono
parents: 68
diff changeset
1692 set_std_cxx14 (int iso)
kono
parents: 68
diff changeset
1693 {
kono
parents: 68
diff changeset
1694 cpp_set_lang (parse_in, iso ? CLK_CXX14: CLK_GNUCXX14);
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1695 flag_no_gnu_keywords = iso;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1696 flag_no_nonansi_builtin = iso;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1697 flag_iso = iso;
111
kono
parents: 68
diff changeset
1698 /* C++14 includes the C99 standard library. */
kono
parents: 68
diff changeset
1699 flag_isoc94 = 1;
kono
parents: 68
diff changeset
1700 flag_isoc99 = 1;
kono
parents: 68
diff changeset
1701 cxx_dialect = cxx14;
kono
parents: 68
diff changeset
1702 lang_hooks.name = "GNU C++14";
kono
parents: 68
diff changeset
1703 }
kono
parents: 68
diff changeset
1704
kono
parents: 68
diff changeset
1705 /* Set the C++ 2017 standard (without GNU extensions if ISO). */
kono
parents: 68
diff changeset
1706 static void
kono
parents: 68
diff changeset
1707 set_std_cxx17 (int iso)
kono
parents: 68
diff changeset
1708 {
kono
parents: 68
diff changeset
1709 cpp_set_lang (parse_in, iso ? CLK_CXX17: CLK_GNUCXX17);
kono
parents: 68
diff changeset
1710 flag_no_gnu_keywords = iso;
kono
parents: 68
diff changeset
1711 flag_no_nonansi_builtin = iso;
kono
parents: 68
diff changeset
1712 flag_iso = iso;
kono
parents: 68
diff changeset
1713 /* C++17 includes the C11 standard library. */
kono
parents: 68
diff changeset
1714 flag_isoc94 = 1;
kono
parents: 68
diff changeset
1715 flag_isoc99 = 1;
kono
parents: 68
diff changeset
1716 flag_isoc11 = 1;
kono
parents: 68
diff changeset
1717 cxx_dialect = cxx17;
kono
parents: 68
diff changeset
1718 lang_hooks.name = "GNU C++17";
kono
parents: 68
diff changeset
1719 }
kono
parents: 68
diff changeset
1720
kono
parents: 68
diff changeset
1721 /* Set the C++ 202a draft standard (without GNU extensions if ISO). */
kono
parents: 68
diff changeset
1722 static void
kono
parents: 68
diff changeset
1723 set_std_cxx2a (int iso)
kono
parents: 68
diff changeset
1724 {
kono
parents: 68
diff changeset
1725 cpp_set_lang (parse_in, iso ? CLK_CXX2A: CLK_GNUCXX2A);
kono
parents: 68
diff changeset
1726 flag_no_gnu_keywords = iso;
kono
parents: 68
diff changeset
1727 flag_no_nonansi_builtin = iso;
kono
parents: 68
diff changeset
1728 flag_iso = iso;
kono
parents: 68
diff changeset
1729 /* C++17 includes the C11 standard library. */
kono
parents: 68
diff changeset
1730 flag_isoc94 = 1;
kono
parents: 68
diff changeset
1731 flag_isoc99 = 1;
kono
parents: 68
diff changeset
1732 flag_isoc11 = 1;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1733 /* C++2a includes concepts. */
111
kono
parents: 68
diff changeset
1734 cxx_dialect = cxx2a;
kono
parents: 68
diff changeset
1735 lang_hooks.name = "GNU C++17"; /* Pretend C++17 until standardization. */
68
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1736 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1737
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1738 /* Args to -d specify what to dump. Silently ignore
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1739 unrecognized options; they may be aimed at toplev.c. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1740 static void
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1741 handle_OPT_d (const char *arg)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1742 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1743 char c;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1744
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1745 while ((c = *arg++) != '\0')
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1746 switch (c)
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1747 {
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1748 case 'M': /* Dump macros only. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1749 case 'N': /* Dump names. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1750 case 'D': /* Dump definitions. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1751 case 'U': /* Dump used macros. */
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1752 flag_dump_macros = c;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1753 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1754
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1755 case 'I':
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1756 flag_dump_includes = 1;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1757 break;
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1758 }
561a7518be6b update gcc-4.6
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1759 }