From: Richard Biener Date: Wed, 2 May 2018 07:59:34 +0000 (+0000) Subject: re PR middle-end/85567 (internal compiler error: in gimplify_modify_expr, at gimplify... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b18f161d55481899b792b7fde13ce1e91013fbca;p=gcc.git re PR middle-end/85567 (internal compiler error: in gimplify_modify_expr, at gimplify.c:5797 when using sincos()) 2018-05-02 Richard Biener PR middle-end/85567 * gimplify.c (gimplify_save_expr): When in SSA form allow SAVE_EXPRs to compute to SSA vars. * gcc.dg/torture/pr85567.c: New testcase. From-SVN: r259826 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2792c886b67..3e961a19043 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-05-02 Richard Biener + + PR middle-end/85567 + * gimplify.c (gimplify_save_expr): When in SSA form allow + SAVE_EXPRs to compute to SSA vars. + 2018-05-02 Jakub Jelinek PR target/85582 diff --git a/gcc/gimplify.c b/gcc/gimplify.c index d27aae2eea8..9942afdd61f 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -5931,8 +5931,11 @@ gimplify_save_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) } else /* The temporary may not be an SSA name as later abnormal and EH - control flow may invalidate use/def domination. */ - val = get_initialized_tmp_var (val, pre_p, post_p, false); + control flow may invalidate use/def domination. When in SSA + form then assume there are no such issues and SAVE_EXPRs only + appear via GENERIC foldings. */ + val = get_initialized_tmp_var (val, pre_p, post_p, + gimple_in_ssa_p (cfun)); TREE_OPERAND (*expr_p, 0) = val; SAVE_EXPR_RESOLVED_P (*expr_p) = 1; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bdbdd17fd46..6bd3e0fb425 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-05-02 Richard Biener + + PR middle-end/85567 + * gcc.dg/torture/pr85567.c: New testcase. + 2018-05-02 Jakub Jelinek PR target/85582 diff --git a/gcc/testsuite/gcc.dg/torture/pr85567.c b/gcc/testsuite/gcc.dg/torture/pr85567.c new file mode 100644 index 00000000000..f20c69f4201 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr85567.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ + +extern void sincos(double x, double *sinx, double *cosx); + +void apply(void (*f)(double, double *, double *), + double x, double *sinx, double *cosx) +{ + f(x, sinx, cosx); + return; +} + +void apply_sincos(double x, double *sinx, double *cosx) +{ + apply(sincos, x, sinx, cosx); + return; +}