]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/langhooks-def.h
./:
[thirdparty/gcc.git] / gcc / langhooks-def.h
CommitLineData
b0278d39 1/* Default macros to initialize the lang_hooks data structure.
551c9b1b 2 Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
b0278d39 3 Contributed by Alexandre Oliva <aoliva@redhat.com>
4
4642865b 5This file is part of GCC.
b0278d39 6
4642865b 7GCC is free software; you can redistribute it and/or modify
b0278d39 8it under the terms of the GNU General Public License as published by
8c4c00c1 9the Free Software Foundation; either version 3, or (at your option)
b0278d39 10any later version.
11
4642865b 12GCC is distributed in the hope that it will be useful,
b0278d39 13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
8c4c00c1 18along with GCC; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>. */
b0278d39 20
21#ifndef GCC_LANG_HOOKS_DEF_H
22#define GCC_LANG_HOOKS_DEF_H
23
dd436eaf 24#include "hooks.h"
25
6c7ff025 26struct diagnostic_context;
27
b0278d39 28/* Note to creators of new hooks:
29
30 The macros in this file should NOT be surrounded by a
31 #ifdef...#endif pair, since this file declares the defaults. Each
32 front end overrides any hooks it wishes to, in the file containing
e938cdf5 33 its struct lang_hooks, AFTER including this file. */
b0278d39 34
35/* See langhooks.h for the definition and documentation of each hook. */
36
3ad4992f 37extern void lhd_do_nothing (void);
38extern void lhd_do_nothing_t (tree);
39extern void lhd_do_nothing_i (int);
40extern void lhd_do_nothing_f (struct function *);
41extern bool lhd_post_options (const char **);
32c2fdea 42extern alias_set_type lhd_get_alias_set (tree);
3ad4992f 43extern tree lhd_return_tree (tree);
54bd1509 44extern tree lhd_return_null_tree_v (void);
3ad4992f 45extern tree lhd_return_null_tree (tree);
b7bf20db 46extern tree lhd_return_null_const_tree (const_tree);
37b9a732 47extern tree lhd_do_nothing_iii_return_null_tree (int, int, int);
cf484390 48extern tree lhd_staticp (tree);
3ad4992f 49extern void lhd_print_tree_nothing (FILE *, tree, int);
50extern const char *lhd_decl_printable_name (tree, int);
7d709201 51extern const char *lhd_dwarf_name (tree, int);
4ee9c684 52extern int lhd_types_compatible_p (tree, tree);
60ffaf4d 53extern rtx lhd_expand_expr (tree, rtx, enum machine_mode, int, rtx *);
4ee9c684 54extern int lhd_expand_decl (tree);
3ad4992f 55extern void lhd_print_error_function (struct diagnostic_context *,
56 const char *);
57extern void lhd_set_decl_assembler_name (tree);
3ad4992f 58extern bool lhd_warn_unused_global_decl (tree);
59extern void lhd_incomplete_type_error (tree, tree);
60extern tree lhd_type_promotes_to (tree);
b268e47e 61extern void lhd_register_builtin_type (tree, const char *);
3ad4992f 62extern bool lhd_decl_ok_for_sibcall (tree);
537cd941 63extern const char *lhd_comdat_group (tree);
3ad4992f 64extern tree lhd_expr_size (tree);
65extern size_t lhd_tree_size (enum tree_code);
624d37a6 66extern HOST_WIDE_INT lhd_to_target_charset (HOST_WIDE_INT);
54d7165a 67extern tree lhd_expr_to_decl (tree, bool *, bool *, bool *);
54be5d7e 68extern tree lhd_builtin_function (tree decl);
b0278d39 69
70/* Declarations of default tree inlining hooks. */
3ad4992f 71extern tree lhd_tree_inlining_walk_subtrees (tree *, int *, walk_tree_fn,
c6224531 72 void *, struct pointer_set_t*);
3ad4992f 73extern int lhd_tree_inlining_cannot_inline_tree_fn (tree *);
74extern int lhd_tree_inlining_disregard_inline_limits (tree);
3ad4992f 75extern int lhd_tree_inlining_auto_var_in_fn_p (tree, tree);
f63da8d3 76extern void lhd_initialize_diagnostics (struct diagnostic_context *);
ec1e35b2 77extern tree lhd_callgraph_analyze_expr (tree *, int *, tree);
78
3ad4992f 79
4ee9c684 80/* Declarations for tree gimplification hooks. */
81extern int lhd_gimplify_expr (tree *, tree *, tree *);
1e8e9920 82extern enum omp_clause_default_kind lhd_omp_predetermined_sharing (tree);
83extern tree lhd_omp_assignment (tree, tree, tree);
84struct gimplify_omp_ctx;
85extern void lhd_omp_firstprivatize_type_sizes (struct gimplify_omp_ctx *,
86 tree);
4ee9c684 87
d19bd1f0 88#define LANG_HOOKS_NAME "GNU unknown"
89#define LANG_HOOKS_IDENTIFIER_SIZE sizeof (struct lang_identifier)
03bde601 90#define LANG_HOOKS_INIT hook_bool_void_false
b0278d39 91#define LANG_HOOKS_FINISH lhd_do_nothing
1c542e4c 92#define LANG_HOOKS_PARSE_FILE lhd_do_nothing_i
d458bdd7 93#define LANG_HOOKS_CLEAR_BINDING_STACK lhd_do_nothing
4838a8b6 94#define LANG_HOOKS_INIT_OPTIONS hook_uint_uint_constcharptrptr_0
b6e50631 95#define LANG_HOOKS_INITIALIZE_DIAGNOSTICS lhd_initialize_diagnostics
4838a8b6 96#define LANG_HOOKS_HANDLE_OPTION hook_int_size_t_constcharptr_int_0
76bf7746 97#define LANG_HOOKS_MISSING_ARGUMENT hook_bool_constcharptr_size_t_false
03bde601 98#define LANG_HOOKS_POST_OPTIONS lhd_post_options
b0278d39 99#define LANG_HOOKS_GET_ALIAS_SET lhd_get_alias_set
b3187c7c 100#define LANG_HOOKS_EXPAND_CONSTANT lhd_return_tree
b467ecc1 101#define LANG_HOOKS_EXPAND_EXPR lhd_expand_expr
4ee9c684 102#define LANG_HOOKS_EXPAND_DECL lhd_expand_decl
ee23fd7b 103#define LANG_HOOKS_FINISH_INCOMPLETE_DECL lhd_do_nothing_t
cf484390 104#define LANG_HOOKS_STATICP lhd_staticp
dbc42b78 105#define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL lhd_do_nothing_t
d1f6c8f2 106#define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME lhd_set_decl_assembler_name
4f7f7efd 107#define LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS false
685b5cc2 108#define LANG_HOOKS_NO_BODY_BLOCKS false
b7fced5e 109#define LANG_HOOKS_PRINT_STATISTICS lhd_do_nothing
110#define LANG_HOOKS_PRINT_XNODE lhd_print_tree_nothing
111#define LANG_HOOKS_PRINT_DECL lhd_print_tree_nothing
112#define LANG_HOOKS_PRINT_TYPE lhd_print_tree_nothing
113#define LANG_HOOKS_PRINT_IDENTIFIER lhd_print_tree_nothing
6c7ff025 114#define LANG_HOOKS_PRINT_ERROR_FUNCTION lhd_print_error_function
96554925 115#define LANG_HOOKS_DECL_PRINTABLE_NAME lhd_decl_printable_name
7d709201 116#define LANG_HOOKS_DWARF_NAME lhd_dwarf_name
b7bf20db 117#define LANG_HOOKS_GET_CALLEE_FNDECL lhd_return_null_const_tree
c3f16ae3 118#define LANG_HOOKS_EXPR_SIZE lhd_expr_size
295e387a 119#define LANG_HOOKS_TREE_SIZE lhd_tree_size
4ee9c684 120#define LANG_HOOKS_TYPES_COMPATIBLE_P lhd_types_compatible_p
54be5d7e 121#define LANG_HOOKS_BUILTIN_FUNCTION lhd_builtin_function
54d7165a 122#define LANG_HOOKS_EXPR_TO_DECL lhd_expr_to_decl
624d37a6 123#define LANG_HOOKS_TO_TARGET_CHARSET lhd_to_target_charset
5ded8c6f 124#define LANG_HOOKS_INIT_TS lhd_do_nothing
b0278d39 125
c80c4f22 126#define LANG_HOOKS_FUNCTION_INIT lhd_do_nothing_f
1f3233d1 127#define LANG_HOOKS_FUNCTION_FINAL lhd_do_nothing_f
c80c4f22 128#define LANG_HOOKS_FUNCTION_ENTER_NESTED lhd_do_nothing_f
129#define LANG_HOOKS_FUNCTION_LEAVE_NESTED lhd_do_nothing_f
4ee9c684 130#define LANG_HOOKS_FUNCTION_MISSING_NORETURN_OK_P hook_bool_tree_true
90e3d9ba 131
f8e93a2e 132/* Attribute hooks. */
133#define LANG_HOOKS_ATTRIBUTE_TABLE NULL
134#define LANG_HOOKS_COMMON_ATTRIBUTE_TABLE NULL
135#define LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE NULL
136
b0278d39 137/* Tree inlining hooks. */
138#define LANG_HOOKS_TREE_INLINING_WALK_SUBTREES lhd_tree_inlining_walk_subtrees
139#define LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN \
140 lhd_tree_inlining_cannot_inline_tree_fn
141#define LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS \
142 lhd_tree_inlining_disregard_inline_limits
b0278d39 143#define LANG_HOOKS_TREE_INLINING_AUTO_VAR_IN_FN_P \
144 lhd_tree_inlining_auto_var_in_fn_p
21ac3a84 145#define LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P \
1f8a6ff8 146 hook_bool_tree_tree_false
b0278d39 147
148#define LANG_HOOKS_TREE_INLINING_INITIALIZER { \
149 LANG_HOOKS_TREE_INLINING_WALK_SUBTREES, \
150 LANG_HOOKS_TREE_INLINING_CANNOT_INLINE_TREE_FN, \
151 LANG_HOOKS_TREE_INLINING_DISREGARD_INLINE_LIMITS, \
b0278d39 152 LANG_HOOKS_TREE_INLINING_AUTO_VAR_IN_FN_P, \
21ac3a84 153 LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P, \
ec1e35b2 154}
b0278d39 155
ec1e35b2 156#define LANG_HOOKS_CALLGRAPH_ANALYZE_EXPR lhd_callgraph_analyze_expr
833eb724 157#define LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION NULL
158
159#define LANG_HOOKS_CALLGRAPH_INITIALIZER { \
ec1e35b2 160 LANG_HOOKS_CALLGRAPH_ANALYZE_EXPR, \
833eb724 161 LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION, \
ec1e35b2 162}
833eb724 163
1f3233d1 164#define LANG_HOOKS_FUNCTION_INITIALIZER { \
165 LANG_HOOKS_FUNCTION_INIT, \
166 LANG_HOOKS_FUNCTION_FINAL, \
167 LANG_HOOKS_FUNCTION_ENTER_NESTED, \
4ee9c684 168 LANG_HOOKS_FUNCTION_LEAVE_NESTED, \
169 LANG_HOOKS_FUNCTION_MISSING_NORETURN_OK_P \
c80c4f22 170}
171
4ee9c684 172/* Hooks for tree gimplification. */
173#define LANG_HOOKS_GIMPLIFY_EXPR lhd_gimplify_expr
215e2f1d 174#define LANG_HOOKS_FOLD_OBJ_TYPE_REF NULL
90e3d9ba 175
3119c950 176/* Tree dump hooks. */
3ad4992f 177extern bool lhd_tree_dump_dump_tree (void *, tree);
178extern int lhd_tree_dump_type_quals (tree);
674b05f5 179extern tree lhd_make_node (enum tree_code);
3119c950 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 \
20325f61 187}
188
ee23fd7b 189/* Types hooks. There are no reasonable defaults for most of them,
190 so we create a compile-time error instead. */
674b05f5 191#define LANG_HOOKS_MAKE_TYPE lhd_make_node
1dd25100 192#define LANG_HOOKS_INCOMPLETE_TYPE_ERROR lhd_incomplete_type_error
0e4744ac 193#define LANG_HOOKS_GENERIC_TYPE_P hook_bool_tree_false
63c62881 194#define LANG_HOOKS_TYPE_PROMOTES_TO lhd_type_promotes_to
b268e47e 195#define LANG_HOOKS_REGISTER_BUILTIN_TYPE lhd_register_builtin_type
b225134e 196#define LANG_HOOKS_TYPE_MAX_SIZE lhd_return_null_tree
1e8e9920 197#define LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES \
198 lhd_omp_firstprivatize_type_sizes
a26d3281 199#define LANG_HOOKS_HASH_TYPES true
a1f71e15 200
201#define LANG_HOOKS_FOR_TYPES_INITIALIZER { \
771d21fa 202 LANG_HOOKS_MAKE_TYPE, \
203 LANG_HOOKS_TYPE_FOR_MODE, \
4070745f 204 LANG_HOOKS_TYPE_FOR_SIZE, \
0e4744ac 205 LANG_HOOKS_GENERIC_TYPE_P, \
63c62881 206 LANG_HOOKS_TYPE_PROMOTES_TO, \
b268e47e 207 LANG_HOOKS_REGISTER_BUILTIN_TYPE, \
a26d3281 208 LANG_HOOKS_INCOMPLETE_TYPE_ERROR, \
b225134e 209 LANG_HOOKS_TYPE_MAX_SIZE, \
1e8e9920 210 LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES, \
a26d3281 211 LANG_HOOKS_HASH_TYPES \
a1f71e15 212}
213
20325f61 214/* Declaration hooks. */
20325f61 215#define LANG_HOOKS_GLOBAL_BINDINGS_P global_bindings_p
216#define LANG_HOOKS_INSERT_BLOCK insert_block
20325f61 217#define LANG_HOOKS_PUSHDECL pushdecl
218#define LANG_HOOKS_GETDECLS getdecls
8d58a5a7 219#define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL lhd_warn_unused_global_decl
28db4d96 220#define LANG_HOOKS_WRITE_GLOBALS write_global_declarations
e2e9c55b 221#define LANG_HOOKS_DECL_OK_FOR_SIBCALL lhd_decl_ok_for_sibcall
537cd941 222#define LANG_HOOKS_COMDAT_GROUP lhd_comdat_group
1e8e9920 223#define LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE hook_bool_tree_false
224#define LANG_HOOKS_OMP_PREDETERMINED_SHARING lhd_omp_predetermined_sharing
225#define LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR hook_bool_tree_bool_false
226#define LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE hook_bool_tree_bool_false
227#define LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR hook_tree_tree_tree_null
228#define LANG_HOOKS_OMP_CLAUSE_COPY_CTOR lhd_omp_assignment
229#define LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP lhd_omp_assignment
230#define LANG_HOOKS_OMP_CLAUSE_DTOR hook_tree_tree_tree_null
20325f61 231
232#define LANG_HOOKS_DECLS { \
20325f61 233 LANG_HOOKS_GLOBAL_BINDINGS_P, \
234 LANG_HOOKS_INSERT_BLOCK, \
20325f61 235 LANG_HOOKS_PUSHDECL, \
8d58a5a7 236 LANG_HOOKS_GETDECLS, \
28db4d96 237 LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL, \
e2e9c55b 238 LANG_HOOKS_WRITE_GLOBALS, \
239 LANG_HOOKS_DECL_OK_FOR_SIBCALL, \
1e8e9920 240 LANG_HOOKS_COMDAT_GROUP, \
241 LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE, \
242 LANG_HOOKS_OMP_PREDETERMINED_SHARING, \
243 LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR, \
244 LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE, \
245 LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR, \
246 LANG_HOOKS_OMP_CLAUSE_COPY_CTOR, \
247 LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP, \
248 LANG_HOOKS_OMP_CLAUSE_DTOR \
20325f61 249}
3119c950 250
251/* The whole thing. The structure is defined in langhooks.h. */
b0278d39 252#define LANG_HOOKS_INITIALIZER { \
d19bd1f0 253 LANG_HOOKS_NAME, \
254 LANG_HOOKS_IDENTIFIER_SIZE, \
295e387a 255 LANG_HOOKS_TREE_SIZE, \
b0278d39 256 LANG_HOOKS_INIT_OPTIONS, \
b6e50631 257 LANG_HOOKS_INITIALIZE_DIAGNOSTICS, \
5457b645 258 LANG_HOOKS_HANDLE_OPTION, \
76bf7746 259 LANG_HOOKS_MISSING_ARGUMENT, \
b0278d39 260 LANG_HOOKS_POST_OPTIONS, \
435fb09b 261 LANG_HOOKS_INIT, \
262 LANG_HOOKS_FINISH, \
b78207a0 263 LANG_HOOKS_PARSE_FILE, \
435fb09b 264 LANG_HOOKS_CLEAR_BINDING_STACK, \
b0278d39 265 LANG_HOOKS_GET_ALIAS_SET, \
b3187c7c 266 LANG_HOOKS_EXPAND_CONSTANT, \
b467ecc1 267 LANG_HOOKS_EXPAND_EXPR, \
4ee9c684 268 LANG_HOOKS_EXPAND_DECL, \
ee23fd7b 269 LANG_HOOKS_FINISH_INCOMPLETE_DECL, \
9b86eec0 270 LANG_HOOKS_MARK_ADDRESSABLE, \
cf484390 271 LANG_HOOKS_STATICP, \
dbc42b78 272 LANG_HOOKS_DUP_LANG_SPECIFIC_DECL, \
d1f6c8f2 273 LANG_HOOKS_SET_DECL_ASSEMBLER_NAME, \
4f7f7efd 274 LANG_HOOKS_REDUCE_BIT_FIELD_OPERATIONS, \
685b5cc2 275 LANG_HOOKS_NO_BODY_BLOCKS, \
b7fced5e 276 LANG_HOOKS_PRINT_STATISTICS, \
277 LANG_HOOKS_PRINT_XNODE, \
278 LANG_HOOKS_PRINT_DECL, \
279 LANG_HOOKS_PRINT_TYPE, \
280 LANG_HOOKS_PRINT_IDENTIFIER, \
96554925 281 LANG_HOOKS_DECL_PRINTABLE_NAME, \
7d709201 282 LANG_HOOKS_DWARF_NAME, \
4ee9c684 283 LANG_HOOKS_TYPES_COMPATIBLE_P, \
264f4f30 284 LANG_HOOKS_GET_CALLEE_FNDECL, \
6c7ff025 285 LANG_HOOKS_PRINT_ERROR_FUNCTION, \
c3f16ae3 286 LANG_HOOKS_EXPR_SIZE, \
624d37a6 287 LANG_HOOKS_TO_TARGET_CHARSET, \
f8e93a2e 288 LANG_HOOKS_ATTRIBUTE_TABLE, \
289 LANG_HOOKS_COMMON_ATTRIBUTE_TABLE, \
290 LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE, \
c80c4f22 291 LANG_HOOKS_FUNCTION_INITIALIZER, \
3119c950 292 LANG_HOOKS_TREE_INLINING_INITIALIZER, \
833eb724 293 LANG_HOOKS_CALLGRAPH_INITIALIZER, \
20325f61 294 LANG_HOOKS_TREE_DUMP_INITIALIZER, \
a1f71e15 295 LANG_HOOKS_DECLS, \
90e3d9ba 296 LANG_HOOKS_FOR_TYPES_INITIALIZER, \
4ee9c684 297 LANG_HOOKS_GIMPLIFY_EXPR, \
215e2f1d 298 LANG_HOOKS_FOLD_OBJ_TYPE_REF, \
e60d3615 299 LANG_HOOKS_BUILTIN_FUNCTION, \
5ded8c6f 300 LANG_HOOKS_INIT_TS, \
54d7165a 301 LANG_HOOKS_EXPR_TO_DECL, \
b0278d39 302}
303
304#endif /* GCC_LANG_HOOKS_DEF_H */