190075Sobrien/* The lang_hooks data structure. 2169689Skan Copyright 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 390075Sobrien 4132718SkanThis file is part of GCC. 590075Sobrien 6132718SkanGCC is free software; you can redistribute it and/or modify 790075Sobrienit under the terms of the GNU General Public License as published by 890075Sobrienthe Free Software Foundation; either version 2, or (at your option) 990075Sobrienany later version. 1090075Sobrien 11132718SkanGCC is distributed in the hope that it will be useful, 1290075Sobrienbut WITHOUT ANY WARRANTY; without even the implied warranty of 1390075SobrienMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1490075SobrienGNU General Public License for more details. 1590075Sobrien 1690075SobrienYou should have received a copy of the GNU General Public License 17132718Skanalong with GCC; see the file COPYING. If not, write to 18169689Skanthe Free Software Foundation, 51 Franklin Street, Fifth Floor, 19169689SkanBoston, MA 02110-1301, USA. */ 2090075Sobrien 2190075Sobrien#ifndef GCC_LANG_HOOKS_H 2290075Sobrien#define GCC_LANG_HOOKS_H 2390075Sobrien 24117395Skan/* This file should be #include-d after tree.h. */ 25117395Skan 26117395Skanstruct diagnostic_context; 27117395Skan 28169689Skanstruct gimplify_omp_ctx; 29169689Skan 3090075Sobrien/* A print hook for print_tree (). */ 31132718Skantypedef void (*lang_print_tree_hook) (FILE *, tree, int indent); 3290075Sobrien 3390075Sobrien/* The following hooks are documented in langhooks.c. Must not be 3490075Sobrien NULL. */ 3590075Sobrien 3690075Sobrienstruct lang_hooks_for_tree_inlining 3790075Sobrien{ 38132718Skan tree (*walk_subtrees) (tree *, int *, 39132718Skan tree (*) (tree *, int *, void *), 40169689Skan void *, struct pointer_set_t*); 41132718Skan int (*cannot_inline_tree_fn) (tree *); 42132718Skan int (*disregard_inline_limits) (tree); 43132718Skan tree (*add_pending_fn_decls) (void *, tree); 44132718Skan int (*auto_var_in_fn_p) (tree, tree); 45132718Skan int (*anon_aggr_type_p) (tree); 46169689Skan bool (*var_mod_type_p) (tree, tree); 47132718Skan int (*start_inlining) (tree); 48132718Skan void (*end_inlining) (tree); 49132718Skan tree (*convert_parm_for_inlining) (tree, tree, tree, int); 5090075Sobrien}; 5190075Sobrien 52132718Skanstruct lang_hooks_for_callgraph 53132718Skan{ 54132718Skan /* The node passed is a language-specific tree node. If its contents 55132718Skan are relevant to use of other declarations, mark them. */ 56132718Skan tree (*analyze_expr) (tree *, int *, tree); 57132718Skan 58132718Skan /* Produce RTL for function passed as argument. */ 59132718Skan void (*expand_function) (tree); 60132718Skan}; 61132718Skan 62117395Skan/* Lang hooks for management of language-specific data or status 63117395Skan when entering / leaving functions etc. */ 64117395Skanstruct lang_hooks_for_functions 65117395Skan{ 66117395Skan /* Called when entering a function. */ 67132718Skan void (*init) (struct function *); 68117395Skan 69117395Skan /* Called when leaving a function. */ 70132718Skan void (*final) (struct function *); 71117395Skan 72117395Skan /* Called when entering a nested function. */ 73132718Skan void (*enter_nested) (struct function *); 74117395Skan 75117395Skan /* Called when leaving a nested function. */ 76132718Skan void (*leave_nested) (struct function *); 77117395Skan 78169689Skan /* Determines if it's ok for a function to have no noreturn attribute. */ 79169689Skan bool (*missing_noreturn_ok_p) (tree); 80132718Skan}; 81132718Skan 8290075Sobrien/* The following hooks are used by tree-dump.c. */ 8390075Sobrien 8490075Sobrienstruct lang_hooks_for_tree_dump 8590075Sobrien{ 86117395Skan /* Dump language-specific parts of tree nodes. Returns nonzero if it 8790075Sobrien does not want the usual dumping of the second argument. */ 88132718Skan bool (*dump_tree) (void *, tree); 8990075Sobrien 9090075Sobrien /* Determine type qualifiers in a language-specific way. */ 91132718Skan int (*type_quals) (tree); 9290075Sobrien}; 9390075Sobrien 94117395Skan/* Hooks related to types. */ 95117395Skan 96117395Skanstruct lang_hooks_for_types 97117395Skan{ 98117395Skan /* Return a new type (with the indicated CODE), doing whatever 99117395Skan language-specific processing is required. */ 100132718Skan tree (*make_type) (enum tree_code); 101117395Skan 102117395Skan /* Given MODE and UNSIGNEDP, return a suitable type-tree with that 103117395Skan mode. */ 104132718Skan tree (*type_for_mode) (enum machine_mode, int); 105117395Skan 106117395Skan /* Given PRECISION and UNSIGNEDP, return a suitable type-tree for an 107117395Skan integer type with at least that precision. */ 108132718Skan tree (*type_for_size) (unsigned, int); 109117395Skan 110117395Skan /* Given an integer type T, return a type like T but unsigned. 111117395Skan If T is unsigned, the value is T. */ 112132718Skan tree (*unsigned_type) (tree); 113117395Skan 114117395Skan /* Given an integer type T, return a type like T but signed. 115117395Skan If T is signed, the value is T. */ 116132718Skan tree (*signed_type) (tree); 117117395Skan 118117395Skan /* Return a type the same as TYPE except unsigned or signed 119117395Skan according to UNSIGNEDP. */ 120132718Skan tree (*signed_or_unsigned_type) (int, tree); 121117395Skan 122259268Spfg /* True if the type is an instantiation of a generic type, 123259268Spfg e.g. C++ template implicit specializations. */ 124259268Spfg bool (*generic_p) (tree); 125259268Spfg 126117395Skan /* Given a type, apply default promotions to unnamed function 127117395Skan arguments and return the new type. Return the same type if no 128117395Skan change. Required by any language that supports variadic 129169689Skan arguments. The default hook dies. */ 130132718Skan tree (*type_promotes_to) (tree); 131117395Skan 132132718Skan /* Register TYPE as a builtin type with the indicated NAME. The 133132718Skan TYPE is placed in the outermost lexical scope. The semantics 134132718Skan should be analogous to: 135132718Skan 136132718Skan typedef TYPE NAME; 137132718Skan 138132718Skan in C. The default hook ignores the declaration. */ 139132718Skan void (*register_builtin_type) (tree, const char *); 140132718Skan 141117395Skan /* This routine is called in tree.c to print an error message for 142117395Skan invalid use of an incomplete type. VALUE is the expression that 143117395Skan was used (or 0 if that isn't known) and TYPE is the type that was 144117395Skan invalid. */ 145132718Skan void (*incomplete_type_error) (tree value, tree type); 146169689Skan 147169689Skan /* Called from assign_temp to return the maximum size, if there is one, 148169689Skan for a type. */ 149169689Skan tree (*max_size) (tree); 150169689Skan 151169689Skan /* Register language specific type size variables as potentially OpenMP 152169689Skan firstprivate variables. */ 153169689Skan void (*omp_firstprivatize_type_sizes) (struct gimplify_omp_ctx *, tree); 154169689Skan 155261188Spfg /* APPLE LOCAL begin radar 6386976 */ 156261188Spfg /* Determine whether the type-tree passed in is specific to the 157261188Spfg language/runtime definitions, e.g. is an Objective-C class... */ 158261188Spfg bool (*is_runtime_specific_type) (tree); 159261188Spfg /* APPLE LOCAL end radar 6386976 */ 160261188Spfg 161169689Skan /* Nonzero if types that are identical are to be hashed so that only 162169689Skan one copy is kept. If a language requires unique types for each 163169689Skan user-specified type, such as Ada, this should be set to TRUE. */ 164169689Skan bool hash_types; 165117395Skan}; 166117395Skan 167117395Skan/* Language hooks related to decls and the symbol table. */ 168117395Skan 169117395Skanstruct lang_hooks_for_decls 170117395Skan{ 171117395Skan /* Returns nonzero if we are in the global binding level. Ada 172117395Skan returns -1 for an undocumented reason used in stor-layout.c. */ 173132718Skan int (*global_bindings_p) (void); 174117395Skan 175117395Skan /* Insert BLOCK at the end of the list of subblocks of the 176117395Skan current binding level. This is used when a BIND_EXPR is expanded, 177117395Skan to handle the BLOCK node inside the BIND_EXPR. */ 178132718Skan void (*insert_block) (tree); 179117395Skan 180117395Skan /* Function to add a decl to the current scope level. Takes one 181117395Skan argument, a decl to add. Returns that decl, or, if the same 182117395Skan symbol is already declared, may return a different decl for that 183117395Skan name. */ 184132718Skan tree (*pushdecl) (tree); 185117395Skan 186117395Skan /* Returns the chain of decls so far in the current scope level. */ 187132718Skan tree (*getdecls) (void); 188117395Skan 189117395Skan /* Returns true when we should warn for an unused global DECL. 190117395Skan We will already have checked that it has static binding. */ 191132718Skan bool (*warn_unused_global) (tree); 192117395Skan 193117395Skan /* Obtain a list of globals and do final output on them at end 194117395Skan of compilation */ 195132718Skan void (*final_write_globals) (void); 196117395Skan 197132718Skan /* Do necessary preparations before assemble_variable can proceed. */ 198132718Skan void (*prepare_assemble_variable) (tree); 199132718Skan 200117395Skan /* True if this decl may be called via a sibcall. */ 201132718Skan bool (*ok_for_sibcall) (tree); 202169689Skan 203169689Skan /* Return the COMDAT group into which this DECL should be placed. 204169689Skan It is known that the DECL belongs in *some* COMDAT group when 205169689Skan this hook is called. The return value will be used immediately, 206169689Skan but not explicitly deallocated, so implementations should not use 207169689Skan xmalloc to allocate the string returned. (Typically, the return 208169689Skan value will be the string already stored in an 209169689Skan IDENTIFIER_NODE.) */ 210169689Skan const char * (*comdat_group) (tree); 211169689Skan 212169689Skan /* True if OpenMP should privatize what this DECL points to rather 213169689Skan than the DECL itself. */ 214169689Skan bool (*omp_privatize_by_reference) (tree); 215169689Skan 216169689Skan /* Return sharing kind if OpenMP sharing attribute of DECL is 217169689Skan predetermined, OMP_CLAUSE_DEFAULT_UNSPECIFIED otherwise. */ 218169689Skan enum omp_clause_default_kind (*omp_predetermined_sharing) (tree); 219169689Skan 220169689Skan /* Return true if DECL's DECL_VALUE_EXPR (if any) should be 221169689Skan disregarded in OpenMP construct, because it is going to be 222169689Skan remapped during OpenMP lowering. SHARED is true if DECL 223169689Skan is going to be shared, false if it is going to be privatized. */ 224169689Skan bool (*omp_disregard_value_expr) (tree, bool); 225169689Skan 226169689Skan /* Return true if DECL that is shared iff SHARED is true should 227169689Skan be put into OMP_CLAUSE_PRIVATE_DEBUG. */ 228169689Skan bool (*omp_private_debug_clause) (tree, bool); 229169689Skan 230169689Skan /* Build and return code for a default constructor for DECL in 231169689Skan response to CLAUSE. Return NULL if nothing to be done. */ 232169689Skan tree (*omp_clause_default_ctor) (tree clause, tree decl); 233169689Skan 234169689Skan /* Build and return code for a copy constructor from SRC to DST. */ 235169689Skan tree (*omp_clause_copy_ctor) (tree clause, tree dst, tree src); 236169689Skan 237169689Skan /* Similarly, except use an assignment operator instead. */ 238169689Skan tree (*omp_clause_assign_op) (tree clause, tree dst, tree src); 239169689Skan 240169689Skan /* Build and return code destructing DECL. Return NULL if nothing 241169689Skan to be done. */ 242169689Skan tree (*omp_clause_dtor) (tree clause, tree decl); 243117395Skan}; 244117395Skan 24590075Sobrien/* Language-specific hooks. See langhooks-def.h for defaults. */ 24690075Sobrien 24790075Sobrienstruct lang_hooks 24890075Sobrien{ 24990075Sobrien /* String identifying the front end. e.g. "GNU C++". */ 25090075Sobrien const char *name; 25190075Sobrien 25290075Sobrien /* sizeof (struct lang_identifier), so make_node () creates 25390075Sobrien identifier nodes long enough for the language-specific slots. */ 25490075Sobrien size_t identifier_size; 25590075Sobrien 256169689Skan /* Determines the size of any language-specific tcc_constant or 257169689Skan tcc_exceptional nodes. Since it is called from make_node, the 258169689Skan only information available is the tree code. Expected to die 259169689Skan on unrecognized codes. */ 260132718Skan size_t (*tree_size) (enum tree_code); 261132718Skan 26290075Sobrien /* The first callback made to the front end, for simple 263132718Skan initialization needed before any calls to handle_option. Return 264132718Skan the language mask to filter the switch array with. */ 265132718Skan unsigned int (*init_options) (unsigned int argc, const char **argv); 26690075Sobrien 267132718Skan /* Callback used to perform language-specific initialization for the 268132718Skan global diagnostic context structure. */ 269132718Skan void (*initialize_diagnostics) (struct diagnostic_context *); 27090075Sobrien 271132718Skan /* Handle the switch CODE, which has real type enum opt_code from 272132718Skan options.h. If the switch takes an argument, it is passed in ARG 273132718Skan which points to permanent storage. The handler is responsible for 274132718Skan checking whether ARG is NULL, which indicates that no argument 275132718Skan was in fact supplied. For -f and -W switches, VALUE is 1 or 0 276132718Skan for the positive and negative forms respectively. 277102780Skan 278132718Skan Return 1 if the switch is valid, 0 if invalid, and -1 if it's 279132718Skan valid and should not be treated as language-independent too. */ 280132718Skan int (*handle_option) (size_t code, const char *arg, int value); 281132718Skan 282132718Skan /* Return false to use the default complaint about a missing 283132718Skan argument, otherwise output a complaint and return true. */ 284132718Skan bool (*missing_argument) (const char *opt, size_t code); 285132718Skan 286132718Skan /* Called when all command line options have been parsed to allow 287132718Skan further processing and initialization 288132718Skan 289132718Skan Should return true to indicate that a compiler back-end is 290132718Skan not required, such as with the -E option. 291132718Skan 292117395Skan If errorcount is nonzero after this call the compiler exits 293102780Skan immediately and the finish hook is not called. */ 294132718Skan bool (*post_options) (const char **); 29590075Sobrien 296132718Skan /* Called after post_options to initialize the front end. Return 297132718Skan false to indicate that no further compilation be performed, in 298132718Skan which case the finish hook is called immediately. */ 299132718Skan bool (*init) (void); 30090075Sobrien 30190075Sobrien /* Called at the end of compilation, as a finalizer. */ 302132718Skan void (*finish) (void); 30390075Sobrien 304117395Skan /* Parses the entire file. The argument is nonzero to cause bison 305117395Skan parsers to dump debugging information during parsing. */ 306132718Skan void (*parse_file) (int); 307117395Skan 30890075Sobrien /* Called immediately after parsing to clear the binding stack. */ 309132718Skan void (*clear_binding_stack) (void); 31090075Sobrien 31190075Sobrien /* Called to obtain the alias set to be used for an expression or type. 31290075Sobrien Returns -1 if the language does nothing special for it. */ 313132718Skan HOST_WIDE_INT (*get_alias_set) (tree); 31490075Sobrien 31590075Sobrien /* Called with an expression that is to be processed as a constant. 31690075Sobrien Returns either the same expression or a language-independent 31790075Sobrien constant equivalent to its input. */ 318132718Skan tree (*expand_constant) (tree); 31990075Sobrien 320117395Skan /* Called by expand_expr for language-specific tree codes. 321117395Skan Fourth argument is actually an enum expand_modifier. */ 322132718Skan rtx (*expand_expr) (tree, rtx, enum machine_mode, int, rtx *); 323117395Skan 324169689Skan /* Called by expand_expr to generate the definition of a decl. Returns 325169689Skan 1 if handled, 0 otherwise. */ 326169689Skan int (*expand_decl) (tree); 327117395Skan 32890075Sobrien /* Hook called by safe_from_p for language-specific tree codes. It is 32990075Sobrien up to the language front-end to install a hook if it has any such 33090075Sobrien codes that safe_from_p needs to know about. Since same_from_p will 33190075Sobrien recursively explore the TREE_OPERANDs of an expression, this hook 33290075Sobrien should not reexamine those pieces. This routine may recursively 33390075Sobrien call safe_from_p; it should always pass `0' as the TOP_P 33490075Sobrien parameter. */ 335132718Skan int (*safe_from_p) (rtx, tree); 33690075Sobrien 337117395Skan /* Function to finish handling an incomplete decl at the end of 338117395Skan compilation. Default hook is does nothing. */ 339132718Skan void (*finish_incomplete_decl) (tree); 340117395Skan 341117395Skan /* Mark EXP saying that we need to be able to take the address of 342117395Skan it; it should not be allocated in a register. Return true if 343117395Skan successful. */ 344132718Skan bool (*mark_addressable) (tree); 345117395Skan 34690075Sobrien /* Hook called by staticp for language-specific tree codes. */ 347169689Skan tree (*staticp) (tree); 34890075Sobrien 349117395Skan /* Replace the DECL_LANG_SPECIFIC data, which may be NULL, of the 350117395Skan DECL_NODE with a newly GC-allocated copy. */ 351132718Skan void (*dup_lang_specific_decl) (tree); 352117395Skan 353117395Skan /* Set the DECL_ASSEMBLER_NAME for a node. If it is the sort of 354117395Skan thing that the assembler should talk about, set 355117395Skan DECL_ASSEMBLER_NAME to an appropriate IDENTIFIER_NODE. 356117395Skan Otherwise, set it to the ERROR_MARK_NODE to ensure that the 357117395Skan assembler does not talk about it. */ 358132718Skan void (*set_decl_assembler_name) (tree); 359117395Skan 360117395Skan /* Return nonzero if fold-const is free to use bit-field 361117395Skan optimizations, for instance in fold_truthop(). */ 362132718Skan bool (*can_use_bit_fields_p) (void); 363117395Skan 364169689Skan /* Nonzero if operations on types narrower than their mode should 365169689Skan have their results reduced to the precision of the type. */ 366169689Skan bool reduce_bit_field_operations; 36790075Sobrien 368132718Skan /* Nonzero if this front end does not generate a dummy BLOCK between 369132718Skan the outermost scope of the function and the FUNCTION_DECL. See 370132718Skan is_body_block in stmt.c, and its callers. */ 371132718Skan bool no_body_blocks; 372132718Skan 37390075Sobrien /* The front end can add its own statistics to -fmem-report with 37490075Sobrien this hook. It should output to stderr. */ 375132718Skan void (*print_statistics) (void); 37690075Sobrien 377169689Skan /* Called by print_tree when there is a tree of class tcc_exceptional 378169689Skan that it doesn't know how to display. */ 37990075Sobrien lang_print_tree_hook print_xnode; 38090075Sobrien 381169689Skan /* Called to print language-dependent parts of tcc_decl, tcc_type, 382169689Skan and IDENTIFIER_NODE nodes. */ 38390075Sobrien lang_print_tree_hook print_decl; 38490075Sobrien lang_print_tree_hook print_type; 38590075Sobrien lang_print_tree_hook print_identifier; 38690075Sobrien 387117395Skan /* Computes the name to use to print a declaration. DECL is the 388117395Skan non-NULL declaration in question. VERBOSITY determines what 389117395Skan information will be printed: 0: DECL_NAME, demangled as 390117395Skan necessary. 1: and scope information. 2: and any other 391117395Skan information that might be interesting, such as function parameter 392117395Skan types in C++. */ 393132718Skan const char *(*decl_printable_name) (tree decl, int verbosity); 39490075Sobrien 395169689Skan /* Computes the dwarf-2/3 name for a tree. VERBOSITY determines what 396169689Skan information will be printed: 0: DECL_NAME, demangled as 397169689Skan necessary. 1: and scope information. */ 398169689Skan const char *(*dwarf_name) (tree, int verbosity); 399169689Skan 400169689Skan /* This compares two types for equivalence ("compatible" in C-based languages). 401169689Skan This routine should only return 1 if it is sure. It should not be used 402169689Skan in contexts where erroneously returning 0 causes problems. */ 403169689Skan int (*types_compatible_p) (tree x, tree y); 404169689Skan 405132718Skan /* Given a CALL_EXPR, return a function decl that is its target. */ 406132718Skan tree (*lang_get_callee_fndecl) (tree); 407132718Skan 408117395Skan /* Called by report_error_function to print out function name. */ 409132718Skan void (*print_error_function) (struct diagnostic_context *, const char *); 410117395Skan 411102780Skan /* Called from expr_size to calculate the size of the value of an 412102780Skan expression in a language-dependent way. Returns a tree for the size 413102780Skan in bytes. A frontend can call lhd_expr_size to get the default 414102780Skan semantics in cases that it doesn't want to handle specially. */ 415132718Skan tree (*expr_size) (tree); 416102780Skan 417169689Skan /* Convert a character from the host's to the target's character 418169689Skan set. The character should be in what C calls the "basic source 419169689Skan character set" (roughly, the set of characters defined by plain 420169689Skan old ASCII). The default is to return the character unchanged, 421169689Skan which is correct in most circumstances. Note that both argument 422169689Skan and result should be sign-extended under -fsigned-char, 423169689Skan zero-extended under -fno-signed-char. */ 424169689Skan HOST_WIDE_INT (*to_target_charset) (HOST_WIDE_INT); 425132718Skan 426117395Skan /* Pointers to machine-independent attribute tables, for front ends 427117395Skan using attribs.c. If one is NULL, it is ignored. Respectively, a 428117395Skan table of attributes specific to the language, a table of 429117395Skan attributes common to two or more languages (to allow easy 430117395Skan sharing), and a table of attributes for checking formats. */ 431117395Skan const struct attribute_spec *attribute_table; 432117395Skan const struct attribute_spec *common_attribute_table; 433117395Skan const struct attribute_spec *format_attribute_table; 434117395Skan 435117395Skan /* Function-related language hooks. */ 436117395Skan struct lang_hooks_for_functions function; 437117395Skan 43890075Sobrien struct lang_hooks_for_tree_inlining tree_inlining; 439117395Skan 440132718Skan struct lang_hooks_for_callgraph callgraph; 441132718Skan 44290075Sobrien struct lang_hooks_for_tree_dump tree_dump; 44390075Sobrien 444117395Skan struct lang_hooks_for_decls decls; 445117395Skan 446117395Skan struct lang_hooks_for_types types; 447117395Skan 448169689Skan /* Perform language-specific gimplification on the argument. Returns an 449169689Skan enum gimplify_status, though we can't see that type here. */ 450169689Skan int (*gimplify_expr) (tree *, tree *, tree *); 451132718Skan 452169689Skan /* Fold an OBJ_TYPE_REF expression to the address of a function. 453169689Skan KNOWN_TYPE carries the true type of the OBJ_TYPE_REF_OBJECT. */ 454169689Skan tree (*fold_obj_type_ref) (tree, tree); 455169689Skan 456169689Skan /* Return a definition for a builtin function named NAME and whose data type 457169689Skan is TYPE. TYPE should be a function type with argument types. 458169689Skan FUNCTION_CODE tells later passes how to compile calls to this function. 459169689Skan See tree.h for its possible values. 460169689Skan 461169689Skan If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME, 462169689Skan the name to be called if we can't opencode the function. If 463169689Skan ATTRS is nonzero, use that for the function's attribute list. */ 464169689Skan tree (*builtin_function) (const char *name, tree type, int function_code, 465169689Skan enum built_in_class bt_class, 466169689Skan const char *library_name, tree attrs); 467169689Skan 468169689Skan /* Used to set up the tree_contains_structure array for a frontend. */ 469169689Skan void (*init_ts) (void); 470169689Skan 471169689Skan /* Called by recompute_tree_invariant_for_addr_expr to go from EXPR 472169689Skan to a contained expression or DECL, possibly updating *TC, *TI or 473169689Skan *SE if in the process TREE_CONSTANT, TREE_INVARIANT or 474169689Skan TREE_SIDE_EFFECTS need updating. */ 475169689Skan tree (*expr_to_decl) (tree expr, bool *tc, bool *ti, bool *se); 476169689Skan 477261188Spfg /* APPLE LOCAL begin radar 6353006 */ 478261188Spfg /* For c-based languages, builds a generic type for Blocks pointers (for 479261188Spfg emitting debug information. For other languages, returns NULL. */ 480261188Spfg tree (*build_generic_block_struct_type) (void); 481261188Spfg /* APPLE LOCAL end radar 6353006 */ 482261188Spfg 48390075Sobrien /* Whenever you add entries here, make sure you adjust langhooks-def.h 48490075Sobrien and langhooks.c accordingly. */ 48590075Sobrien}; 48690075Sobrien 48790075Sobrien/* Each front end provides its own. */ 48890075Sobrienextern const struct lang_hooks lang_hooks; 48990075Sobrien 49090075Sobrien#endif /* GCC_LANG_HOOKS_H */ 491