+/* Do nothing (tree). */
+
+void
+lhd_do_nothing_t (tree ARG_UNUSED (t))
+{
+}
+
+/* Do nothing (int). */
+
+void
+lhd_do_nothing_i (int ARG_UNUSED (i))
+{
+}
+
+/* Do nothing (int, int, int). Return NULL_TREE. */
+
+tree
+lhd_do_nothing_iii_return_null_tree (int ARG_UNUSED (i),
+ int ARG_UNUSED (j),
+ int ARG_UNUSED (k))
+{
+ return NULL_TREE;
+}
+
+/* Do nothing (function). */
+
+void
+lhd_do_nothing_f (struct function * ARG_UNUSED (f))
+{
+}
+
+/* Do nothing (return the tree node passed). */
+
+tree
+lhd_return_tree (tree t)
+{
+ return t;
+}
+
+/* Do nothing (return NULL_TREE). */
+
+tree
+lhd_return_null_tree_v (void)
+{
+ return NULL_TREE;
+}
+
+/* Do nothing (return NULL_TREE). */
+
+tree
+lhd_return_null_tree (tree ARG_UNUSED (t))
+{
+ return NULL_TREE;
+}
+
+/* The default post options hook. */
+
+bool
+lhd_post_options (const char ** ARG_UNUSED (pfilename))
+{
+ return false;
+}
+
+/* Called from by print-tree.c. */
+
+void
+lhd_print_tree_nothing (FILE * ARG_UNUSED (file),
+ tree ARG_UNUSED (node),
+ int ARG_UNUSED (indent))
+{
+}
+
+/* Called from safe_from_p. */
+
+int
+lhd_safe_from_p (rtx ARG_UNUSED (x), tree ARG_UNUSED (exp))
+{
+ return 1;
+}
+
+/* Called from staticp. */
+
+tree
+lhd_staticp (tree ARG_UNUSED (exp))
+{
+ return NULL;
+}
+
+/* Called from check_global_declarations. */
+
+bool
+lhd_warn_unused_global_decl (tree decl)
+{
+ /* This is what used to exist in check_global_declarations. Probably
+ not many of these actually apply to non-C languages. */
+
+ if (TREE_CODE (decl) == FUNCTION_DECL && DECL_INLINE (decl))
+ return false;
+ if (TREE_CODE (decl) == VAR_DECL && TREE_READONLY (decl))
+ return false;
+ if (DECL_IN_SYSTEM_HEADER (decl))
+ return false;
+
+ return true;
+}
+
+/* Set the DECL_ASSEMBLER_NAME for DECL. */
+void
+lhd_set_decl_assembler_name (tree decl)
+{
+ /* The language-independent code should never use the
+ DECL_ASSEMBLER_NAME for lots of DECLs. Only FUNCTION_DECLs and
+ VAR_DECLs for variables with static storage duration need a real
+ DECL_ASSEMBLER_NAME. */
+ if (TREE_CODE (decl) == FUNCTION_DECL
+ || (TREE_CODE (decl) == VAR_DECL
+ && (TREE_STATIC (decl)
+ || DECL_EXTERNAL (decl)
+ || TREE_PUBLIC (decl))))
+ {
+ /* By default, assume the name to use in assembly code is the
+ same as that used in the source language. (That's correct
+ for C, and GCC used to set DECL_ASSEMBLER_NAME to the same
+ value as DECL_NAME in build_decl, so this choice provides
+ backwards compatibility with existing front-ends.
+
+ Can't use just the variable's own name for a variable whose
+ scope is less than the whole compilation. Concatenate a
+ distinguishing number - we use the DECL_UID. */
+ if (TREE_PUBLIC (decl) || DECL_CONTEXT (decl) == NULL_TREE)
+ SET_DECL_ASSEMBLER_NAME (decl, DECL_NAME (decl));
+ else
+ {
+ const char *name = IDENTIFIER_POINTER (DECL_NAME (decl));
+ char *label;
+
+ ASM_FORMAT_PRIVATE_NAME (label, name, DECL_UID (decl));
+ SET_DECL_ASSEMBLER_NAME (decl, get_identifier (label));
+ }
+ }
+ else
+ /* Nobody should ever be asking for the DECL_ASSEMBLER_NAME of
+ these DECLs -- unless they're in language-dependent code, in
+ which case set_decl_assembler_name hook should handle things. */
+ abort ();
+}
+
+/* By default we always allow bit-field based optimizations. */
+bool
+lhd_can_use_bit_fields_p (void)
+{
+ return true;
+}
+
+/* Type promotion for variable arguments. */
+tree
+lhd_type_promotes_to (tree ARG_UNUSED (type))
+{
+ abort ();
+}
+
+/* Registration of machine- or os-specific builtin types. */
+void
+lhd_register_builtin_type (tree ARG_UNUSED (type),
+ const char * ARG_UNUSED (name))
+{
+}
+
+/* Invalid use of an incomplete type. */
+void
+lhd_incomplete_type_error (tree ARG_UNUSED (value), tree type)
+{
+ if (TREE_CODE (type) == ERROR_MARK)
+ return;
+
+ abort ();
+}
+