+2004-05-24 Geoffrey Keating <geoffk@apple.com>
+
+ * method.c (implicitly_declare_fn): Don't call defer_fn; abort
+ if it might be needed.
+ * pt.c (mark_decl_instantiated): Only call defer_fn if
+ the function actually needs processing in finish_file.
+ * decl2.c (finish_file): Add check that elements in
+ deferred_fns_used are really needed there. Remove unnecessary
+ test of DECL_SAVED_TREE.
+
2004-05-23 Paolo Bonzini <bonzini@gnu.org>
* Make-lang.in: No need to specify $(LIBCPP).
calling import_export_decl will make an inline template
instantiation "static", which will result in errors about
the use of undefined functions if there is no body for
- the function. */
+ the function. In fact, all the functions in this list
+ *should* have a body. */
if (!DECL_SAVED_TREE (decl))
- continue;
+ {
+ if (! DECL_DECLARED_INLINE_P (decl) || ! TREE_USED (decl))
+ abort ();
+ continue;
+ }
import_export_decl (decl);
gotten around to synthesizing yet.) */
if (!DECL_EXTERNAL (decl)
&& DECL_NEEDED_P (decl)
- && DECL_SAVED_TREE (decl)
&& !TREE_ASM_WRITTEN (decl)
&& (!flag_unit_at_a_time
|| !cgraph_node (decl)->local.finalized))
DECL_NOT_REALLY_EXTERN (fn) = 1;
DECL_DECLARED_INLINE_P (fn) = 1;
DECL_INLINE (fn) = 1;
- defer_fn (fn);
+ if (TREE_USED (fn))
+ abort ();
return fn;
}
maybe_make_one_only (result);
}
- if (TREE_CODE (result) == FUNCTION_DECL)
+ if (TREE_CODE (result) == FUNCTION_DECL
+ && (DECL_ARTIFICIAL (result)
+ || (DECL_DECLARED_INLINE_P (result) && TREE_USED (result))))
defer_fn (result);
}