]>
Commit | Line | Data |
---|---|---|
c0f940ef | 1 | /* Language-specific hook definitions for C front end. |
517cbe13 | 2 | Copyright (C) 1991, 1995, 1997, 1998, |
e146f815 | 3 | 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc. |
c0f940ef | 4 | |
1322177d | 5 | This file is part of GCC. |
c0f940ef | 6 | |
1322177d LB |
7 | GCC is free software; you can redistribute it and/or modify it under |
8 | the terms of the GNU General Public License as published by the Free | |
9 | Software Foundation; either version 2, or (at your option) any later | |
10 | version. | |
c0f940ef | 11 | |
1322177d LB |
12 | GCC is distributed in the hope that it will be useful, but WITHOUT ANY |
13 | WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 | for more details. | |
c0f940ef RS |
16 | |
17 | You should have received a copy of the GNU General Public License | |
1322177d LB |
18 | along with GCC; see the file COPYING. If not, write to the Free |
19 | Software Foundation, 59 Temple Place - Suite 330, Boston, MA | |
20 | 02111-1307, USA. */ | |
c0f940ef RS |
21 | |
22 | ||
23 | #include "config.h" | |
670ee920 | 24 | #include "system.h" |
4977bab6 ZW |
25 | #include "coretypes.h" |
26 | #include "tm.h" | |
c0f940ef | 27 | #include "tree.h" |
8f17b5c5 | 28 | #include "c-tree.h" |
52dabb6c | 29 | #include "c-common.h" |
e2500fed | 30 | #include "ggc.h" |
69dcadff | 31 | #include "langhooks.h" |
d23c55c2 | 32 | #include "langhooks-def.h" |
6de9cd9a | 33 | #include "tree-inline.h" |
4b780675 GDR |
34 | #include "diagnostic.h" |
35 | #include "c-pretty-print.h" | |
36 | ||
37 | static void c_initialize_diagnostics (diagnostic_context *); | |
a32f2771 | 38 | |
37fa72e9 | 39 | enum c_language_kind c_language = clk_c; |
0abc6a6a NB |
40 | |
41 | /* ### When changing hooks, consider if ObjC needs changing too!! ### */ | |
cd2a3ba2 | 42 | |
3ac88239 NB |
43 | #undef LANG_HOOKS_NAME |
44 | #define LANG_HOOKS_NAME "GNU C" | |
18d5f982 ZW |
45 | #undef LANG_HOOKS_IDENTIFIER_SIZE |
46 | #define LANG_HOOKS_IDENTIFIER_SIZE C_SIZEOF_STRUCT_LANG_IDENTIFIER | |
69dcadff | 47 | #undef LANG_HOOKS_INIT |
460bd0e3 | 48 | #define LANG_HOOKS_INIT c_objc_common_init |
22703ccc NB |
49 | #undef LANG_HOOKS_FINISH |
50 | #define LANG_HOOKS_FINISH c_common_finish | |
69dcadff | 51 | #undef LANG_HOOKS_INIT_OPTIONS |
37fa72e9 | 52 | #define LANG_HOOKS_INIT_OPTIONS c_common_init_options |
fc95cf70 GDR |
53 | #undef LANG_HOOKS_INITIALIZE_DIAGNOSTICS |
54 | #define LANG_HOOKS_INITIALIZE_DIAGNOSTICS c_initialize_diagnostics | |
2772ef3e NB |
55 | #undef LANG_HOOKS_HANDLE_OPTION |
56 | #define LANG_HOOKS_HANDLE_OPTION c_common_handle_option | |
cb66e385 NB |
57 | #undef LANG_HOOKS_MISSING_ARGUMENT |
58 | #define LANG_HOOKS_MISSING_ARGUMENT c_common_missing_argument | |
69dcadff | 59 | #undef LANG_HOOKS_POST_OPTIONS |
e5f3b786 | 60 | #define LANG_HOOKS_POST_OPTIONS c_common_post_options |
8ac61af7 RK |
61 | #undef LANG_HOOKS_GET_ALIAS_SET |
62 | #define LANG_HOOKS_GET_ALIAS_SET c_common_get_alias_set | |
ac79cd5a RK |
63 | #undef LANG_HOOKS_SAFE_FROM_P |
64 | #define LANG_HOOKS_SAFE_FROM_P c_safe_from_p | |
c9d892a8 NB |
65 | #undef LANG_HOOKS_EXPAND_EXPR |
66 | #define LANG_HOOKS_EXPAND_EXPR c_expand_expr | |
6de9cd9a DN |
67 | #undef LANG_HOOKS_EXPAND_DECL |
68 | #define LANG_HOOKS_EXPAND_DECL c_expand_decl | |
dffd7eb6 NB |
69 | #undef LANG_HOOKS_MARK_ADDRESSABLE |
70 | #define LANG_HOOKS_MARK_ADDRESSABLE c_mark_addressable | |
52dabb6c NB |
71 | #undef LANG_HOOKS_PARSE_FILE |
72 | #define LANG_HOOKS_PARSE_FILE c_common_parse_file | |
f75fbaf7 ZW |
73 | #undef LANG_HOOKS_CLEAR_BINDING_STACK |
74 | #define LANG_HOOKS_CLEAR_BINDING_STACK lhd_do_nothing | |
78ef5b89 | 75 | #undef LANG_HOOKS_TRUTHVALUE_CONVERSION |
e57e265b | 76 | #define LANG_HOOKS_TRUTHVALUE_CONVERSION c_objc_common_truthvalue_conversion |
48a7a235 NB |
77 | #undef LANG_HOOKS_FINISH_INCOMPLETE_DECL |
78 | #define LANG_HOOKS_FINISH_INCOMPLETE_DECL c_finish_incomplete_decl | |
79 | #undef LANG_HOOKS_UNSAFE_FOR_REEVAL | |
80 | #define LANG_HOOKS_UNSAFE_FOR_REEVAL c_common_unsafe_for_reeval | |
db3acfa5 JM |
81 | #undef LANG_HOOKS_STATICP |
82 | #define LANG_HOOKS_STATICP c_staticp | |
26e0dcb3 GK |
83 | #undef LANG_HOOKS_SET_DECL_ASSEMBLER_NAME |
84 | #define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME c_static_assembler_name | |
2896d056 ZW |
85 | #undef LANG_HOOKS_NO_BODY_BLOCKS |
86 | #define LANG_HOOKS_NO_BODY_BLOCKS true | |
ef4f94ac RH |
87 | #undef LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL |
88 | #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL c_warn_unused_global_decl | |
5d69f816 NB |
89 | #undef LANG_HOOKS_PRINT_IDENTIFIER |
90 | #define LANG_HOOKS_PRINT_IDENTIFIER c_print_identifier | |
b03e38e1 NB |
91 | #undef LANG_HOOKS_FUNCTION_ENTER_NESTED |
92 | #define LANG_HOOKS_FUNCTION_ENTER_NESTED c_push_function_context | |
93 | #undef LANG_HOOKS_FUNCTION_LEAVE_NESTED | |
94 | #define LANG_HOOKS_FUNCTION_LEAVE_NESTED c_pop_function_context | |
6de9cd9a DN |
95 | #undef LANG_HOOKS_FUNCTION_MISSING_NORETURN_OK_P |
96 | #define LANG_HOOKS_FUNCTION_MISSING_NORETURN_OK_P c_missing_noreturn_ok_p | |
63e1b1c4 NB |
97 | #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL |
98 | #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL c_dup_lang_specific_decl | |
4985cde3 | 99 | |
349ae713 NB |
100 | /* Attribute hooks. */ |
101 | #undef LANG_HOOKS_COMMON_ATTRIBUTE_TABLE | |
102 | #define LANG_HOOKS_COMMON_ATTRIBUTE_TABLE c_common_attribute_table | |
103 | #undef LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE | |
104 | #define LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE c_common_format_attribute_table | |
105 | ||
6de9cd9a DN |
106 | #undef LANG_HOOKS_TREE_INLINING_WALK_SUBTREES |
107 | #define LANG_HOOKS_TREE_INLINING_WALK_SUBTREES \ | |
108 | c_walk_subtrees | |
69dcadff AO |
109 | #undef LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN |
110 | #define LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN \ | |
111 | c_cannot_inline_tree_fn | |
112 | #undef LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS | |
113 | #define LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS \ | |
114 | c_disregard_inline_limits | |
6de9cd9a DN |
115 | #undef LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P |
116 | #define LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P \ | |
117 | c_tree_chain_matters_p | |
69dcadff AO |
118 | #undef LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P |
119 | #define LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P \ | |
120 | anon_aggr_type_p | |
f735a153 JJ |
121 | #undef LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING |
122 | #define LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING \ | |
123 | c_convert_parm_for_inlining | |
558ee214 JM |
124 | #undef LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN |
125 | #define LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN c_dump_tree | |
69dcadff | 126 | |
e72fcfe8 JH |
127 | #undef LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION |
128 | #define LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION c_expand_body | |
129 | ||
b0c48229 NB |
130 | #undef LANG_HOOKS_TYPE_FOR_MODE |
131 | #define LANG_HOOKS_TYPE_FOR_MODE c_common_type_for_mode | |
132 | #undef LANG_HOOKS_TYPE_FOR_SIZE | |
133 | #define LANG_HOOKS_TYPE_FOR_SIZE c_common_type_for_size | |
ceef8ce4 NB |
134 | #undef LANG_HOOKS_SIGNED_TYPE |
135 | #define LANG_HOOKS_SIGNED_TYPE c_common_signed_type | |
136 | #undef LANG_HOOKS_UNSIGNED_TYPE | |
137 | #define LANG_HOOKS_UNSIGNED_TYPE c_common_unsigned_type | |
138 | #undef LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE | |
139 | #define LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE c_common_signed_or_unsigned_type | |
7a228918 NB |
140 | #undef LANG_HOOKS_INCOMPLETE_TYPE_ERROR |
141 | #define LANG_HOOKS_INCOMPLETE_TYPE_ERROR c_incomplete_type_error | |
ab393bf1 NB |
142 | #undef LANG_HOOKS_TYPE_PROMOTES_TO |
143 | #define LANG_HOOKS_TYPE_PROMOTES_TO c_type_promotes_to | |
9649812a MM |
144 | #undef LANG_HOOKS_REGISTER_BUILTIN_TYPE |
145 | #define LANG_HOOKS_REGISTER_BUILTIN_TYPE c_register_builtin_type | |
b0c48229 | 146 | |
f75fbaf7 ZW |
147 | /* The C front end's scoping structure is very different from |
148 | that expected by the language-independent code; it is best | |
149 | to disable all of pushlevel, poplevel, set_block, and getdecls. | |
150 | This means it must also provide its own write_globals. */ | |
151 | ||
152 | #undef LANG_HOOKS_PUSHLEVEL | |
153 | #define LANG_HOOKS_PUSHLEVEL lhd_do_nothing_i | |
154 | #undef LANG_HOOKS_POPLEVEL | |
155 | #define LANG_HOOKS_POPLEVEL lhd_do_nothing_iii_return_null_tree | |
156 | #undef LANG_HOOKS_SET_BLOCK | |
157 | #define LANG_HOOKS_SET_BLOCK lhd_do_nothing_t | |
158 | #undef LANG_HOOKS_GETDECLS | |
159 | #define LANG_HOOKS_GETDECLS lhd_return_null_tree_v | |
d1bd0ded GK |
160 | #undef LANG_HOOKS_WRITE_GLOBALS |
161 | #define LANG_HOOKS_WRITE_GLOBALS c_write_global_declarations | |
162 | ||
6de9cd9a DN |
163 | /* Hooks for tree gimplification. */ |
164 | #undef LANG_HOOKS_GIMPLIFY_EXPR | |
165 | #define LANG_HOOKS_GIMPLIFY_EXPR c_gimplify_expr | |
166 | ||
167 | #undef LANG_HOOKS_TYPES_COMPATIBLE_P | |
168 | #define LANG_HOOKS_TYPES_COMPATIBLE_P c_types_compatible_p | |
169 | ||
0abc6a6a NB |
170 | /* ### When changing hooks, consider if ObjC needs changing too!! ### */ |
171 | ||
cd2a3ba2 | 172 | /* Each front end provides its own. */ |
3ac88239 | 173 | const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; |
cd2a3ba2 | 174 | |
2f9834e8 KG |
175 | /* Tree code classes. */ |
176 | ||
177 | #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE, | |
178 | ||
179 | const char tree_code_type[] = { | |
180 | #include "tree.def" | |
181 | 'x', | |
182 | #include "c-common.def" | |
183 | }; | |
184 | #undef DEFTREECODE | |
185 | ||
186 | /* Table indexed by tree code giving number of expression | |
187 | operands beyond the fixed part of the node structure. | |
188 | Not used for types or decls. */ | |
189 | ||
190 | #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH, | |
191 | ||
192 | const unsigned char tree_code_length[] = { | |
193 | #include "tree.def" | |
194 | 0, | |
195 | #include "c-common.def" | |
196 | }; | |
197 | #undef DEFTREECODE | |
198 | ||
199 | /* Names of tree components. | |
200 | Used for printing out the tree and error messages. */ | |
201 | #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME, | |
202 | ||
203 | const char *const tree_code_name[] = { | |
204 | #include "tree.def" | |
205 | "@@dummy", | |
206 | #include "c-common.def" | |
207 | }; | |
208 | #undef DEFTREECODE | |
209 | ||
2c5f4139 | 210 | void |
3346b668 | 211 | finish_file (void) |
2c5f4139 | 212 | { |
3b27886e | 213 | c_objc_common_finish_file (); |
2c5f4139 | 214 | } |
e2500fed | 215 | |
6de9cd9a DN |
216 | int |
217 | c_types_compatible_p (tree x, tree y) | |
218 | { | |
219 | return comptypes (TYPE_MAIN_VARIANT (x), TYPE_MAIN_VARIANT (y), 0); | |
220 | } | |
4b780675 GDR |
221 | static void |
222 | c_initialize_diagnostics (diagnostic_context *context) | |
223 | { | |
224 | pretty_printer *base = context->printer; | |
12ea3302 | 225 | c_pretty_printer *pp = xmalloc (sizeof (c_pretty_printer)); |
4b780675 GDR |
226 | memcpy (pp_base (pp), base, sizeof (pretty_printer)); |
227 | pp_c_pretty_printer_init (pp); | |
228 | context->printer = (pretty_printer *) pp; | |
229 | ||
230 | /* It is safe to free this object because it was previously malloc()'d. */ | |
231 | free (base); | |
232 | } | |
233 | ||
e2500fed | 234 | #include "gtype-c.h" |