aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Bosscher <steven@gcc.gnu.org>2012-07-16 11:47:59 +0000
committerSteven Bosscher <steven@gcc.gnu.org>2012-07-16 11:47:59 +0000
commitb3c144a3a7bff42cd361d49c0b2d0f293d1627a1 (patch)
tree3d3d660e6823684fb0c90c75b887acc6ad223020
parent468660d358fcc56eb30b208df4c2926ea9b5a00e (diff)
downloadgcc-b3c144a3a7bff42cd361d49c0b2d0f293d1627a1.zip
gcc-b3c144a3a7bff42cd361d49c0b2d0f293d1627a1.tar.gz
gcc-b3c144a3a7bff42cd361d49c0b2d0f293d1627a1.tar.bz2
function.c (stack_protect_epilogue): Use expand_call to expand targetm.stack_protect_fail.
* function.c (stack_protect_epilogue): Use expand_call to expand targetm.stack_protect_fail. * stmt.c (expand_expr_stmt): Remove now-unused function. * tree.h (expand_expr_stmt): Remove prototype. * doc/tm.texi.in (TARGET_STACK_PROTECT_FAIL): Document that this hook must return a CALL_EXPR. * doc/tm.texi: Regenerate. From-SVN: r189522
-rw-r--r--gcc/doc/tm.texi2
-rw-r--r--gcc/doc/tm.texi.in2
-rw-r--r--gcc/function.c3
-rw-r--r--gcc/stmt.c36
-rw-r--r--gcc/tree.h1
5 files changed, 4 insertions, 40 deletions
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index 0208b02..fc3345a 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -4993,7 +4993,7 @@ The default version of this hook creates a variable called
@end deftypefn
@deftypefn {Target Hook} tree TARGET_STACK_PROTECT_FAIL (void)
-This hook returns a tree expression that alerts the runtime that the
+This hook returns a @code{CALL_EXPR} that alerts the runtime that the
stack protect guard variable has been modified. This expression should
involve a call to a @code{noreturn} function.
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index 044b416..33ccf82 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -4934,7 +4934,7 @@ The default version of this hook creates a variable called
@end deftypefn
@hook TARGET_STACK_PROTECT_FAIL
-This hook returns a tree expression that alerts the runtime that the
+This hook returns a @code{CALL_EXPR} that alerts the runtime that the
stack protect guard variable has been modified. This expression should
involve a call to a @code{noreturn} function.
diff --git a/gcc/function.c b/gcc/function.c
index bc9a99f..c567588 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -4660,7 +4660,8 @@ stack_protect_epilogue (void)
if (JUMP_P (tmp))
predict_insn_def (tmp, PRED_NORETURN, TAKEN);
- expand_expr_stmt (targetm.stack_protect_fail ());
+ expand_call (targetm.stack_protect_fail (), NULL_RTX, /*ignore=*/true);
+ free_temp_slots ();
emit_label (label);
}
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 3269de1..11180e4 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -1400,42 +1400,6 @@ resolve_operand_name_1 (char *p, tree outputs, tree inputs, tree labels)
return p;
}
-/* Generate RTL to evaluate the expression EXP. */
-
-void
-expand_expr_stmt (tree exp)
-{
- rtx value;
- tree type;
-
- value = expand_expr (exp, const0_rtx, VOIDmode, EXPAND_NORMAL);
- type = TREE_TYPE (exp);
-
- /* If all we do is reference a volatile value in memory,
- copy it to a register to be sure it is actually touched. */
- if (value && MEM_P (value) && TREE_THIS_VOLATILE (exp))
- {
- if (TYPE_MODE (type) == VOIDmode)
- ;
- else if (TYPE_MODE (type) != BLKmode)
- copy_to_reg (value);
- else
- {
- rtx lab = gen_label_rtx ();
-
- /* Compare the value with itself to reference it. */
- emit_cmp_and_jump_insns (value, value, EQ,
- expand_normal (TYPE_SIZE (type)),
- BLKmode, 0, lab);
- emit_label (lab);
- }
- }
-
- /* Free any temporaries used to evaluate this expression. */
- free_temp_slots ();
-}
-
-
/* Generate RTL to return from the current function, with no value.
(That is, we do not do anything about returning any value.) */
diff --git a/gcc/tree.h b/gcc/tree.h
index cc840ae..321ad8a 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -5229,7 +5229,6 @@ extern tree unshare_expr (tree);
/* In stmt.c */
-extern void expand_expr_stmt (tree);
extern void expand_label (tree);
extern void expand_goto (tree);