langhooks-def.h revision 117395
190792Sgshapiro/* Default macros to initialize the lang_hooks data structure.
290792Sgshapiro   Copyright 2001, 2002 Free Software Foundation, Inc.
390792Sgshapiro   Contributed by Alexandre Oliva  <aoliva@redhat.com>
490792Sgshapiro
590792SgshapiroThis file is part of GNU CC.
690792Sgshapiro
790792SgshapiroGNU CC is free software; you can redistribute it and/or modify
890792Sgshapiroit under the terms of the GNU General Public License as published by
990792Sgshapirothe Free Software Foundation; either version 2, or (at your option)
1090792Sgshapiroany later version.
1190792Sgshapiro
1290792SgshapiroGNU CC is distributed in the hope that it will be useful,
1390792Sgshapirobut WITHOUT ANY WARRANTY; without even the implied warranty of
1490792SgshapiroMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1590792SgshapiroGNU General Public License for more details.
1690792Sgshapiro
1790792SgshapiroYou should have received a copy of the GNU General Public License
1890792Sgshapiroalong with GNU CC; see the file COPYING.  If not, write to
1990792Sgshapirothe Free Software Foundation, 59 Temple Place - Suite 330,
2090792SgshapiroBoston, MA 02111-1307, USA.  */
2190792Sgshapiro
2290792Sgshapiro#ifndef GCC_LANG_HOOKS_DEF_H
2390792Sgshapiro#define GCC_LANG_HOOKS_DEF_H
2490792Sgshapiro
2590792Sgshapiro#include "hooks.h"
2690792Sgshapiro
2790792Sgshapirostruct diagnostic_context;
2890792Sgshapiro
2990792Sgshapiro/* Provide a hook routine for alias sets that always returns 1.  This is
3090792Sgshapiro   used by languages that haven't deal with alias sets yet.  */
3190792Sgshapiroextern HOST_WIDE_INT hook_get_alias_set_0	PARAMS ((tree));
3290792Sgshapiro
3390792Sgshapiro/* Note to creators of new hooks:
3490792Sgshapiro
3590792Sgshapiro   The macros in this file should NOT be surrounded by a
3690792Sgshapiro   #ifdef...#endif pair, since this file declares the defaults.  Each
3790792Sgshapiro   front end overrides any hooks it wishes to, in the file containing
3890792Sgshapiro   its struct lang_hooks, AFTER including this file.
3990792Sgshapiro
4090792Sgshapiro   Prefix all default hooks with "lhd_".  */
4190792Sgshapiro
4290792Sgshapiro/* See langhooks.h for the definition and documentation of each hook.  */
4390792Sgshapiro
4490792Sgshapiroextern void lhd_do_nothing PARAMS ((void));
4590792Sgshapiroextern void lhd_do_nothing_t PARAMS ((tree));
4690792Sgshapiroextern void lhd_do_nothing_i PARAMS ((int));
4790792Sgshapiroextern void lhd_do_nothing_f PARAMS ((struct function *));
4890792Sgshapiroextern int lhd_decode_option PARAMS ((int, char **));
4990792Sgshapiroextern HOST_WIDE_INT lhd_get_alias_set PARAMS ((tree));
5090792Sgshapiroextern tree lhd_return_tree PARAMS ((tree));
5190792Sgshapiroextern tree lhd_return_null_tree PARAMS ((tree));
5290792Sgshapiroextern int lhd_safe_from_p PARAMS ((rtx, tree));
5390792Sgshapiroextern int lhd_staticp PARAMS ((tree));
5490792Sgshapiroextern int lhd_unsafe_for_reeval PARAMS ((tree));
5590792Sgshapiroextern void lhd_clear_binding_stack PARAMS ((void));
5690792Sgshapiroextern void lhd_print_tree_nothing PARAMS ((FILE *, tree, int));
5790792Sgshapiroextern const char *lhd_decl_printable_name PARAMS ((tree, int));
5890792Sgshapiroextern rtx lhd_expand_expr PARAMS ((tree, rtx, enum machine_mode, int));
5990792Sgshapiroextern void lhd_print_error_function PARAMS ((struct diagnostic_context *,
6090792Sgshapiro					      const char *));
6190792Sgshapiroextern void lhd_set_decl_assembler_name PARAMS ((tree));
6290792Sgshapiroextern bool lhd_can_use_bit_fields_p PARAMS ((void));
6390792Sgshapiroextern bool lhd_warn_unused_global_decl PARAMS ((tree));
6490792Sgshapiroextern void lhd_incomplete_type_error PARAMS ((tree, tree));
6590792Sgshapiroextern tree lhd_type_promotes_to PARAMS ((tree));
6690792Sgshapiroextern bool lhd_decl_ok_for_sibcall PARAMS ((tree));
6790792Sgshapiroextern tree lhd_expr_size PARAMS ((tree));
6890792Sgshapiro
6990792Sgshapiro/* Declarations of default tree inlining hooks.  */
7090792Sgshapirotree lhd_tree_inlining_walk_subtrees		PARAMS ((tree *, int *,
7190792Sgshapiro							 walk_tree_fn,
7290792Sgshapiro							 void *, void *));
7390792Sgshapiroint lhd_tree_inlining_cannot_inline_tree_fn	PARAMS ((tree *));
7490792Sgshapiroint lhd_tree_inlining_disregard_inline_limits	PARAMS ((tree));
7590792Sgshapirotree lhd_tree_inlining_add_pending_fn_decls	PARAMS ((void *, tree));
7690792Sgshapiroint lhd_tree_inlining_tree_chain_matters_p	PARAMS ((tree));
7790792Sgshapiroint lhd_tree_inlining_auto_var_in_fn_p		PARAMS ((tree, tree));
7890792Sgshapirotree lhd_tree_inlining_copy_res_decl_for_inlining PARAMS ((tree, tree,
7990792Sgshapiro							   tree, void *,
8090792Sgshapiro							   int *, void *));
8190792Sgshapiroint lhd_tree_inlining_anon_aggr_type_p		PARAMS ((tree));
8290792Sgshapiroint lhd_tree_inlining_start_inlining		PARAMS ((tree));
8390792Sgshapirovoid lhd_tree_inlining_end_inlining		PARAMS ((tree));
8490792Sgshapirotree lhd_tree_inlining_convert_parm_for_inlining PARAMS ((tree, tree, tree));
8590792Sgshapiro
8690792Sgshapirovoid write_global_declarations PARAMS ((void));
8790792Sgshapiro
8890792Sgshapiro#define LANG_HOOKS_NAME			"GNU unknown"
8990792Sgshapiro#define LANG_HOOKS_IDENTIFIER_SIZE	sizeof (struct lang_identifier)
9090792Sgshapiro#define LANG_HOOKS_INIT			lhd_do_nothing
9190792Sgshapiro#define LANG_HOOKS_FINISH		lhd_do_nothing
9290792Sgshapiro#define LANG_HOOKS_PARSE_FILE		lhd_do_nothing_i
9390792Sgshapiro#define LANG_HOOKS_CLEAR_BINDING_STACK	lhd_clear_binding_stack
9490792Sgshapiro#define LANG_HOOKS_INIT_OPTIONS		lhd_do_nothing
9590792Sgshapiro#define LANG_HOOKS_DECODE_OPTION	lhd_decode_option
9690792Sgshapiro#define LANG_HOOKS_POST_OPTIONS		hook_bool_void_false
9790792Sgshapiro#define LANG_HOOKS_GET_ALIAS_SET	lhd_get_alias_set
9890792Sgshapiro#define LANG_HOOKS_EXPAND_CONSTANT	lhd_return_tree
9990792Sgshapiro#define LANG_HOOKS_EXPAND_EXPR		lhd_expand_expr
10090792Sgshapiro#define LANG_HOOKS_SAFE_FROM_P		lhd_safe_from_p
10190792Sgshapiro#define LANG_HOOKS_FINISH_INCOMPLETE_DECL lhd_do_nothing_t
10290792Sgshapiro#define LANG_HOOKS_UNSAFE_FOR_REEVAL	lhd_unsafe_for_reeval
10390792Sgshapiro#define LANG_HOOKS_STATICP		lhd_staticp
10490792Sgshapiro#define LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES lhd_do_nothing_t
10590792Sgshapiro#define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL lhd_do_nothing_t
10690792Sgshapiro#define LANG_HOOKS_UNSAVE_EXPR_NOW	lhd_unsave_expr_now
10790792Sgshapiro#define LANG_HOOKS_MAYBE_BUILD_CLEANUP	lhd_return_null_tree
10890792Sgshapiro#define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME lhd_set_decl_assembler_name
10990792Sgshapiro#define LANG_HOOKS_CAN_USE_BIT_FIELDS_P lhd_can_use_bit_fields_p
11090792Sgshapiro#define LANG_HOOKS_HONOR_READONLY	false
11190792Sgshapiro#define LANG_HOOKS_PRINT_STATISTICS	lhd_do_nothing
11290792Sgshapiro#define LANG_HOOKS_PRINT_XNODE		lhd_print_tree_nothing
11390792Sgshapiro#define LANG_HOOKS_PRINT_DECL		lhd_print_tree_nothing
11490792Sgshapiro#define LANG_HOOKS_PRINT_TYPE		lhd_print_tree_nothing
11590792Sgshapiro#define LANG_HOOKS_PRINT_IDENTIFIER	lhd_print_tree_nothing
11690792Sgshapiro#define LANG_HOOKS_PRINT_ERROR_FUNCTION lhd_print_error_function
11790792Sgshapiro#define LANG_HOOKS_DECL_PRINTABLE_NAME	lhd_decl_printable_name
11890792Sgshapiro#define LANG_HOOKS_EXPR_SIZE		lhd_expr_size
11990792Sgshapiro
12090792Sgshapiro#define LANG_HOOKS_FUNCTION_INIT	lhd_do_nothing_f
12190792Sgshapiro#define LANG_HOOKS_FUNCTION_FINAL	lhd_do_nothing_f
12290792Sgshapiro#define LANG_HOOKS_FUNCTION_ENTER_NESTED lhd_do_nothing_f
12390792Sgshapiro#define LANG_HOOKS_FUNCTION_LEAVE_NESTED lhd_do_nothing_f
12490792Sgshapiro
12590792Sgshapiro/* Attribute hooks.  */
12690792Sgshapiro#define LANG_HOOKS_ATTRIBUTE_TABLE		NULL
12790792Sgshapiro#define LANG_HOOKS_COMMON_ATTRIBUTE_TABLE	NULL
12890792Sgshapiro#define LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE	NULL
12990792Sgshapiro
13090792Sgshapiro/* Tree inlining hooks.  */
13190792Sgshapiro#define LANG_HOOKS_TREE_INLINING_WALK_SUBTREES lhd_tree_inlining_walk_subtrees
13290792Sgshapiro#define LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN \
13390792Sgshapiro  lhd_tree_inlining_cannot_inline_tree_fn
13490792Sgshapiro#define LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS \
13590792Sgshapiro  lhd_tree_inlining_disregard_inline_limits
13690792Sgshapiro#define LANG_HOOKS_TREE_INLINING_ADD_PENDING_FN_DECLS \
13790792Sgshapiro  lhd_tree_inlining_add_pending_fn_decls
13890792Sgshapiro#define LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P \
13990792Sgshapiro  lhd_tree_inlining_tree_chain_matters_p
14090792Sgshapiro#define LANG_HOOKS_TREE_INLINING_AUTO_VAR_IN_FN_P \
14190792Sgshapiro  lhd_tree_inlining_auto_var_in_fn_p
14290792Sgshapiro#define LANG_HOOKS_TREE_INLINING_COPY_RES_DECL_FOR_INLINING \
14390792Sgshapiro  lhd_tree_inlining_copy_res_decl_for_inlining
14490792Sgshapiro#define LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P \
14590792Sgshapiro  lhd_tree_inlining_anon_aggr_type_p
14690792Sgshapiro#define LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P \
14790792Sgshapiro  hook_bool_tree_false
14890792Sgshapiro#define LANG_HOOKS_TREE_INLINING_START_INLINING \
14990792Sgshapiro  lhd_tree_inlining_start_inlining
15090792Sgshapiro#define LANG_HOOKS_TREE_INLINING_END_INLINING \
15190792Sgshapiro  lhd_tree_inlining_end_inlining
15290792Sgshapiro#define LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING \
15390792Sgshapiro  lhd_tree_inlining_convert_parm_for_inlining
15490792Sgshapiro
155#define LANG_HOOKS_TREE_INLINING_INITIALIZER { \
156  LANG_HOOKS_TREE_INLINING_WALK_SUBTREES, \
157  LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN, \
158  LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS, \
159  LANG_HOOKS_TREE_INLINING_ADD_PENDING_FN_DECLS, \
160  LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P, \
161  LANG_HOOKS_TREE_INLINING_AUTO_VAR_IN_FN_P, \
162  LANG_HOOKS_TREE_INLINING_COPY_RES_DECL_FOR_INLINING, \
163  LANG_HOOKS_TREE_INLINING_ANON_AGGR_TYPE_P, \
164  LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P, \
165  LANG_HOOKS_TREE_INLINING_START_INLINING, \
166  LANG_HOOKS_TREE_INLINING_END_INLINING, \
167  LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING \
168} \
169
170#define LANG_HOOKS_FUNCTION_INITIALIZER {	\
171  LANG_HOOKS_FUNCTION_INIT,			\
172  LANG_HOOKS_FUNCTION_FINAL,			\
173  LANG_HOOKS_FUNCTION_ENTER_NESTED,		\
174  LANG_HOOKS_FUNCTION_LEAVE_NESTED		\
175}
176
177/* Tree dump hooks.  */
178int lhd_tree_dump_dump_tree 			PARAMS ((void *, tree));
179int lhd_tree_dump_type_quals			PARAMS ((tree));
180
181#define LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN lhd_tree_dump_dump_tree
182#define LANG_HOOKS_TREE_DUMP_TYPE_QUALS_FN lhd_tree_dump_type_quals
183
184#define LANG_HOOKS_TREE_DUMP_INITIALIZER { \
185  LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN, \
186  LANG_HOOKS_TREE_DUMP_TYPE_QUALS_FN \
187}
188
189/* Types hooks.  There are no reasonable defaults for most of them,
190   so we create a compile-time error instead.  */
191#define LANG_HOOKS_MAKE_TYPE make_node
192#define LANG_HOOKS_INCOMPLETE_TYPE_ERROR lhd_incomplete_type_error
193#define LANG_HOOKS_TYPE_PROMOTES_TO lhd_type_promotes_to
194
195#define LANG_HOOKS_FOR_TYPES_INITIALIZER { \
196  LANG_HOOKS_MAKE_TYPE, \
197  LANG_HOOKS_TYPE_FOR_MODE, \
198  LANG_HOOKS_TYPE_FOR_SIZE, \
199  LANG_HOOKS_UNSIGNED_TYPE, \
200  LANG_HOOKS_SIGNED_TYPE, \
201  LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE, \
202  LANG_HOOKS_TYPE_PROMOTES_TO, \
203  LANG_HOOKS_INCOMPLETE_TYPE_ERROR \
204}
205
206/* Declaration hooks.  */
207#define LANG_HOOKS_PUSHLEVEL	pushlevel
208#define LANG_HOOKS_POPLEVEL	poplevel
209#define LANG_HOOKS_GLOBAL_BINDINGS_P global_bindings_p
210#define LANG_HOOKS_INSERT_BLOCK	insert_block
211#define LANG_HOOKS_SET_BLOCK	set_block
212#define LANG_HOOKS_PUSHDECL	pushdecl
213#define LANG_HOOKS_GETDECLS	getdecls
214#define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL lhd_warn_unused_global_decl
215#define LANG_HOOKS_WRITE_GLOBALS write_global_declarations
216#define LANG_HOOKS_DECL_OK_FOR_SIBCALL	lhd_decl_ok_for_sibcall
217
218#define LANG_HOOKS_DECLS { \
219  LANG_HOOKS_PUSHLEVEL, \
220  LANG_HOOKS_POPLEVEL, \
221  LANG_HOOKS_GLOBAL_BINDINGS_P, \
222  LANG_HOOKS_INSERT_BLOCK, \
223  LANG_HOOKS_SET_BLOCK, \
224  LANG_HOOKS_PUSHDECL, \
225  LANG_HOOKS_GETDECLS, \
226  LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL, \
227  LANG_HOOKS_WRITE_GLOBALS, \
228  LANG_HOOKS_DECL_OK_FOR_SIBCALL, \
229}
230
231/* The whole thing.  The structure is defined in langhooks.h.  */
232#define LANG_HOOKS_INITIALIZER { \
233  LANG_HOOKS_NAME, \
234  LANG_HOOKS_IDENTIFIER_SIZE, \
235  LANG_HOOKS_INIT_OPTIONS, \
236  LANG_HOOKS_DECODE_OPTION, \
237  LANG_HOOKS_POST_OPTIONS, \
238  LANG_HOOKS_INIT, \
239  LANG_HOOKS_FINISH, \
240  LANG_HOOKS_PARSE_FILE, \
241  LANG_HOOKS_CLEAR_BINDING_STACK, \
242  LANG_HOOKS_GET_ALIAS_SET, \
243  LANG_HOOKS_EXPAND_CONSTANT, \
244  LANG_HOOKS_EXPAND_EXPR, \
245  LANG_HOOKS_TRUTHVALUE_CONVERSION, \
246  LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES, \
247  LANG_HOOKS_SAFE_FROM_P, \
248  LANG_HOOKS_FINISH_INCOMPLETE_DECL, \
249  LANG_HOOKS_UNSAFE_FOR_REEVAL, \
250  LANG_HOOKS_MARK_ADDRESSABLE, \
251  LANG_HOOKS_STATICP, \
252  LANG_HOOKS_DUP_LANG_SPECIFIC_DECL, \
253  LANG_HOOKS_UNSAVE_EXPR_NOW, \
254  LANG_HOOKS_MAYBE_BUILD_CLEANUP, \
255  LANG_HOOKS_SET_DECL_ASSEMBLER_NAME, \
256  LANG_HOOKS_CAN_USE_BIT_FIELDS_P, \
257  LANG_HOOKS_HONOR_READONLY, \
258  LANG_HOOKS_PRINT_STATISTICS, \
259  LANG_HOOKS_PRINT_XNODE, \
260  LANG_HOOKS_PRINT_DECL, \
261  LANG_HOOKS_PRINT_TYPE, \
262  LANG_HOOKS_PRINT_IDENTIFIER, \
263  LANG_HOOKS_DECL_PRINTABLE_NAME, \
264  LANG_HOOKS_PRINT_ERROR_FUNCTION, \
265  LANG_HOOKS_EXPR_SIZE, \
266  LANG_HOOKS_ATTRIBUTE_TABLE, \
267  LANG_HOOKS_COMMON_ATTRIBUTE_TABLE, \
268  LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE, \
269  LANG_HOOKS_FUNCTION_INITIALIZER, \
270  LANG_HOOKS_TREE_INLINING_INITIALIZER, \
271  LANG_HOOKS_TREE_DUMP_INITIALIZER, \
272  LANG_HOOKS_DECLS, \
273  LANG_HOOKS_FOR_TYPES_INITIALIZER \
274}
275
276#endif /* GCC_LANG_HOOKS_DEF_H */
277