[the following fixes fallout of the last change which introduced an assert - after this change we can likely trim down the set of tree codes we "ignore"]
The following avoids calling set_mem_attributes on the DECL_INITIAL of a CONST_DECL which seems pointless since there cannot be a sensible MEM_EXPR derived from that. We're overwriting both other possibly useful info, alias-set and alignment immediately so the following patch simply removes the call instead of making the function deal with even more (unexpected) trees that are not memory accesses. Bootstrap and regtest ongoing on x86_64-unknown-linux-gnu. Richard. 2020-06-16 Richard Biener <rguent...@suse.de> PR middle-end/95690 * varasm.c (build_constant_desc): Remove set_mem_attributes call. * gfortran.dg/pr95690.f90: New testcase. --- gcc/testsuite/gfortran.dg/pr95690.f90 | 9 +++++++++ gcc/varasm.c | 1 - 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/pr95690.f90 diff --git a/gcc/testsuite/gfortran.dg/pr95690.f90 b/gcc/testsuite/gfortran.dg/pr95690.f90 new file mode 100644 index 00000000000..2da08912a4d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr95690.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +module m +contains + subroutine s + print *, (erfc) ! { dg-error "not a floating constant" } + end + function erfc() + end +end diff --git a/gcc/varasm.c b/gcc/varasm.c index f062e48071f..4070f9c17e8 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -3399,7 +3399,6 @@ build_constant_desc (tree exp) TREE_CONSTANT_POOL_ADDRESS_P (symbol) = 1; rtl = gen_const_mem (TYPE_MODE (TREE_TYPE (exp)), symbol); - set_mem_attributes (rtl, exp, 1); set_mem_alias_set (rtl, 0); /* Putting EXP into the literal pool might have imposed a different -- 2.16.4