(root)/
gcc-13.2.0/
gcc/
langhooks.h
       1  /* The lang_hooks data structure.
       2     Copyright (C) 2001-2023 Free Software Foundation, Inc.
       3  
       4  This file is part of GCC.
       5  
       6  GCC is free software; you can redistribute it and/or modify
       7  it under the terms of the GNU General Public License as published by
       8  the Free Software Foundation; either version 3, or (at your option)
       9  any later version.
      10  
      11  GCC is distributed in the hope that it will be useful,
      12  but WITHOUT ANY WARRANTY; without even the implied warranty of
      13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14  GNU General Public License for more details.
      15  
      16  You should have received a copy of the GNU General Public License
      17  along with GCC; see the file COPYING3.  If not see
      18  <http://www.gnu.org/licenses/>.  */
      19  
      20  #ifndef GCC_LANG_HOOKS_H
      21  #define GCC_LANG_HOOKS_H
      22  
      23  /* FIXME: This file should be #include-d after tree.h (for enum tree_code).  */
      24  
      25  struct diagnostic_info;
      26  
      27  struct gimplify_omp_ctx;
      28  
      29  struct array_descr_info;
      30  
      31  /* A print hook for print_tree ().  */
      32  typedef void (*lang_print_tree_hook) (FILE *, tree, int indent);
      33  
      34  enum classify_record
      35    { RECORD_IS_STRUCT, RECORD_IS_CLASS, RECORD_IS_INTERFACE };
      36  
      37  class substring_loc;
      38  
      39  /* The following hooks are documented in langhooks.cc.  Must not be
      40     NULL.  */
      41  
      42  struct lang_hooks_for_tree_inlining
      43  {
      44    bool (*var_mod_type_p) (tree, tree);
      45  };
      46  
      47  /* The following hooks are used by tree-dump.cc.  */
      48  
      49  struct lang_hooks_for_tree_dump
      50  {
      51    /* Dump language-specific parts of tree nodes.  Returns nonzero if it
      52       does not want the usual dumping of the second argument.  */
      53    bool (*dump_tree) (void *, tree);
      54  
      55    /* Determine type qualifiers in a language-specific way.  */
      56    int (*type_quals) (const_tree);
      57  };
      58  
      59  /* Hooks related to types.  */
      60  
      61  struct lang_hooks_for_types
      62  {
      63    /* Return a new type (with the indicated CODE), doing whatever
      64       language-specific processing is required.  */
      65    tree (*make_type) (enum tree_code);
      66  
      67    /* Make an enum type with the given name and values, associating
      68       them all with the given source location.  */
      69    tree (*simulate_enum_decl) (location_t, const char *, vec<string_int_pair> *);
      70  
      71    /* Do the equivalent of:
      72  
      73         typedef struct NAME { FIELDS; } NAME;
      74  
      75       associating it with location LOC.  Return the associated RECORD_TYPE.
      76  
      77       FIELDS is a list of FIELD_DECLs, in layout order.  */
      78    tree (*simulate_record_decl) (location_t loc, const char *name,
      79  				array_slice<const tree> fields);
      80  
      81    /* Return what kind of RECORD_TYPE this is, mainly for purposes of
      82       debug information.  If not defined, record types are assumed to
      83       be structures.  */
      84    enum classify_record (*classify_record) (tree);
      85  
      86    /* Given MODE and UNSIGNEDP, return a suitable type-tree with that
      87       mode.  */
      88    tree (*type_for_mode) (machine_mode, int);
      89  
      90    /* Given PRECISION and UNSIGNEDP, return a suitable type-tree for an
      91       integer type with at least that precision.  */
      92    tree (*type_for_size) (unsigned, int);
      93  
      94    /* True if the type is an instantiation of a generic type,
      95       e.g. C++ template implicit specializations.  */
      96    bool (*generic_p) (const_tree);
      97  
      98    /* Returns the TREE_VEC of elements of a given generic argument pack.  */
      99    tree (*get_argument_pack_elems) (const_tree);
     100  
     101    /* Given a type, apply default promotions to unnamed function
     102       arguments and return the new type.  Return the same type if no
     103       change.  Required by any language that supports variadic
     104       arguments.  The default hook dies.  */
     105    tree (*type_promotes_to) (tree);
     106  
     107    /* Register TYPE as a builtin type with the indicated NAME.  The
     108       TYPE is placed in the outermost lexical scope.  The semantics
     109       should be analogous to:
     110  
     111         typedef TYPE NAME;
     112  
     113       in C.  The default hook ignores the declaration.  */
     114    void (*register_builtin_type) (tree, const char *);
     115  
     116    /* This routine is called in tree.cc to print an error message for
     117       invalid use of an incomplete type.  VALUE is the expression that
     118       was used (or 0 if that isn't known) and TYPE is the type that was
     119       invalid.  LOC is the location of the use.  */
     120    void (*incomplete_type_error) (location_t loc, const_tree value,
     121  				 const_tree type);
     122  
     123    /* Called from assign_temp to return the maximum size, if there is one,
     124       for a type.  */
     125    tree (*max_size) (const_tree);
     126  
     127    /* Register language specific type size variables as potentially OpenMP
     128       firstprivate variables.  */
     129    void (*omp_firstprivatize_type_sizes) (struct gimplify_omp_ctx *, tree);
     130  
     131    /* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
     132       Called only after doing all language independent checks.
     133       At present, this function is only called when both TYPE1 and TYPE2 are
     134       FUNCTION_TYPE or METHOD_TYPE.  */
     135    bool (*type_hash_eq) (const_tree, const_tree);
     136  
     137    /* If non-NULL, return TYPE1 with any language-specific modifiers copied from
     138       TYPE2.  */
     139    tree (*copy_lang_qualifiers) (const_tree, const_tree);
     140  
     141    /* Return TRUE if TYPE uses a hidden descriptor and fills in information
     142       for the debugger about the array bounds, strides, etc.  */
     143    bool (*get_array_descr_info) (const_tree, struct array_descr_info *);
     144  
     145    /* Fill in information for the debugger about the bounds of TYPE.  */
     146    void (*get_subrange_bounds) (const_tree, tree *, tree *);
     147  
     148    /* Called on INTEGER_TYPEs.  Return NULL_TREE for non-biased types.  For
     149       biased types, return as an INTEGER_CST node the value that is represented
     150       by a physical zero.  */
     151    tree (*get_type_bias) (const_tree);
     152  
     153    /* A type descriptive of TYPE's complex layout generated to help the
     154       debugger to decode variable-length or self-referential constructs.
     155       This is only used for the AT_GNAT_descriptive_type DWARF attribute.  */
     156    tree (*descriptive_type) (const_tree);
     157  
     158    /* If we requested a pointer to a vector, build up the pointers that
     159       we stripped off while looking for the inner type.  Similarly for
     160       return values from functions.  The argument TYPE is the top of the
     161       chain, and BOTTOM is the new type which we will point to.  */
     162    tree (*reconstruct_complex_type) (tree, tree);
     163  
     164    /* Returns the tree that represents the underlying data type used to
     165       implement the enumeration.  The default implementation will just use
     166       type_for_size.  Used in dwarf2out.cc to add a DW_AT_type base type
     167       reference to a DW_TAG_enumeration.  */
     168    tree (*enum_underlying_base_type) (const_tree);
     169  
     170    /* Return a type to use in the debug info instead of TYPE, or NULL_TREE to
     171       keep TYPE.  This is useful to keep a single "source type" when the
     172       middle-end uses specialized types, for instance constrained discriminated
     173       types in Ada.  */
     174    tree (*get_debug_type) (const_tree);
     175  
     176    /* Return TRUE if TYPE implements a fixed point type and fills in information
     177       for the debugger about scale factor, etc.  */
     178    bool (*get_fixed_point_type_info) (const_tree,
     179  				     struct fixed_point_type_info *);
     180  
     181    /* Returns -1 if dwarf ATTR shouldn't be added for TYPE, or the attribute
     182       value otherwise.  */
     183    int (*type_dwarf_attribute) (const_tree, int);
     184  
     185    /* Returns a tree for the unit size of T excluding tail padding that
     186       might be used by objects inheriting from T.  */
     187    tree (*unit_size_without_reusable_padding) (tree);
     188  
     189    /* Returns type corresponding to FIELD's type when FIELD is a C++ base class
     190       i.e., type without virtual base classes or tail padding.  Returns
     191       NULL_TREE otherwise.  */
     192    tree (*classtype_as_base) (const_tree);
     193  };
     194  
     195  /* Language hooks related to decls and the symbol table.  */
     196  
     197  struct lang_hooks_for_decls
     198  {
     199    /* Return true if we are in the global binding level.  This hook is really
     200       needed only if the language supports variable-sized types at the global
     201       level, i.e. declared outside subprograms.  */
     202    bool (*global_bindings_p) (void);
     203  
     204    /* Function to add a decl to the current scope level.  Takes one
     205       argument, a decl to add.  Returns that decl, or, if the same
     206       symbol is already declared, may return a different decl for that
     207       name.  */
     208    tree (*pushdecl) (tree);
     209  
     210    /* Returns the chain of decls so far in the current scope level.  */
     211    tree (*getdecls) (void);
     212  
     213    /* Returns -1 if dwarf ATTR shouldn't be added for DECL, or the attribute
     214       value otherwise.  */
     215    int (*decl_dwarf_attribute) (const_tree, int);
     216  
     217    /* Returns True if the parameter is a generic parameter decl
     218       of a generic type, e.g a template template parameter for the C++ FE.  */
     219    bool (*generic_generic_parameter_decl_p) (const_tree);
     220  
     221    /* Determine if a function parameter got expanded from a
     222       function parameter pack.  */
     223    bool (*function_parm_expanded_from_pack_p) (tree, tree);
     224  
     225    /* Returns the generic declaration of a generic function instantiations.  */
     226    tree (*get_generic_function_decl) (const_tree);
     227  
     228    /* Returns true when we should warn for an unused global DECL.
     229       We will already have checked that it has static binding.  */
     230    bool (*warn_unused_global) (const_tree);
     231  
     232    /* Perform any post compilation-proper parser cleanups and
     233       processing.  This is currently only needed for the C++ parser,
     234       which hopefully can be cleaned up so this hook is no longer
     235       necessary.  */
     236    void (*post_compilation_parsing_cleanups) (void);
     237  
     238    /* True if this decl may be called via a sibcall.  */
     239    bool (*ok_for_sibcall) (const_tree);
     240  
     241    /* Return a tree for the actual data of an array descriptor - or NULL_TREE
     242       if original tree is not an array descriptor.  If the second argument
     243       is true, only the TREE_TYPE is returned without generating a new tree.  */
     244    tree (*omp_array_data) (tree, bool);
     245  
     246    /* Return a tree for the actual data of an array descriptor - or NULL_TREE
     247       if original tree is not an array descriptor.  If the second argument
     248       is true, only the TREE_TYPE is returned without generating a new tree.  */
     249    tree (*omp_array_size) (tree, gimple_seq *pre_p);
     250  
     251    /* True if OpenMP should regard this DECL as being a scalar which has Fortran's
     252       allocatable or pointer attribute.  */
     253    bool (*omp_is_allocatable_or_ptr) (const_tree);
     254  
     255    /* Check whether this DECL belongs to a Fortran optional argument.
     256       With 'for_present_check' set to false, decls which are optional parameters
     257       themselve are returned as tree - or a NULL_TREE otherwise. Those decls are
     258       always pointers.  With 'for_present_check' set to true, the decl for
     259       checking whether an argument is present is returned; for arguments with
     260       value attribute this is the hidden argument and of BOOLEAN_TYPE.  If the
     261       decl is unrelated to optional arguments, NULL_TREE is returned.  */
     262    tree (*omp_check_optional_argument) (tree, bool);
     263  
     264    /* True if OpenMP should privatize what this DECL points to rather
     265       than the DECL itself.  */
     266    bool (*omp_privatize_by_reference) (const_tree);
     267  
     268    /* Return sharing kind if OpenMP sharing attribute of DECL is
     269       predetermined, OMP_CLAUSE_DEFAULT_UNSPECIFIED otherwise.  */
     270    enum omp_clause_default_kind (*omp_predetermined_sharing) (tree);
     271  
     272    /* Return mapping kind if OpenMP mapping attribute of DECL is
     273       predetermined, OMP_CLAUSE_DEFAULTMAP_CATEGORY_UNSPECIFIED otherwise.  */
     274    enum omp_clause_defaultmap_kind (*omp_predetermined_mapping) (tree);
     275  
     276    /* Return decl that should be reported for DEFAULT(NONE) failure
     277       diagnostics.  Usually the DECL passed in.  */
     278    tree (*omp_report_decl) (tree);
     279  
     280    /* Return true if DECL's DECL_VALUE_EXPR (if any) should be
     281       disregarded in OpenMP construct, because it is going to be
     282       remapped during OpenMP lowering.  SHARED is true if DECL
     283       is going to be shared, false if it is going to be privatized.  */
     284    bool (*omp_disregard_value_expr) (tree, bool);
     285  
     286    /* Return true if DECL that is shared iff SHARED is true should
     287       be put into OMP_CLAUSE_PRIVATE_DEBUG.  */
     288    bool (*omp_private_debug_clause) (tree, bool);
     289  
     290    /* Return true if DECL in private clause needs
     291       OMP_CLAUSE_PRIVATE_OUTER_REF on the private clause.  */
     292    bool (*omp_private_outer_ref) (tree);
     293  
     294    /* Build and return code for a default constructor for DECL in
     295       response to CLAUSE.  OUTER is corresponding outer region's
     296       variable if needed.  Return NULL if nothing to be done.  */
     297    tree (*omp_clause_default_ctor) (tree clause, tree decl, tree outer);
     298  
     299    /* Build and return code for a copy constructor from SRC to DST.  */
     300    tree (*omp_clause_copy_ctor) (tree clause, tree dst, tree src);
     301  
     302    /* Similarly, except use an assignment operator instead.  */
     303    tree (*omp_clause_assign_op) (tree clause, tree dst, tree src);
     304  
     305    /* Build and return code for a constructor of DST that sets it to
     306       SRC + ADD.  */
     307    tree (*omp_clause_linear_ctor) (tree clause, tree dst, tree src, tree add);
     308  
     309    /* Build and return code destructing DECL.  Return NULL if nothing
     310       to be done.  */
     311    tree (*omp_clause_dtor) (tree clause, tree decl);
     312  
     313    /* Do language specific checking on an implicitly determined clause.  */
     314    void (*omp_finish_clause) (tree clause, gimple_seq *pre_p, bool);
     315  
     316    /* Return true if DECL is an allocatable variable (for the purpose of
     317       implicit mapping).  */
     318    bool (*omp_allocatable_p) (tree decl);
     319  
     320    /* Return true if DECL is a scalar variable (for the purpose of
     321       implicit firstprivatization). If 'ptr_or', pointers and
     322       allocatables are also permitted.  */
     323    bool (*omp_scalar_p) (tree decl, bool ptr_ok);
     324  
     325    /* Return true if DECL is a scalar variable with Fortran target but not
     326       allocatable or pointer attribute (for the purpose of implicit mapping).  */
     327    bool (*omp_scalar_target_p) (tree decl);
     328  
     329    /* Return a pointer to the tree representing the initializer
     330       expression for the non-local variable DECL.  Return NULL if
     331       DECL is not initialized.  */
     332    tree *(*omp_get_decl_init) (tree decl);
     333  
     334    /* Free any extra memory used to hold initializer information for
     335       variable declarations.  omp_get_decl_init must not be called
     336       after calling this.  */
     337    void (*omp_finish_decl_inits) (void);
     338  };
     339  
     340  /* Language hooks related to LTO serialization.  */
     341  
     342  struct lang_hooks_for_lto
     343  {
     344    /* Begin a new LTO section named NAME.  */
     345    void (*begin_section) (const char *name);
     346  
     347    /* Write DATA of length LEN to the currently open LTO section.  BLOCK is a
     348       pointer to the dynamically allocated memory containing DATA.  The
     349       append_data function is responsible for freeing it when it is no longer
     350       needed.  */
     351    void (*append_data) (const void *data, size_t len, void *block);
     352  
     353    /* End the previously begun LTO section.  */
     354    void (*end_section) (void);
     355  };
     356  
     357  /* Language-specific hooks.  See langhooks-def.h for defaults.  */
     358  
     359  struct lang_hooks
     360  {
     361    /* String identifying the front end and optionally language standard
     362       version, e.g. "GNU C++98".  */
     363    const char *name;
     364  
     365    /* sizeof (struct lang_identifier), so make_node () creates
     366       identifier nodes long enough for the language-specific slots.  */
     367    size_t identifier_size;
     368  
     369    /* Remove any parts of the tree that are used only by the FE. */
     370    void (*free_lang_data) (tree);
     371  
     372    /* Determines the size of any language-specific tcc_constant,
     373       tcc_exceptional or tcc_type nodes.  Since it is called from
     374       make_node, the only information available is the tree code.
     375       Expected to die on unrecognized codes.  */
     376    size_t (*tree_size) (enum tree_code);
     377  
     378    /* Return the language mask used for converting argv into a sequence
     379       of options.  */
     380    unsigned int (*option_lang_mask) (void);
     381  
     382    /* Initialize variables in an options structure.  */
     383    void (*init_options_struct) (struct gcc_options *opts);
     384  
     385    /* After the initialize_diagnostics hook is called, do any simple
     386       initialization needed before any calls to handle_option, other
     387       than that done by the init_options_struct hook.  */
     388    void (*init_options) (unsigned int decoded_options_count,
     389  			struct cl_decoded_option *decoded_options);
     390  
     391    /* Callback used to perform language-specific initialization for the
     392       global diagnostic context structure.  */
     393    void (*initialize_diagnostics) (diagnostic_context *);
     394  
     395    /* Beginning the main source file.  */
     396    void (*preprocess_main_file) (cpp_reader *, line_maps *,
     397  				const line_map_ordinary *);
     398  
     399    /* Adjust libcpp options and callbacks.  */
     400    void (*preprocess_options) (cpp_reader *);
     401  
     402    /* Undefining a macro.  */
     403    void (*preprocess_undef) (cpp_reader *, location_t, cpp_hashnode *);
     404  
     405    /* Observer for preprocessing stream.  */
     406    uintptr_t (*preprocess_token) (cpp_reader *, const cpp_token *, uintptr_t);
     407    /* Various flags it can return about the token.  */
     408    enum PT_flags
     409      {
     410       PT_begin_pragma = 1 << 0
     411      };
     412  
     413    /* Register language-specific dumps.  */
     414    void (*register_dumps) (gcc::dump_manager *);
     415  
     416    /* Return true if a warning should be given about option OPTION,
     417       which is for the wrong language, false if it should be quietly
     418       ignored.  */
     419    bool (*complain_wrong_lang_p) (const struct cl_option *option);
     420  
     421    /* Handle the switch CODE, which has real type enum opt_code from
     422       options.h.  If the switch takes an argument, it is passed in ARG
     423       which points to permanent storage.  The handler is responsible for
     424       checking whether ARG is NULL, which indicates that no argument
     425       was in fact supplied.  For -f and -W switches, VALUE is 1 or 0
     426       for the positive and negative forms respectively.  HANDLERS should
     427       be passed to any recursive handle_option calls.  LOC is the
     428       location of the option.
     429  
     430       Return true if the switch is valid, false if invalid.  */
     431    bool (*handle_option) (size_t code, const char *arg, HOST_WIDE_INT value,
     432  			 int kind, location_t loc,
     433  			 const struct cl_option_handlers *handlers);
     434  
     435    /* Called when all command line options have been parsed to allow
     436       further processing and initialization
     437  
     438       Should return true to indicate that a compiler back-end is
     439       not required, such as with the -E option.
     440  
     441       If errorcount is nonzero after this call the compiler exits
     442       immediately and the finish hook is not called.  */
     443    bool (*post_options) (const char **);
     444  
     445    /* Called after post_options to initialize the front end.  Return
     446       false to indicate that no further compilation be performed, in
     447       which case the finish hook is called immediately.  */
     448    bool (*init) (void);
     449  
     450    /* Called at the end of compilation, as a finalizer.  */
     451    void (*finish) (void);
     452  
     453    /* Parses the entire file.  */
     454    void (*parse_file) (void);
     455  
     456    /* Determines if it's ok for a function to have no noreturn attribute.  */
     457    bool (*missing_noreturn_ok_p) (tree);
     458  
     459    /* Called to obtain the alias set to be used for an expression or type.
     460       Returns -1 if the language does nothing special for it.  */
     461    alias_set_type (*get_alias_set) (tree);
     462  
     463    /* Function to finish handling an incomplete decl at the end of
     464       compilation.  Default hook is does nothing.  */
     465    void (*finish_incomplete_decl) (tree);
     466  
     467    /* Replace the DECL_LANG_SPECIFIC data, which may be NULL, of the
     468       DECL_NODE with a newly GC-allocated copy.  */
     469    void (*dup_lang_specific_decl) (tree);
     470  
     471    /* Set the DECL_ASSEMBLER_NAME for a node.  If it is the sort of
     472       thing that the assembler should talk about, set
     473       DECL_ASSEMBLER_NAME to an appropriate IDENTIFIER_NODE.
     474       Otherwise, set it to the ERROR_MARK_NODE to ensure that the
     475       assembler does not talk about it.  */
     476    void (*set_decl_assembler_name) (tree);
     477  
     478    /* Overwrite the DECL_ASSEMBLER_NAME for a node.  The name is being
     479       changed (including to or from NULL_TREE).  */
     480    void (*overwrite_decl_assembler_name) (tree, tree);
     481  
     482    /* The front end can add its own statistics to -fmem-report with
     483       this hook.  It should output to stderr.  */
     484    void (*print_statistics) (void);
     485  
     486    /* Called by print_tree when there is a tree of class tcc_exceptional
     487       or tcc_constant that it doesn't know how to display.  */
     488    lang_print_tree_hook print_xnode;
     489  
     490    /* Called to print language-dependent parts of tcc_decl, tcc_type,
     491       and IDENTIFIER_NODE nodes.  */
     492    lang_print_tree_hook print_decl;
     493    lang_print_tree_hook print_type;
     494    lang_print_tree_hook print_identifier;
     495  
     496    /* Computes the name to use to print a declaration.  DECL is the
     497       non-NULL declaration in question.  VERBOSITY determines what
     498       information will be printed: 0: DECL_NAME, demangled as
     499       necessary.  1: and scope information.  2: and any other
     500       information that might be interesting, such as function parameter
     501       types in C++.  The name is in the internal character set and
     502       needs to be converted to the locale character set of diagnostics,
     503       or to the execution character set for strings such as
     504       __PRETTY_FUNCTION__.  */
     505    const char *(*decl_printable_name) (tree decl, int verbosity);
     506  
     507    /* Computes the dwarf-2/3 name for a tree.  VERBOSITY determines what
     508       information will be printed: 0: DECL_NAME, demangled as
     509       necessary.  1: and scope information.  */
     510    const char *(*dwarf_name) (tree, int verbosity);
     511  
     512    /* This compares two types for equivalence ("compatible" in C-based languages).
     513       This routine should only return 1 if it is sure.  It should not be used
     514       in contexts where erroneously returning 0 causes problems.  */
     515    int (*types_compatible_p) (tree x, tree y);
     516  
     517    /* Called by report_error_function to print out function name.  */
     518    void (*print_error_function) (diagnostic_context *, const char *,
     519  				struct diagnostic_info *);
     520  
     521    /* Convert a character from the host's to the target's character
     522       set.  The character should be in what C calls the "basic source
     523       character set" (roughly, the set of characters defined by plain
     524       old ASCII).  The default is to return the character unchanged,
     525       which is correct in most circumstances.  Note that both argument
     526       and result should be sign-extended under -fsigned-char,
     527       zero-extended under -fno-signed-char.  */
     528    HOST_WIDE_INT (*to_target_charset) (HOST_WIDE_INT);
     529  
     530    /* Pointers to machine-independent attribute tables, for front ends
     531       using attribs.cc.  If one is NULL, it is ignored.  Respectively, a
     532       table of attributes specific to the language, a table of
     533       attributes common to two or more languages (to allow easy
     534       sharing), and a table of attributes for checking formats.  */
     535    const struct attribute_spec *attribute_table;
     536    const struct attribute_spec *common_attribute_table;
     537    const struct attribute_spec *format_attribute_table;
     538  
     539    struct lang_hooks_for_tree_inlining tree_inlining;
     540  
     541    struct lang_hooks_for_tree_dump tree_dump;
     542  
     543    struct lang_hooks_for_decls decls;
     544  
     545    struct lang_hooks_for_types types;
     546    
     547    struct lang_hooks_for_lto lto;
     548  
     549    /* Returns a TREE_VEC of the generic parameters of an instantiation of
     550       a generic type or decl, e.g. C++ template instantiation.  If
     551       TREE_CHAIN of the return value is set, it is an INTEGER_CST
     552       indicating how many of the elements are non-default.  */
     553    tree (*get_innermost_generic_parms) (const_tree);
     554  
     555    /* Returns the TREE_VEC of arguments of an instantiation
     556       of a generic type of decl, e.g. C++ template instantiation.  */
     557    tree (*get_innermost_generic_args) (const_tree);
     558  
     559    /* Determine if a tree is a function parameter pack.  */
     560    bool (*function_parameter_pack_p) (const_tree);
     561  
     562    /* Perform language-specific gimplification on the argument.  Returns an
     563       enum gimplify_status, though we can't see that type here.  */
     564    int (*gimplify_expr) (tree *, gimple_seq *, gimple_seq *);
     565  
     566    /* Do language specific processing in the builtin function DECL  */
     567    tree (*builtin_function) (tree decl);
     568  
     569    /* Like builtin_function, but make sure the scope is the external scope.
     570       This is used to delay putting in back end builtin functions until the ISA
     571       that defines the builtin is declared via function specific target options,
     572       which can save memory for machines like the x86_64 that have multiple
     573       ISAs.  If this points to the same function as builtin_function, the
     574       backend must add all of the builtins at program initialization time.  */
     575    tree (*builtin_function_ext_scope) (tree decl);
     576  
     577    /* Do language-specific processing for target-specific built-in
     578       function DECL, so that it is defined in the global scope (only)
     579       and is available without needing to be explicitly declared.
     580  
     581       This is intended for targets that want to inject declarations of
     582       built-in functions into the source language (such as in response
     583       to a pragma) rather than providing them in the source language itself.  */
     584    tree (*simulate_builtin_function_decl) (tree decl);
     585  
     586    /* Used to set up the tree_contains_structure array for a frontend. */
     587    void (*init_ts) (void);
     588  
     589    /* Called by recompute_tree_invariant_for_addr_expr to go from EXPR
     590       to a contained expression or DECL, possibly updating *TC or *SE
     591       if in the process TREE_CONSTANT or TREE_SIDE_EFFECTS need updating.  */
     592    tree (*expr_to_decl) (tree expr, bool *tc, bool *se);
     593  
     594    /* The EH personality function decl.  */
     595    tree (*eh_personality) (void);
     596  
     597    /* Map a type to a runtime object to match type.  */
     598    tree (*eh_runtime_type) (tree);
     599  
     600    /* If non-NULL, this is a function that returns a function decl to be
     601       executed if an unhandled exception is propagated out of a cleanup
     602       region.  For example, in C++, an exception thrown by a destructor
     603       during stack unwinding is required to result in a call to
     604       `std::terminate', so the C++ version of this function returns a
     605       FUNCTION_DECL for `std::terminate'.  */
     606    tree (*eh_protect_cleanup_actions) (void);
     607  
     608    /* Return true if a stmt can fallthru.  Used by block_may_fallthru
     609       to possibly handle language trees.  */
     610    bool (*block_may_fallthru) (const_tree);
     611  
     612    /* True if this language uses __cxa_end_cleanup when the ARM EABI
     613       is enabled.  */
     614    bool eh_use_cxa_end_cleanup;
     615  
     616    /* True if this language requires deep unsharing of tree nodes prior to
     617       gimplification.  */
     618    bool deep_unsharing;
     619  
     620    /* True if this language may use custom descriptors for nested functions
     621       instead of trampolines.  */
     622    bool custom_function_descriptors;
     623  
     624    /* True if this language emits begin stmt notes.  */
     625    bool emits_begin_stmt;
     626  
     627    /* Run all lang-specific selftests.  */
     628    void (*run_lang_selftests) (void);
     629  
     630    /* Attempt to determine the source location of the substring.
     631       If successful, return NULL and write the source location to *OUT_LOC.
     632       Otherwise return an error message.  Error messages are intended
     633       for GCC developers (to help debugging) rather than for end-users.  */
     634    const char *(*get_substring_location) (const substring_loc &,
     635  					 location_t *out_loc);
     636  
     637    /* Invoked before the early_finish debug hook is invoked.  */
     638    void (*finalize_early_debug) (void);
     639  
     640    /* Get a value for the SARIF v2.1.0 "artifact.sourceLanguage" property
     641       for FILENAME, or return NULL.
     642       See SARIF v2.1.0 Appendix J for suggested values for common programming
     643       languages.  */
     644    const char *(*get_sarif_source_language) (const char *filename);
     645  
     646    /* Whenever you add entries here, make sure you adjust langhooks-def.h
     647       and langhooks.cc accordingly.  */
     648  };
     649  
     650  /* Each front end provides its own.  */
     651  extern struct lang_hooks lang_hooks;
     652  
     653  extern tree add_builtin_function (const char *name, tree type,
     654  				  int function_code, enum built_in_class cl,
     655  				  const char *library_name,
     656  				  tree attrs);
     657  
     658  extern tree add_builtin_function_ext_scope (const char *name, tree type,
     659  					    int function_code,
     660  					    enum built_in_class cl,
     661  					    const char *library_name,
     662  					    tree attrs);
     663  extern tree simulate_builtin_function_decl (location_t, const char *, tree,
     664  					    int, const char *, tree);
     665  extern tree add_builtin_type (const char *name, tree type);
     666  
     667  /* Language helper functions.  */
     668  
     669  extern bool lang_GNU_C (void);
     670  extern bool lang_GNU_CXX (void);
     671  extern bool lang_GNU_Fortran (void);
     672  extern bool lang_GNU_OBJC (void);
     673  
     674  #endif /* GCC_LANG_HOOKS_H */