]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/c-lang.c
Merge tree-ssa-20020619-branch into mainline.
[thirdparty/gcc.git] / gcc / c-lang.c
CommitLineData
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 5This file is part of GCC.
c0f940ef 6
1322177d
LB
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9Software Foundation; either version 2, or (at your option) any later
10version.
c0f940ef 11
1322177d
LB
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
c0f940ef
RS
16
17You should have received a copy of the GNU General Public License
1322177d
LB
18along with GCC; see the file COPYING. If not, write to the Free
19Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2002111-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
37static void c_initialize_diagnostics (diagnostic_context *);
a32f2771 38
37fa72e9 39enum 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 173const 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
179const 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
192const 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
203const char *const tree_code_name[] = {
204#include "tree.def"
205 "@@dummy",
206#include "c-common.def"
207};
208#undef DEFTREECODE
209
2c5f4139 210void
3346b668 211finish_file (void)
2c5f4139 212{
3b27886e 213 c_objc_common_finish_file ();
2c5f4139 214}
e2500fed 215
6de9cd9a
DN
216int
217c_types_compatible_p (tree x, tree y)
218{
219 return comptypes (TYPE_MAIN_VARIANT (x), TYPE_MAIN_VARIANT (y), 0);
220}
4b780675
GDR
221static void
222c_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"