From: Steven Bosscher Date: Mon, 16 Jul 2012 11:47:59 +0000 (+0000) Subject: function.c (stack_protect_epilogue): Use expand_call to expand targetm.stack_protect_... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b3c144a3a7bff42cd361d49c0b2d0f293d1627a1;p=gcc.git 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 --- diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 0208b02125a..fc3345a3b11 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 044b416b332..33ccf8260db 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 bc9a99f78c5..c56758870bc 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 3269de1462b..11180e4dc4a 100644 --- a/gcc/stmt.c +++ b/gcc/stmt.c @@ -1399,42 +1399,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 cc840ae496e..321ad8ab4cc 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);