/* The lang_hooks data structure.
- Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
+ Copyright 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GCC.
struct lang_hooks_for_tree_inlining
{
- union tree_node *(*walk_subtrees) (union tree_node **, int *,
- union tree_node *(*)
- (union tree_node **, int *, void *),
- void *, void *);
- int (*cannot_inline_tree_fn) (union tree_node **);
- int (*disregard_inline_limits) (union tree_node *);
- union tree_node *(*add_pending_fn_decls) (void *, union tree_node *);
- int (*tree_chain_matters_p) (union tree_node *);
- int (*auto_var_in_fn_p) (union tree_node *, union tree_node *);
- union tree_node *(*copy_res_decl_for_inlining) (union tree_node *,
- union tree_node *,
- union tree_node *,
- void *, int *, tree);
- int (*anon_aggr_type_p) (union tree_node *);
- bool (*var_mod_type_p) (union tree_node *);
- int (*start_inlining) (union tree_node *);
- void (*end_inlining) (union tree_node *);
- union tree_node *(*convert_parm_for_inlining) (union tree_node *,
- union tree_node *,
- union tree_node *);
+ tree (*walk_subtrees) (tree *, int *,
+ tree (*) (tree *, int *, void *),
+ void *, void *);
+ int (*cannot_inline_tree_fn) (tree *);
+ int (*disregard_inline_limits) (tree);
+ tree (*add_pending_fn_decls) (void *, tree);
+ int (*tree_chain_matters_p) (tree);
+ int (*auto_var_in_fn_p) (tree, tree);
+ tree (*copy_res_decl_for_inlining) (tree, tree, tree,
+ void *, int *, tree);
+ int (*anon_aggr_type_p) (tree);
+ bool (*var_mod_type_p) (tree);
+ int (*start_inlining) (tree);
+ void (*end_inlining) (tree);
+ tree (*convert_parm_for_inlining) (tree, tree, tree, int);
+ int (*estimate_num_insns) (tree);
};
struct lang_hooks_for_callgraph
{
- /* Function passed as argument is needed and will be compiled.
- Lower the representation so the calls are explicit. */
- void (*lower_function) (union tree_node *);
+ /* The node passed is a language-specific tree node. If its contents
+ are relevant to use of other declarations, mark them. */
+ tree (*analyze_expr) (tree *, int *, tree);
+
/* Produce RTL for function passed as argument. */
- void (*expand_function) (union tree_node *);
+ void (*expand_function) (tree);
};
/* Lang hooks for management of language-specific data or status
void (*leave_nested) (struct function *);
};
+/* Lang hooks for rtl code generation. */
+struct lang_hooks_for_rtl_expansion
+{
+ /* Called after expand_function_start, but before expanding the body. */
+ void (*start) (void);
+
+ /* Called to expand each statement. */
+ void (*stmt) (tree);
+
+ /* Called after expanding the body but before expand_function_end. */
+ void (*end) (void);
+};
+
/* The following hooks are used by tree-dump.c. */
struct lang_hooks_for_tree_dump
arguments. The default hook aborts. */
tree (*type_promotes_to) (tree);
+ /* Register TYPE as a builtin type with the indicated NAME. The
+ TYPE is placed in the outermost lexical scope. The semantics
+ should be analogous to:
+
+ typedef TYPE NAME;
+
+ in C. The default hook ignores the declaration. */
+ void (*register_builtin_type) (tree, const char *);
+
/* This routine is called in tree.c to print an error message for
invalid use of an incomplete type. VALUE is the expression that
was used (or 0 if that isn't known) and TYPE is the type that was
invalid. */
void (*incomplete_type_error) (tree value, tree type);
+
+ /* Nonzero if types that are identical are to be hashed so that only
+ one copy is kept. If a language requires unique types for each
+ user-specified type, such as Ada, this should be set to TRUE. */
+ bool hash_types;
};
/* Language hooks related to decls and the symbol table. */
the language mask to filter the switch array with. */
unsigned int (*init_options) (unsigned int argc, const char **argv);
+ /* Callback used to perform language-specific initialization for the
+ global diagnostic context structure. */
+ void (*initialize_diagnostics) (struct diagnostic_context *);
+
/* Handle the switch CODE, which has real type enum opt_code from
options.h. If the switch takes an argument, it is passed in ARG
which points to permanent storage. The handler is responsible for
valid and should not be treated as language-independent too. */
int (*handle_option) (size_t code, const char *arg, int value);
+ /* Return false to use the default complaint about a missing
+ argument, otherwise output a complaint and return true. */
+ bool (*missing_argument) (const char *opt, size_t code);
+
/* Called when all command line options have been parsed to allow
further processing and initialization
/* Called by expand_expr for language-specific tree codes.
Fourth argument is actually an enum expand_modifier. */
- rtx (*expand_expr) (tree, rtx, enum machine_mode, int);
+ rtx (*expand_expr) (tree, rtx, enum machine_mode, int, rtx *);
/* Prepare expr to be an argument of a TRUTH_NOT_EXPR or other logical
operation.
error_mark_node). */
tree (*truthvalue_conversion) (tree);
- /* Possibly apply default attributes to a function (represented by
- a FUNCTION_DECL). */
- void (*insert_default_attributes) (tree);
-
/* Hook called by safe_from_p for language-specific tree codes. It is
up to the language front-end to install a hook if it has any such
codes that safe_from_p needs to know about. Since same_from_p will
types in C++. */
const char *(*decl_printable_name) (tree decl, int verbosity);
+ /* Given a CALL_EXPR, return a function decl that is its target. */
+ tree (*lang_get_callee_fndecl) (tree);
+
/* Called by report_error_function to print out function name. */
void (*print_error_function) (struct diagnostic_context *, const char *);
semantics in cases that it doesn't want to handle specially. */
tree (*expr_size) (tree);
+ /* Called from uninitialized_vars_warning to find out if a variable is
+ uninitialized based on DECL_INITIAL. */
+ bool (*decl_uninit) (tree);
+
+ /* Update lang specific fields after duplicating function body. */
+ void (*update_decl_after_saving) (tree, void *);
+
/* Pointers to machine-independent attribute tables, for front ends
using attribs.c. If one is NULL, it is ignored. Respectively, a
table of attributes specific to the language, a table of
struct lang_hooks_for_types types;
+ struct lang_hooks_for_rtl_expansion rtl_expand;
+
/* Whenever you add entries here, make sure you adjust langhooks-def.h
and langhooks.c accordingly. */
};