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  <rguenther@suse.de>

	PR middle-end/95690
	* varasm.c (build_constant_desc): Remove set_mem_attributes call.

	* gfortran.dg/pr95690.f90: New testcase.
This commit is contained in:
Richard Biener
2020-06-16 09:36:09 +02:00
parent 2210ef7d3d
commit a97e49a89d
2 changed files with 9 additions and 1 deletions

View File

@@ -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

View File

@@ -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