OSDN Git Service

Fix another mips typo.
[pf3gnuchains/gcc-fork.git] / gcc / langhooks.h
index 4c43ddc..6623ff6 100644 (file)
@@ -1,5 +1,5 @@
 /* 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.
 
@@ -39,23 +39,20 @@ struct lang_hooks_for_tree_inlining
   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);
+  bool (*var_mod_type_p) (tree, tree);
   int (*start_inlining) (tree);
   void (*end_inlining) (tree);
-  tree (*convert_parm_for_inlining) (tree, tree, tree);
-  int (*estimate_num_insns) (tree);
+  tree (*convert_parm_for_inlining) (tree, tree, tree, int);
 };
 
 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) (tree);
+  /* 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) (tree);
 };
@@ -75,6 +72,9 @@ struct lang_hooks_for_functions
 
   /* Called when leaving a nested function.  */
   void (*leave_nested) (struct function *);
+
+  /* Determines if it's ok for a function to have no noreturn attribute.  */
+  bool (*missing_noreturn_ok_p) (tree);
 };
 
 /* The following hooks are used by tree-dump.c.  */
@@ -123,28 +123,35 @@ struct lang_hooks_for_types
      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);
+
+  /* Called from assign_temp to return the maximum size, if there is one,
+     for a type.  */
+  tree (*max_size) (tree);
+
+  /* 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.  */
 
 struct lang_hooks_for_decls
 {
-  /* Enter a new lexical scope.  Argument is always zero when called
-     from outside the front end.  */
-  void (*pushlevel) (int);
-
-  /* Exit a lexical scope and return a BINDING for that scope.
-     Takes three arguments:
-     KEEP -- nonzero if there were declarations in this scope.
-     REVERSE -- reverse the order of decls before returning them.
-     FUNCTIONBODY -- nonzero if this level is the body of a function.  */
-  tree (*poplevel) (int, int, int);
-
   /* Returns nonzero if we are in the global binding level.  Ada
      returns -1 for an undocumented reason used in stor-layout.c.  */
   int (*global_bindings_p) (void);
@@ -154,9 +161,6 @@ struct lang_hooks_for_decls
      to handle the BLOCK node inside the BIND_EXPR.  */
   void (*insert_block) (tree);
 
-  /* Set the BLOCK node for the current scope level.  */
-  void (*set_block) (tree);
-
   /* Function to add a decl to the current scope level.  Takes one
      argument, a decl to add.  Returns that decl, or, if the same
      symbol is already declared, may return a different decl for that
@@ -202,6 +206,10 @@ struct lang_hooks
      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
@@ -253,7 +261,11 @@ struct lang_hooks
 
   /* 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 *);
+
+  /* Called by expand_expr to generate the definition of a decl.  Returns
+     1 if handled, 0 otherwise.  */
+  int (*expand_decl) (tree);
 
   /* Prepare expr to be an argument of a TRUTH_NOT_EXPR or other logical
      operation.
@@ -268,10 +280,6 @@ struct lang_hooks
      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
@@ -285,32 +293,23 @@ struct lang_hooks
      compilation.  Default hook is does nothing.  */
   void (*finish_incomplete_decl) (tree);
 
-  /* Function used by unsafe_for_reeval.  A non-negative number is
-     returned directly from unsafe_for_reeval, a negative number falls
-     through.  The default hook returns a negative number.  */
-  int (*unsafe_for_reeval) (tree);
-
   /* Mark EXP saying that we need to be able to take the address of
      it; it should not be allocated in a register.  Return true if
      successful.  */
   bool (*mark_addressable) (tree);
 
   /* Hook called by staticp for language-specific tree codes.  */
-  int (*staticp) (tree);
+  bool (*staticp) (tree);
 
   /* Replace the DECL_LANG_SPECIFIC data, which may be NULL, of the
      DECL_NODE with a newly GC-allocated copy.  */
   void (*dup_lang_specific_decl) (tree);
 
-  /* Called before its argument, an UNSAVE_EXPR, is to be
-     unsaved.  Modify it in-place so that all the evaluate only once
+  /* Reset argument so that it can be expanded again.
+     Modify it in-place so that all the evaluate only once
      things are cleared out.  */
   tree (*unsave_expr_now) (tree);
 
-  /* Called by expand_expr to build and return the cleanup-expression
-     for the passed TARGET_EXPR.  Return NULL if there is none.  */
-  tree (*maybe_build_cleanup) (tree);
-
   /* Set the DECL_ASSEMBLER_NAME for a node.  If it is the sort of
      thing that the assembler should talk about, set
      DECL_ASSEMBLER_NAME to an appropriate IDENTIFIER_NODE.
@@ -322,8 +321,9 @@ struct lang_hooks
      optimizations, for instance in fold_truthop().  */
   bool (*can_use_bit_fields_p) (void);
 
-  /* Nonzero if TYPE_READONLY and TREE_READONLY should always be honored.  */
-  bool honor_readonly;
+  /* Nonzero if operations on types narrower than their mode should
+     have their results reduced to the precision of the type.  */
+  bool reduce_bit_field_operations;
 
   /* Nonzero if this front end does not generate a dummy BLOCK between
      the outermost scope of the function and the FUNCTION_DECL.  See
@@ -352,6 +352,14 @@ struct lang_hooks
      types in C++.  */
   const char *(*decl_printable_name) (tree decl, int verbosity);
 
+  /* This compares two types for equivalence ("compatible" in C-based languages).
+     This routine should only return 1 if it is sure.  It should not be used
+     in contexts where erroneously returning 0 causes problems.  */
+  int (*types_compatible_p) (tree x, tree y);
+
+  /* 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 *);
 
@@ -383,6 +391,26 @@ struct lang_hooks
 
   struct lang_hooks_for_types types;
 
+  /* Perform language-specific gimplification on the argument.  Returns an
+     enum gimplify_status, though we can't see that type here.  */
+  int (*gimplify_expr) (tree *, tree *, tree *);
+
+  /* Fold an OBJ_TYPE_REF expression to the address of a function.
+     KNOWN_TYPE carries the true type of the OBJ_TYPE_REF_OBJECT.  */
+  tree (*fold_obj_type_ref) (tree, tree);
+
+  /* Return a definition for a builtin function named NAME and whose data type
+     is TYPE.  TYPE should be a function type with argument types.
+     FUNCTION_CODE tells later passes how to compile calls to this function.
+     See tree.h for its possible values.
+
+     If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
+     the name to be called if we can't opencode the function.  If
+     ATTRS is nonzero, use that for the function's attribute list.  */
+  tree (*builtin_function) (const char *name, tree type, int function_code,
+                           enum built_in_class bt_class,
+                           const char *library_name, tree attrs);
+
   /* Whenever you add entries here, make sure you adjust langhooks-def.h
      and langhooks.c accordingly.  */
 };