From: Richard Biener Date: Tue, 16 Jun 2020 07:36:09 +0000 (+0200) Subject: middle-end/95690 - avoid MEM_EXPRs for constants X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a97e49a89d11b302b12ec319a3316ba78adca02a;p=gcc.git middle-end/95690 - avoid MEM_EXPRs for constants 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. 2020-06-16 Richard Biener PR middle-end/95690 * varasm.c (build_constant_desc): Remove set_mem_attributes call. * gfortran.dg/pr95690.f90: New testcase. --- 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