]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/langhooks.h
2009-09-13 Kai Tietz <kai.tietz@onevision.com>
[thirdparty/gcc.git] / gcc / langhooks.h
CommitLineData
b0278d39 1/* The lang_hooks data structure.
abd3e6b5 2 Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
8c4c00c1 3 Free Software Foundation, Inc.
e8602e56 4
4642865b 5This file is part of GCC.
e8602e56 6
4642865b 7GCC is free software; you can redistribute it and/or modify
e8602e56 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)
e8602e56 10any later version.
11
4642865b 12GCC is distributed in the hope that it will be useful,
e8602e56 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/>. */
e8602e56 20
21#ifndef GCC_LANG_HOOKS_H
22#define GCC_LANG_HOOKS_H
23
b467ecc1 24/* This file should be #include-d after tree.h. */
25
6c7ff025 26struct diagnostic_context;
b8c23db3 27struct diagnostic_info;
6c7ff025 28
1e8e9920 29struct gimplify_omp_ctx;
30
1c79cc8c 31struct array_descr_info;
32
b7fced5e 33/* A print hook for print_tree (). */
3ad4992f 34typedef void (*lang_print_tree_hook) (FILE *, tree, int indent);
b7fced5e 35
03a61d93 36enum classify_record
37 { RECORD_IS_STRUCT, RECORD_IS_CLASS, RECORD_IS_INTERFACE };
38
b0278d39 39/* The following hooks are documented in langhooks.c. Must not be
40 NULL. */
41
42struct lang_hooks_for_tree_inlining
43{
1f8a6ff8 44 bool (*var_mod_type_p) (tree, tree);
b0278d39 45};
46
833eb724 47struct lang_hooks_for_callgraph
48{
ec1e35b2 49 /* The node passed is a language-specific tree node. If its contents
50 are relevant to use of other declarations, mark them. */
e83c4efa 51 tree (*analyze_expr) (tree *, int *);
ec1e35b2 52
e83c4efa 53 /* Emit thunks associated to function. */
84e10000 54 void (*emit_associated_thunks) (tree);
833eb724 55};
56
3119c950 57/* The following hooks are used by tree-dump.c. */
58
59struct lang_hooks_for_tree_dump
60{
6ef828f9 61 /* Dump language-specific parts of tree nodes. Returns nonzero if it
3119c950 62 does not want the usual dumping of the second argument. */
3ad4992f 63 bool (*dump_tree) (void *, tree);
3119c950 64
65 /* Determine type qualifiers in a language-specific way. */
f8fd23c0 66 int (*type_quals) (const_tree);
3119c950 67};
68
a1f71e15 69/* Hooks related to types. */
70
71struct lang_hooks_for_types
72{
771d21fa 73 /* Return a new type (with the indicated CODE), doing whatever
74 language-specific processing is required. */
3ad4992f 75 tree (*make_type) (enum tree_code);
8851e806 76
03a61d93 77 /* Return what kind of RECORD_TYPE this is, mainly for purposes of
78 debug information. If not defined, record types are assumed to
79 be structures. */
80 enum classify_record (*classify_record) (tree);
81
771d21fa 82 /* Given MODE and UNSIGNEDP, return a suitable type-tree with that
83 mode. */
3ad4992f 84 tree (*type_for_mode) (enum machine_mode, int);
771d21fa 85
86 /* Given PRECISION and UNSIGNEDP, return a suitable type-tree for an
87 integer type with at least that precision. */
3ad4992f 88 tree (*type_for_size) (unsigned, int);
4070745f 89
0e4744ac 90 /* True if the type is an instantiation of a generic type,
91 e.g. C++ template implicit specializations. */
f8fd23c0 92 bool (*generic_p) (const_tree);
0e4744ac 93
7c48f38c 94 /* Returns the TREE_VEC of elements of a given generic argument pack. */
95 tree (*get_argument_pack_elems) (const_tree);
96
63c62881 97 /* Given a type, apply default promotions to unnamed function
98 arguments and return the new type. Return the same type if no
99 change. Required by any language that supports variadic
1fa3a8f6 100 arguments. The default hook dies. */
3ad4992f 101 tree (*type_promotes_to) (tree);
63c62881 102
b268e47e 103 /* Register TYPE as a builtin type with the indicated NAME. The
104 TYPE is placed in the outermost lexical scope. The semantics
105 should be analogous to:
106
107 typedef TYPE NAME;
108
109 in C. The default hook ignores the declaration. */
110 void (*register_builtin_type) (tree, const char *);
111
1dd25100 112 /* This routine is called in tree.c to print an error message for
113 invalid use of an incomplete type. VALUE is the expression that
114 was used (or 0 if that isn't known) and TYPE is the type that was
115 invalid. */
f8fd23c0 116 void (*incomplete_type_error) (const_tree value, const_tree type);
a26d3281 117
b225134e 118 /* Called from assign_temp to return the maximum size, if there is one,
119 for a type. */
f8fd23c0 120 tree (*max_size) (const_tree);
b225134e 121
1e8e9920 122 /* Register language specific type size variables as potentially OpenMP
123 firstprivate variables. */
124 void (*omp_firstprivatize_type_sizes) (struct gimplify_omp_ctx *, tree);
125
743f8dd1 126 /* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
127 Called only after doing all language independent checks.
128 At present, this function is only called when both TYPE1 and TYPE2 are
129 FUNCTION_TYPEs. */
130 bool (*type_hash_eq) (const_tree, const_tree);
131
1c79cc8c 132 /* Return TRUE if TYPE uses a hidden descriptor and fills in information
133 for the debugger about the array bounds, strides, etc. */
134 bool (*get_array_descr_info) (const_tree, struct array_descr_info *);
135
a9538d68 136 /* Fill in information for the debugger about the bounds of TYPE. */
137 void (*get_subrange_bounds) (const_tree, tree *, tree *);
138
d991e6e8 139 /* If we requested a pointer to a vector, build up the pointers that
140 we stripped off while looking for the inner type. Similarly for
141 return values from functions. The argument TYPE is the top of the
142 chain, and BOTTOM is the new type which we will point to. */
143 tree (*reconstruct_complex_type) (tree, tree);
144
a26d3281 145 /* Nonzero if types that are identical are to be hashed so that only
146 one copy is kept. If a language requires unique types for each
147 user-specified type, such as Ada, this should be set to TRUE. */
148 bool hash_types;
a1f71e15 149};
150
20325f61 151/* Language hooks related to decls and the symbol table. */
152
153struct lang_hooks_for_decls
154{
6ef828f9 155 /* Returns nonzero if we are in the global binding level. Ada
20325f61 156 returns -1 for an undocumented reason used in stor-layout.c. */
3ad4992f 157 int (*global_bindings_p) (void);
20325f61 158
20325f61 159 /* Function to add a decl to the current scope level. Takes one
160 argument, a decl to add. Returns that decl, or, if the same
161 symbol is already declared, may return a different decl for that
162 name. */
3ad4992f 163 tree (*pushdecl) (tree);
20325f61 164
165 /* Returns the chain of decls so far in the current scope level. */
3ad4992f 166 tree (*getdecls) (void);
8d58a5a7 167
cb3582e7 168 /* Returns true if DECL is explicit member function. */
169 bool (*function_decl_explicit_p) (tree);
170
7c48f38c 171 /* Returns True if the parameter is a generic parameter decl
172 of a generic type, e.g a template template parameter for the C++ FE. */
173 bool (*generic_generic_parameter_decl_p) (const_tree);
174
8d58a5a7 175 /* Returns true when we should warn for an unused global DECL.
176 We will already have checked that it has static binding. */
f8fd23c0 177 bool (*warn_unused_global) (const_tree);
28db4d96 178
179 /* Obtain a list of globals and do final output on them at end
180 of compilation */
3ad4992f 181 void (*final_write_globals) (void);
e2e9c55b 182
183 /* True if this decl may be called via a sibcall. */
9f627b1a 184 bool (*ok_for_sibcall) (const_tree);
537cd941 185
1e8e9920 186 /* True if OpenMP should privatize what this DECL points to rather
187 than the DECL itself. */
9f627b1a 188 bool (*omp_privatize_by_reference) (const_tree);
1e8e9920 189
190 /* Return sharing kind if OpenMP sharing attribute of DECL is
191 predetermined, OMP_CLAUSE_DEFAULT_UNSPECIFIED otherwise. */
192 enum omp_clause_default_kind (*omp_predetermined_sharing) (tree);
193
194 /* Return true if DECL's DECL_VALUE_EXPR (if any) should be
195 disregarded in OpenMP construct, because it is going to be
196 remapped during OpenMP lowering. SHARED is true if DECL
197 is going to be shared, false if it is going to be privatized. */
198 bool (*omp_disregard_value_expr) (tree, bool);
199
200 /* Return true if DECL that is shared iff SHARED is true should
201 be put into OMP_CLAUSE_PRIVATE_DEBUG. */
202 bool (*omp_private_debug_clause) (tree, bool);
203
fd6481cf 204 /* Return true if DECL in private clause needs
205 OMP_CLAUSE_PRIVATE_OUTER_REF on the private clause. */
206 bool (*omp_private_outer_ref) (tree);
207
1e8e9920 208 /* Build and return code for a default constructor for DECL in
fd6481cf 209 response to CLAUSE. OUTER is corresponding outer region's
210 variable if needed. Return NULL if nothing to be done. */
211 tree (*omp_clause_default_ctor) (tree clause, tree decl, tree outer);
1e8e9920 212
213 /* Build and return code for a copy constructor from SRC to DST. */
214 tree (*omp_clause_copy_ctor) (tree clause, tree dst, tree src);
215
216 /* Similarly, except use an assignment operator instead. */
217 tree (*omp_clause_assign_op) (tree clause, tree dst, tree src);
218
219 /* Build and return code destructing DECL. Return NULL if nothing
220 to be done. */
221 tree (*omp_clause_dtor) (tree clause, tree decl);
fd6481cf 222
223 /* Do language specific checking on an implicitly determined clause. */
224 void (*omp_finish_clause) (tree clause);
20325f61 225};
226
b0278d39 227/* Language-specific hooks. See langhooks-def.h for defaults. */
228
229struct lang_hooks
230{
d19bd1f0 231 /* String identifying the front end. e.g. "GNU C++". */
232 const char *name;
233
234 /* sizeof (struct lang_identifier), so make_node () creates
235 identifier nodes long enough for the language-specific slots. */
236 size_t identifier_size;
237
34e5cced 238 /* Remove any parts of the tree that are used only by the FE. */
239 void (*free_lang_data) (tree);
240
ce45a448 241 /* Determines the size of any language-specific tcc_constant or
242 tcc_exceptional nodes. Since it is called from make_node, the
1fa3a8f6 243 only information available is the tree code. Expected to die
ce45a448 244 on unrecognized codes. */
3ad4992f 245 size_t (*tree_size) (enum tree_code);
295e387a 246
435fb09b 247 /* The first callback made to the front end, for simple
5457b645 248 initialization needed before any calls to handle_option. Return
249 the language mask to filter the switch array with. */
4838a8b6 250 unsigned int (*init_options) (unsigned int argc, const char **argv);
b0278d39 251
f63da8d3 252 /* Callback used to perform language-specific initialization for the
253 global diagnostic context structure. */
254 void (*initialize_diagnostics) (struct diagnostic_context *);
255
5457b645 256 /* Handle the switch CODE, which has real type enum opt_code from
257 options.h. If the switch takes an argument, it is passed in ARG
917bbcab 258 which points to permanent storage. The handler is responsible for
5457b645 259 checking whether ARG is NULL, which indicates that no argument
260 was in fact supplied. For -f and -W switches, VALUE is 1 or 0
261 for the positive and negative forms respectively.
262
263 Return 1 if the switch is valid, 0 if invalid, and -1 if it's
264 valid and should not be treated as language-independent too. */
265 int (*handle_option) (size_t code, const char *arg, int value);
266
76bf7746 267 /* Return false to use the default complaint about a missing
268 argument, otherwise output a complaint and return true. */
269 bool (*missing_argument) (const char *opt, size_t code);
270
03bde601 271 /* Called when all command line options have been parsed to allow
272 further processing and initialization
dd436eaf 273
03bde601 274 Should return true to indicate that a compiler back-end is
275 not required, such as with the -E option.
3ad4992f 276
6ef828f9 277 If errorcount is nonzero after this call the compiler exits
dd436eaf 278 immediately and the finish hook is not called. */
3ad4992f 279 bool (*post_options) (const char **);
03bde601 280
281 /* Called after post_options to initialize the front end. Return
282 false to indicate that no further compilation be performed, in
283 which case the finish hook is called immediately. */
3ad4992f 284 bool (*init) (void);
435fb09b 285
286 /* Called at the end of compilation, as a finalizer. */
3ad4992f 287 void (*finish) (void);
435fb09b 288
6ef828f9 289 /* Parses the entire file. The argument is nonzero to cause bison
1c542e4c 290 parsers to dump debugging information during parsing. */
3ad4992f 291 void (*parse_file) (int);
b78207a0 292
b75409ba 293 /* Determines if it's ok for a function to have no noreturn attribute. */
294 bool (*missing_noreturn_ok_p) (tree);
295
b0278d39 296 /* Called to obtain the alias set to be used for an expression or type.
297 Returns -1 if the language does nothing special for it. */
32c2fdea 298 alias_set_type (*get_alias_set) (tree);
b0278d39 299
ee23fd7b 300 /* Function to finish handling an incomplete decl at the end of
301 compilation. Default hook is does nothing. */
3ad4992f 302 void (*finish_incomplete_decl) (tree);
ee23fd7b 303
dbc42b78 304 /* Replace the DECL_LANG_SPECIFIC data, which may be NULL, of the
305 DECL_NODE with a newly GC-allocated copy. */
3ad4992f 306 void (*dup_lang_specific_decl) (tree);
dbc42b78 307
d1f6c8f2 308 /* Set the DECL_ASSEMBLER_NAME for a node. If it is the sort of
309 thing that the assembler should talk about, set
310 DECL_ASSEMBLER_NAME to an appropriate IDENTIFIER_NODE.
311 Otherwise, set it to the ERROR_MARK_NODE to ensure that the
312 assembler does not talk about it. */
3ad4992f 313 void (*set_decl_assembler_name) (tree);
d1f6c8f2 314
b7fced5e 315 /* The front end can add its own statistics to -fmem-report with
316 this hook. It should output to stderr. */
3ad4992f 317 void (*print_statistics) (void);
b7fced5e 318
ce45a448 319 /* Called by print_tree when there is a tree of class tcc_exceptional
320 that it doesn't know how to display. */
b7fced5e 321 lang_print_tree_hook print_xnode;
322
ce45a448 323 /* Called to print language-dependent parts of tcc_decl, tcc_type,
324 and IDENTIFIER_NODE nodes. */
b7fced5e 325 lang_print_tree_hook print_decl;
326 lang_print_tree_hook print_type;
327 lang_print_tree_hook print_identifier;
328
96554925 329 /* Computes the name to use to print a declaration. DECL is the
330 non-NULL declaration in question. VERBOSITY determines what
331 information will be printed: 0: DECL_NAME, demangled as
332 necessary. 1: and scope information. 2: and any other
333 information that might be interesting, such as function parameter
abd3e6b5 334 types in C++. The name is in the internal character set and
335 needs to be converted to the locale character set of diagnostics,
336 or to the execution character set for strings such as
337 __PRETTY_FUNCTION__. */
3ad4992f 338 const char *(*decl_printable_name) (tree decl, int verbosity);
96554925 339
7d709201 340 /* Computes the dwarf-2/3 name for a tree. VERBOSITY determines what
341 information will be printed: 0: DECL_NAME, demangled as
342 necessary. 1: and scope information. */
343 const char *(*dwarf_name) (tree, int verbosity);
344
4ee9c684 345 /* This compares two types for equivalence ("compatible" in C-based languages).
346 This routine should only return 1 if it is sure. It should not be used
347 in contexts where erroneously returning 0 causes problems. */
348 int (*types_compatible_p) (tree x, tree y);
349
6c7ff025 350 /* Called by report_error_function to print out function name. */
b8c23db3 351 void (*print_error_function) (struct diagnostic_context *, const char *,
352 struct diagnostic_info *);
6c7ff025 353
624d37a6 354 /* Convert a character from the host's to the target's character
355 set. The character should be in what C calls the "basic source
356 character set" (roughly, the set of characters defined by plain
357 old ASCII). The default is to return the character unchanged,
358 which is correct in most circumstances. Note that both argument
359 and result should be sign-extended under -fsigned-char,
360 zero-extended under -fno-signed-char. */
361 HOST_WIDE_INT (*to_target_charset) (HOST_WIDE_INT);
362
f8e93a2e 363 /* Pointers to machine-independent attribute tables, for front ends
364 using attribs.c. If one is NULL, it is ignored. Respectively, a
365 table of attributes specific to the language, a table of
366 attributes common to two or more languages (to allow easy
367 sharing), and a table of attributes for checking formats. */
368 const struct attribute_spec *attribute_table;
369 const struct attribute_spec *common_attribute_table;
370 const struct attribute_spec *format_attribute_table;
371
b0278d39 372 struct lang_hooks_for_tree_inlining tree_inlining;
8851e806 373
833eb724 374 struct lang_hooks_for_callgraph callgraph;
375
3119c950 376 struct lang_hooks_for_tree_dump tree_dump;
b0278d39 377
20325f61 378 struct lang_hooks_for_decls decls;
379
a1f71e15 380 struct lang_hooks_for_types types;
381
7c48f38c 382 /* Retuns the generic parameters of an instantiation of
383 a generic type or decl, e.g. C++ template instantiation. */
384 tree (*get_innermost_generic_parms) (const_tree);
385
386 /* Returns the TREE_VEC of arguments of an instantiation
387 of a generic type of decl, e.g. C++ template instantiation. */
388 tree (*get_innermost_generic_args) (const_tree);
389
4ee9c684 390 /* Perform language-specific gimplification on the argument. Returns an
391 enum gimplify_status, though we can't see that type here. */
75a70cf9 392 int (*gimplify_expr) (tree *, gimple_seq *, gimple_seq *);
4ee9c684 393
215e2f1d 394 /* Fold an OBJ_TYPE_REF expression to the address of a function.
395 KNOWN_TYPE carries the true type of the OBJ_TYPE_REF_OBJECT. */
396 tree (*fold_obj_type_ref) (tree, tree);
397
54be5d7e 398 /* Do language specific processing in the builtin function DECL */
399 tree (*builtin_function) (tree decl);
e60d3615 400
24470055 401 /* Like builtin_function, but make sure the scope is the external scope.
402 This is used to delay putting in back end builtin functions until the ISA
403 that defines the builtin is declared via function specific target options,
404 which can save memory for machines like the x86_64 that have multiple
405 ISAs. If this points to the same function as builtin_function, the
406 backend must add all of the builtins at program initialization time. */
407 tree (*builtin_function_ext_scope) (tree decl);
408
5ded8c6f 409 /* Used to set up the tree_contains_structure array for a frontend. */
410 void (*init_ts) (void);
411
750ad201 412 /* Called by recompute_tree_invariant_for_addr_expr to go from EXPR
c7d4e749 413 to a contained expression or DECL, possibly updating *TC or *SE
414 if in the process TREE_CONSTANT or TREE_SIDE_EFFECTS need updating. */
415 tree (*expr_to_decl) (tree expr, bool *tc, bool *se);
54d7165a 416
3119c950 417 /* Whenever you add entries here, make sure you adjust langhooks-def.h
b0278d39 418 and langhooks.c accordingly. */
419};
420
421/* Each front end provides its own. */
34e5cced 422extern struct lang_hooks lang_hooks;
54be5d7e 423extern tree add_builtin_function (const char *name, tree type,
424 int function_code, enum built_in_class cl,
425 const char *library_name,
426 tree attrs);
e8602e56 427
24470055 428extern tree add_builtin_function_ext_scope (const char *name, tree type,
429 int function_code,
430 enum built_in_class cl,
431 const char *library_name,
432 tree attrs);
433
e8602e56 434#endif /* GCC_LANG_HOOKS_H */