Commit bf277438 by Geoffrey Keating Committed by Geoffrey Keating

method.c (implicitly_declare_fn): Don't call defer_fn; abort if it might be needed.

	* 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.

From-SVN: r82217
parent a668adb2
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> 2004-05-23 Paolo Bonzini <bonzini@gnu.org>
* Make-lang.in: No need to specify $(LIBCPP). * Make-lang.in: No need to specify $(LIBCPP).
......
...@@ -2749,9 +2749,14 @@ finish_file (void) ...@@ -2749,9 +2749,14 @@ finish_file (void)
calling import_export_decl will make an inline template calling import_export_decl will make an inline template
instantiation "static", which will result in errors about instantiation "static", which will result in errors about
the use of undefined functions if there is no body for 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)) if (!DECL_SAVED_TREE (decl))
continue; {
if (! DECL_DECLARED_INLINE_P (decl) || ! TREE_USED (decl))
abort ();
continue;
}
import_export_decl (decl); import_export_decl (decl);
...@@ -2776,7 +2781,6 @@ finish_file (void) ...@@ -2776,7 +2781,6 @@ finish_file (void)
gotten around to synthesizing yet.) */ gotten around to synthesizing yet.) */
if (!DECL_EXTERNAL (decl) if (!DECL_EXTERNAL (decl)
&& DECL_NEEDED_P (decl) && DECL_NEEDED_P (decl)
&& DECL_SAVED_TREE (decl)
&& !TREE_ASM_WRITTEN (decl) && !TREE_ASM_WRITTEN (decl)
&& (!flag_unit_at_a_time && (!flag_unit_at_a_time
|| !cgraph_node (decl)->local.finalized)) || !cgraph_node (decl)->local.finalized))
......
...@@ -1027,7 +1027,8 @@ implicitly_declare_fn (special_function_kind kind, tree type, bool const_p) ...@@ -1027,7 +1027,8 @@ implicitly_declare_fn (special_function_kind kind, tree type, bool const_p)
DECL_NOT_REALLY_EXTERN (fn) = 1; DECL_NOT_REALLY_EXTERN (fn) = 1;
DECL_DECLARED_INLINE_P (fn) = 1; DECL_DECLARED_INLINE_P (fn) = 1;
DECL_INLINE (fn) = 1; DECL_INLINE (fn) = 1;
defer_fn (fn); if (TREE_USED (fn))
abort ();
return fn; return fn;
} }
......
...@@ -10161,7 +10161,9 @@ mark_decl_instantiated (tree result, int extern_p) ...@@ -10161,7 +10161,9 @@ mark_decl_instantiated (tree result, int extern_p)
maybe_make_one_only (result); 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); defer_fn (result);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment