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