Commit 20b50672 by Nathan Sidwell Committed by Nathan Sidwell

builtins.c (build_function_call_expr): Don't set TREE_SIDE_EFFECTS here.

	* builtins.c (build_function_call_expr): Don't set
	TREE_SIDE_EFFECTS here.
	* expr.c (emit_block_move_via_libcall): Likewise.
	(clear_storage_via_libcall): Likewise.
	* tree.c (build): Set TREE_SIDE_EFFECTS for non-const, non-pure
	CALL_EXPRs.
cp:
	* call.c (build_call): Don't set TREE_SIDE_EFFECTS here.
	(build_new_method_call): Add goto finish.
	* semantics.c (simplify_aggr_init_exprs_r): Don't set
	TREE_SIDE_EFFECTS on a call.
testsuite:
	* c++.dg/warn/noeffect3.C: New test.

From-SVN: r70802
parent d128effb
2003-08-26 Nathan Sidwell <nathan@codesourcery.com> 2003-08-26 Nathan Sidwell <nathan@codesourcery.com>
* builtins.c (build_function_call_expr): Don't set
TREE_SIDE_EFFECTS here.
* expr.c (emit_block_move_via_libcall): Likewise.
(clear_storage_via_libcall): Likewise.
* tree.c (build): Set TREE_SIDE_EFFECTS for non-const, non-pure
CALL_EXPRs.
* gcse.c (is_too_expensive): New function. * gcse.c (is_too_expensive): New function.
(gcse_main, delete_null_pointer_checks, bypass_jumps): Use it. (gcse_main, delete_null_pointer_checks, bypass_jumps): Use it.
......
...@@ -6242,7 +6242,6 @@ build_function_call_expr (tree fn, tree arglist) ...@@ -6242,7 +6242,6 @@ build_function_call_expr (tree fn, tree arglist)
call_expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn); call_expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn);
call_expr = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)), call_expr = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)),
call_expr, arglist); call_expr, arglist);
TREE_SIDE_EFFECTS (call_expr) = 1;
return fold (call_expr); return fold (call_expr);
} }
......
2003-08-26 Nathan Sidwell <nathan@codesourcery.com>
* call.c (build_call): Don't set TREE_SIDE_EFFECTS here.
(build_new_method_call): Add goto finish.
* semantics.c (simplify_aggr_init_exprs_r): Don't set
TREE_SIDE_EFFECTS on a call.
2003-08-25 Richard Henderson <rth@redhat.com> 2003-08-25 Richard Henderson <rth@redhat.com>
* cxx-pretty-print.c (pp_cxx_class_name): Remove unused function. * cxx-pretty-print.c (pp_cxx_class_name): Remove unused function.
......
...@@ -303,10 +303,8 @@ build_call (tree function, tree parms) ...@@ -303,10 +303,8 @@ build_call (tree function, tree parms)
TREE_VALUE (tmp), t); TREE_VALUE (tmp), t);
} }
function = build_nt (CALL_EXPR, function, parms, NULL_TREE); function = build (CALL_EXPR, result_type, function, parms);
TREE_HAS_CONSTRUCTOR (function) = is_constructor; TREE_HAS_CONSTRUCTOR (function) = is_constructor;
TREE_TYPE (function) = result_type;
TREE_SIDE_EFFECTS (function) = 1;
TREE_NOTHROW (function) = nothrow; TREE_NOTHROW (function) = nothrow;
return function; return function;
...@@ -4918,7 +4916,7 @@ build_new_method_call (tree instance, tree fns, tree args, ...@@ -4918,7 +4916,7 @@ build_new_method_call (tree instance, tree fns, tree args,
{ {
call = build_field_call (instance_ptr, fns, args); call = build_field_call (instance_ptr, fns, args);
if (call) if (call)
return call; goto finish;
error ("call to non-function `%D'", fns); error ("call to non-function `%D'", fns);
return error_mark_node; return error_mark_node;
} }
...@@ -5079,13 +5077,11 @@ build_new_method_call (tree instance, tree fns, tree args, ...@@ -5079,13 +5077,11 @@ build_new_method_call (tree instance, tree fns, tree args,
if (!is_dummy_object (instance_ptr) && TREE_SIDE_EFFECTS (instance)) if (!is_dummy_object (instance_ptr) && TREE_SIDE_EFFECTS (instance))
call = build (COMPOUND_EXPR, TREE_TYPE (call), instance, call); call = build (COMPOUND_EXPR, TREE_TYPE (call), instance, call);
} }
finish:;
if (processing_template_decl && call != error_mark_node) if (processing_template_decl && call != error_mark_node)
return build_min (CALL_EXPR, return build_min (CALL_EXPR, TREE_TYPE (call),
TREE_TYPE (call), build_min_nt (COMPONENT_REF, orig_instance, orig_fns),
build_min_nt (COMPONENT_REF,
orig_instance,
orig_fns),
orig_args); orig_args);
return call; return call;
} }
......
...@@ -2796,7 +2796,6 @@ simplify_aggr_init_expr (tree *tp) ...@@ -2796,7 +2796,6 @@ simplify_aggr_init_expr (tree *tp)
call_expr = build (CALL_EXPR, call_expr = build (CALL_EXPR,
TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))), TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
fn, args, NULL_TREE); fn, args, NULL_TREE);
TREE_SIDE_EFFECTS (call_expr) = 1;
if (style == arg) if (style == arg)
/* Tell the backend that we've added our return slot to the argument /* Tell the backend that we've added our return slot to the argument
......
...@@ -2006,7 +2006,6 @@ emit_block_move_via_libcall (rtx dst, rtx src, rtx size) ...@@ -2006,7 +2006,6 @@ emit_block_move_via_libcall (rtx dst, rtx src, rtx size)
call_expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn); call_expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn);
call_expr = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)), call_expr = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)),
call_expr, arg_list, NULL_TREE); call_expr, arg_list, NULL_TREE);
TREE_SIDE_EFFECTS (call_expr) = 1;
retval = expand_expr (call_expr, NULL_RTX, VOIDmode, 0); retval = expand_expr (call_expr, NULL_RTX, VOIDmode, 0);
...@@ -3120,7 +3119,6 @@ clear_storage_via_libcall (rtx object, rtx size) ...@@ -3120,7 +3119,6 @@ clear_storage_via_libcall (rtx object, rtx size)
call_expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn); call_expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn);
call_expr = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)), call_expr = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)),
call_expr, arg_list, NULL_TREE); call_expr, arg_list, NULL_TREE);
TREE_SIDE_EFFECTS (call_expr) = 1;
retval = expand_expr (call_expr, NULL_RTX, VOIDmode, 0); retval = expand_expr (call_expr, NULL_RTX, VOIDmode, 0);
......
2003-08-26 Nathan Sidwell <nathan@codesourcery.com>
* c++.dg/warn/noeffect3.C: New test.
2003-08-25 Janis Johnson <janis187@us.ibm.com> 2003-08-25 Janis Johnson <janis187@us.ibm.com>
* gcc.dg/compat/vector-1_x.c: Compile with -w. * gcc.dg/compat/vector-1_x.c: Compile with -w.
......
...@@ -2378,6 +2378,17 @@ build (enum tree_code code, tree tt, ...) ...@@ -2378,6 +2378,17 @@ build (enum tree_code code, tree tt, ...)
va_end (p); va_end (p);
TREE_CONSTANT (t) = constant; TREE_CONSTANT (t) = constant;
if (code == CALL_EXPR && !TREE_SIDE_EFFECTS (t))
{
/* Calls have side-effects, except those to const or
pure functions. */
tree fn = get_callee_fndecl (t);
if (!fn || (!DECL_IS_PURE (fn) && !TREE_READONLY (fn)))
TREE_SIDE_EFFECTS (t) = 1;
}
return t; return t;
} }
......
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