]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/langhooks-def.h
2008-04-03 Paolo Bonzini <bonzini@gnu.org>
[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;
b8c23db3 27struct diagnostic_info;
6c7ff025 28
b0278d39 29/* Note to creators of new hooks:
30
31 The macros in this file should NOT be surrounded by a
32 #ifdef...#endif pair, since this file declares the defaults. Each
33 front end overrides any hooks it wishes to, in the file containing
e938cdf5 34 its struct lang_hooks, AFTER including this file. */
b0278d39 35
36/* See langhooks.h for the definition and documentation of each hook. */
37
3ad4992f 38extern void lhd_do_nothing (void);
39extern void lhd_do_nothing_t (tree);
40extern void lhd_do_nothing_i (int);
41extern void lhd_do_nothing_f (struct function *);
42extern bool lhd_post_options (const char **);
32c2fdea 43extern alias_set_type lhd_get_alias_set (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 *,
b8c23db3 56 const char *, struct diagnostic_info *);
3ad4992f 57extern void lhd_set_decl_assembler_name (tree);
f8fd23c0 58extern bool lhd_warn_unused_global_decl (const_tree);
59extern void lhd_incomplete_type_error (const_tree, const_tree);
3ad4992f 60extern tree lhd_type_promotes_to (tree);
b268e47e 61extern void lhd_register_builtin_type (tree, const char *);
9f627b1a 62extern bool lhd_decl_ok_for_sibcall (const_tree);
537cd941 63extern const char *lhd_comdat_group (tree);
f8fd23c0 64extern tree lhd_expr_size (const_tree);
3ad4992f 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. */
f63da8d3 71extern void lhd_initialize_diagnostics (struct diagnostic_context *);
e83c4efa 72extern tree lhd_callgraph_analyze_expr (tree *, int *);
ec1e35b2 73
3ad4992f 74
4ee9c684 75/* Declarations for tree gimplification hooks. */
76extern int lhd_gimplify_expr (tree *, tree *, tree *);
1e8e9920 77extern enum omp_clause_default_kind lhd_omp_predetermined_sharing (tree);
78extern tree lhd_omp_assignment (tree, tree, tree);
79struct gimplify_omp_ctx;
80extern void lhd_omp_firstprivatize_type_sizes (struct gimplify_omp_ctx *,
81 tree);
4ee9c684 82
d19bd1f0 83#define LANG_HOOKS_NAME "GNU unknown"
84#define LANG_HOOKS_IDENTIFIER_SIZE sizeof (struct lang_identifier)
03bde601 85#define LANG_HOOKS_INIT hook_bool_void_false
b0278d39 86#define LANG_HOOKS_FINISH lhd_do_nothing
1c542e4c 87#define LANG_HOOKS_PARSE_FILE lhd_do_nothing_i
4838a8b6 88#define LANG_HOOKS_INIT_OPTIONS hook_uint_uint_constcharptrptr_0
b6e50631 89#define LANG_HOOKS_INITIALIZE_DIAGNOSTICS lhd_initialize_diagnostics
4838a8b6 90#define LANG_HOOKS_HANDLE_OPTION hook_int_size_t_constcharptr_int_0
76bf7746 91#define LANG_HOOKS_MISSING_ARGUMENT hook_bool_constcharptr_size_t_false
03bde601 92#define LANG_HOOKS_POST_OPTIONS lhd_post_options
b75409ba 93#define LANG_HOOKS_MISSING_NORETURN_OK_P hook_bool_tree_true
b0278d39 94#define LANG_HOOKS_GET_ALIAS_SET lhd_get_alias_set
b467ecc1 95#define LANG_HOOKS_EXPAND_EXPR lhd_expand_expr
4ee9c684 96#define LANG_HOOKS_EXPAND_DECL lhd_expand_decl
ee23fd7b 97#define LANG_HOOKS_FINISH_INCOMPLETE_DECL lhd_do_nothing_t
cf484390 98#define LANG_HOOKS_STATICP lhd_staticp
dbc42b78 99#define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL lhd_do_nothing_t
d1f6c8f2 100#define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME lhd_set_decl_assembler_name
685b5cc2 101#define LANG_HOOKS_NO_BODY_BLOCKS false
b7fced5e 102#define LANG_HOOKS_PRINT_STATISTICS lhd_do_nothing
103#define LANG_HOOKS_PRINT_XNODE lhd_print_tree_nothing
104#define LANG_HOOKS_PRINT_DECL lhd_print_tree_nothing
105#define LANG_HOOKS_PRINT_TYPE lhd_print_tree_nothing
106#define LANG_HOOKS_PRINT_IDENTIFIER lhd_print_tree_nothing
6c7ff025 107#define LANG_HOOKS_PRINT_ERROR_FUNCTION lhd_print_error_function
96554925 108#define LANG_HOOKS_DECL_PRINTABLE_NAME lhd_decl_printable_name
7d709201 109#define LANG_HOOKS_DWARF_NAME lhd_dwarf_name
b7bf20db 110#define LANG_HOOKS_GET_CALLEE_FNDECL lhd_return_null_const_tree
c3f16ae3 111#define LANG_HOOKS_EXPR_SIZE lhd_expr_size
295e387a 112#define LANG_HOOKS_TREE_SIZE lhd_tree_size
4ee9c684 113#define LANG_HOOKS_TYPES_COMPATIBLE_P lhd_types_compatible_p
54be5d7e 114#define LANG_HOOKS_BUILTIN_FUNCTION lhd_builtin_function
54d7165a 115#define LANG_HOOKS_EXPR_TO_DECL lhd_expr_to_decl
624d37a6 116#define LANG_HOOKS_TO_TARGET_CHARSET lhd_to_target_charset
5ded8c6f 117#define LANG_HOOKS_INIT_TS lhd_do_nothing
b0278d39 118
f8e93a2e 119/* Attribute hooks. */
120#define LANG_HOOKS_ATTRIBUTE_TABLE NULL
121#define LANG_HOOKS_COMMON_ATTRIBUTE_TABLE NULL
122#define LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE NULL
123
b0278d39 124/* Tree inlining hooks. */
21ac3a84 125#define LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P \
1f8a6ff8 126 hook_bool_tree_tree_false
b0278d39 127
128#define LANG_HOOKS_TREE_INLINING_INITIALIZER { \
21ac3a84 129 LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P, \
ec1e35b2 130}
b0278d39 131
ec1e35b2 132#define LANG_HOOKS_CALLGRAPH_ANALYZE_EXPR lhd_callgraph_analyze_expr
84e10000 133#define LANG_HOOKS_CALLGRAPH_EMIT_ASSOCIATED_THUNKS NULL
833eb724 134
135#define LANG_HOOKS_CALLGRAPH_INITIALIZER { \
ec1e35b2 136 LANG_HOOKS_CALLGRAPH_ANALYZE_EXPR, \
84e10000 137 LANG_HOOKS_CALLGRAPH_EMIT_ASSOCIATED_THUNKS, \
ec1e35b2 138}
833eb724 139
4ee9c684 140/* Hooks for tree gimplification. */
141#define LANG_HOOKS_GIMPLIFY_EXPR lhd_gimplify_expr
215e2f1d 142#define LANG_HOOKS_FOLD_OBJ_TYPE_REF NULL
90e3d9ba 143
3119c950 144/* Tree dump hooks. */
3ad4992f 145extern bool lhd_tree_dump_dump_tree (void *, tree);
f8fd23c0 146extern int lhd_tree_dump_type_quals (const_tree);
674b05f5 147extern tree lhd_make_node (enum tree_code);
3119c950 148
149#define LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN lhd_tree_dump_dump_tree
150#define LANG_HOOKS_TREE_DUMP_TYPE_QUALS_FN lhd_tree_dump_type_quals
151
152#define LANG_HOOKS_TREE_DUMP_INITIALIZER { \
153 LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN, \
154 LANG_HOOKS_TREE_DUMP_TYPE_QUALS_FN \
20325f61 155}
156
ee23fd7b 157/* Types hooks. There are no reasonable defaults for most of them,
158 so we create a compile-time error instead. */
674b05f5 159#define LANG_HOOKS_MAKE_TYPE lhd_make_node
03a61d93 160#define LANG_HOOKS_CLASSIFY_RECORD NULL
1dd25100 161#define LANG_HOOKS_INCOMPLETE_TYPE_ERROR lhd_incomplete_type_error
f8fd23c0 162#define LANG_HOOKS_GENERIC_TYPE_P hook_bool_const_tree_false
63c62881 163#define LANG_HOOKS_TYPE_PROMOTES_TO lhd_type_promotes_to
b268e47e 164#define LANG_HOOKS_REGISTER_BUILTIN_TYPE lhd_register_builtin_type
f8fd23c0 165#define LANG_HOOKS_TYPE_MAX_SIZE lhd_return_null_const_tree
1e8e9920 166#define LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES \
167 lhd_omp_firstprivatize_type_sizes
743f8dd1 168#define LANG_HOOKS_TYPE_HASH_EQ NULL
1c79cc8c 169#define LANG_HOOKS_GET_ARRAY_DESCR_INFO NULL
a26d3281 170#define LANG_HOOKS_HASH_TYPES true
a1f71e15 171
172#define LANG_HOOKS_FOR_TYPES_INITIALIZER { \
771d21fa 173 LANG_HOOKS_MAKE_TYPE, \
03a61d93 174 LANG_HOOKS_CLASSIFY_RECORD, \
771d21fa 175 LANG_HOOKS_TYPE_FOR_MODE, \
4070745f 176 LANG_HOOKS_TYPE_FOR_SIZE, \
0e4744ac 177 LANG_HOOKS_GENERIC_TYPE_P, \
63c62881 178 LANG_HOOKS_TYPE_PROMOTES_TO, \
b268e47e 179 LANG_HOOKS_REGISTER_BUILTIN_TYPE, \
a26d3281 180 LANG_HOOKS_INCOMPLETE_TYPE_ERROR, \
b225134e 181 LANG_HOOKS_TYPE_MAX_SIZE, \
1e8e9920 182 LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES, \
743f8dd1 183 LANG_HOOKS_TYPE_HASH_EQ, \
1c79cc8c 184 LANG_HOOKS_GET_ARRAY_DESCR_INFO, \
a26d3281 185 LANG_HOOKS_HASH_TYPES \
a1f71e15 186}
187
20325f61 188/* Declaration hooks. */
20325f61 189#define LANG_HOOKS_GLOBAL_BINDINGS_P global_bindings_p
20325f61 190#define LANG_HOOKS_PUSHDECL pushdecl
191#define LANG_HOOKS_GETDECLS getdecls
8d58a5a7 192#define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL lhd_warn_unused_global_decl
28db4d96 193#define LANG_HOOKS_WRITE_GLOBALS write_global_declarations
e2e9c55b 194#define LANG_HOOKS_DECL_OK_FOR_SIBCALL lhd_decl_ok_for_sibcall
537cd941 195#define LANG_HOOKS_COMDAT_GROUP lhd_comdat_group
9f627b1a 196#define LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE hook_bool_const_tree_false
1e8e9920 197#define LANG_HOOKS_OMP_PREDETERMINED_SHARING lhd_omp_predetermined_sharing
198#define LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR hook_bool_tree_bool_false
199#define LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE hook_bool_tree_bool_false
200#define LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR hook_tree_tree_tree_null
201#define LANG_HOOKS_OMP_CLAUSE_COPY_CTOR lhd_omp_assignment
202#define LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP lhd_omp_assignment
203#define LANG_HOOKS_OMP_CLAUSE_DTOR hook_tree_tree_tree_null
20325f61 204
205#define LANG_HOOKS_DECLS { \
20325f61 206 LANG_HOOKS_GLOBAL_BINDINGS_P, \
20325f61 207 LANG_HOOKS_PUSHDECL, \
8d58a5a7 208 LANG_HOOKS_GETDECLS, \
28db4d96 209 LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL, \
e2e9c55b 210 LANG_HOOKS_WRITE_GLOBALS, \
211 LANG_HOOKS_DECL_OK_FOR_SIBCALL, \
1e8e9920 212 LANG_HOOKS_COMDAT_GROUP, \
213 LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE, \
214 LANG_HOOKS_OMP_PREDETERMINED_SHARING, \
215 LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR, \
216 LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE, \
217 LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR, \
218 LANG_HOOKS_OMP_CLAUSE_COPY_CTOR, \
219 LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP, \
220 LANG_HOOKS_OMP_CLAUSE_DTOR \
20325f61 221}
3119c950 222
223/* The whole thing. The structure is defined in langhooks.h. */
b0278d39 224#define LANG_HOOKS_INITIALIZER { \
d19bd1f0 225 LANG_HOOKS_NAME, \
226 LANG_HOOKS_IDENTIFIER_SIZE, \
295e387a 227 LANG_HOOKS_TREE_SIZE, \
b0278d39 228 LANG_HOOKS_INIT_OPTIONS, \
b6e50631 229 LANG_HOOKS_INITIALIZE_DIAGNOSTICS, \
5457b645 230 LANG_HOOKS_HANDLE_OPTION, \
76bf7746 231 LANG_HOOKS_MISSING_ARGUMENT, \
b0278d39 232 LANG_HOOKS_POST_OPTIONS, \
435fb09b 233 LANG_HOOKS_INIT, \
234 LANG_HOOKS_FINISH, \
b78207a0 235 LANG_HOOKS_PARSE_FILE, \
b75409ba 236 LANG_HOOKS_MISSING_NORETURN_OK_P, \
b0278d39 237 LANG_HOOKS_GET_ALIAS_SET, \
b467ecc1 238 LANG_HOOKS_EXPAND_EXPR, \
4ee9c684 239 LANG_HOOKS_EXPAND_DECL, \
ee23fd7b 240 LANG_HOOKS_FINISH_INCOMPLETE_DECL, \
9b86eec0 241 LANG_HOOKS_MARK_ADDRESSABLE, \
cf484390 242 LANG_HOOKS_STATICP, \
dbc42b78 243 LANG_HOOKS_DUP_LANG_SPECIFIC_DECL, \
d1f6c8f2 244 LANG_HOOKS_SET_DECL_ASSEMBLER_NAME, \
685b5cc2 245 LANG_HOOKS_NO_BODY_BLOCKS, \
b7fced5e 246 LANG_HOOKS_PRINT_STATISTICS, \
247 LANG_HOOKS_PRINT_XNODE, \
248 LANG_HOOKS_PRINT_DECL, \
249 LANG_HOOKS_PRINT_TYPE, \
250 LANG_HOOKS_PRINT_IDENTIFIER, \
96554925 251 LANG_HOOKS_DECL_PRINTABLE_NAME, \
7d709201 252 LANG_HOOKS_DWARF_NAME, \
4ee9c684 253 LANG_HOOKS_TYPES_COMPATIBLE_P, \
264f4f30 254 LANG_HOOKS_GET_CALLEE_FNDECL, \
6c7ff025 255 LANG_HOOKS_PRINT_ERROR_FUNCTION, \
c3f16ae3 256 LANG_HOOKS_EXPR_SIZE, \
624d37a6 257 LANG_HOOKS_TO_TARGET_CHARSET, \
f8e93a2e 258 LANG_HOOKS_ATTRIBUTE_TABLE, \
259 LANG_HOOKS_COMMON_ATTRIBUTE_TABLE, \
260 LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE, \
3119c950 261 LANG_HOOKS_TREE_INLINING_INITIALIZER, \
833eb724 262 LANG_HOOKS_CALLGRAPH_INITIALIZER, \
20325f61 263 LANG_HOOKS_TREE_DUMP_INITIALIZER, \
a1f71e15 264 LANG_HOOKS_DECLS, \
90e3d9ba 265 LANG_HOOKS_FOR_TYPES_INITIALIZER, \
4ee9c684 266 LANG_HOOKS_GIMPLIFY_EXPR, \
215e2f1d 267 LANG_HOOKS_FOLD_OBJ_TYPE_REF, \
e60d3615 268 LANG_HOOKS_BUILTIN_FUNCTION, \
5ded8c6f 269 LANG_HOOKS_INIT_TS, \
54d7165a 270 LANG_HOOKS_EXPR_TO_DECL, \
b0278d39 271}
272
273#endif /* GCC_LANG_HOOKS_DEF_H */