From 22fe0312b3782144a26aa1ca3769e0af883069a0 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Fri, 1 Mar 2019 12:52:19 +0000 Subject: [PATCH] re PR tree-optimization/89541 (ICE in VN_INFO(tree_node*)) 2019-03-01 Richard Biener PR middle-end/89541 * tree-ssa-operands.c (add_stmt_operand): CONST_DECL may get virtual operands. (get_expr_operands): Handle CONST_DECL like other decls. * gfortran.dg/pr89451.f90: New testcase. From-SVN: r269307 --- gcc/ChangeLog | 7 +++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/pr89451.f90 | 11 +++++++++++ gcc/tree-ssa-operands.c | 6 ++++-- 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr89451.f90 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ef18defe748..be1cbe57444 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2019-03-01 Richard Biener + + PR middle-end/89541 + * tree-ssa-operands.c (add_stmt_operand): CONST_DECL may + get virtual operands. + (get_expr_operands): Handle CONST_DECL like other decls. + 2019-03-01 Jakub Jelinek PR middle-end/89503 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b1b4886c3ef..f6a8e6a4438 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-03-01 Richard Biener + + PR middle-end/89541 + * gfortran.dg/pr89451.f90: New testcase. + 2019-03-01 Richard Biener PR middle-end/89497 diff --git a/gcc/testsuite/gfortran.dg/pr89451.f90 b/gcc/testsuite/gfortran.dg/pr89451.f90 new file mode 100644 index 00000000000..e751488d224 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr89451.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! { dg-options "-O2" } +program lh + call za(0) + call za(0) +contains + subroutine za(wl) + integer wl + wl = 1 + end subroutine za +end program lh diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c index fb247324cec..899d47ff588 100644 --- a/gcc/tree-ssa-operands.c +++ b/gcc/tree-ssa-operands.c @@ -515,7 +515,9 @@ add_stmt_operand (struct function *fn, tree *var_p, gimple *stmt, int flags) { tree var = *var_p; - gcc_assert (SSA_VAR_P (*var_p) || TREE_CODE (*var_p) == STRING_CST); + gcc_assert (SSA_VAR_P (*var_p) + || TREE_CODE (*var_p) == STRING_CST + || TREE_CODE (*var_p) == CONST_DECL); if (is_gimple_reg (var)) { @@ -741,6 +743,7 @@ get_expr_operands (struct function *fn, gimple *stmt, tree *expr_p, int flags) case PARM_DECL: case RESULT_DECL: case STRING_CST: + case CONST_DECL: if (!(flags & opf_address_taken)) add_stmt_operand (fn, expr_p, stmt, flags); return; @@ -859,7 +862,6 @@ get_expr_operands (struct function *fn, gimple *stmt, tree *expr_p, int flags) case FUNCTION_DECL: case LABEL_DECL: - case CONST_DECL: case CASE_LABEL_EXPR: /* Expressions that make no memory references. */ return; -- 2.30.2