[PATCH] middle-end/95690 - avoid MEM_EXPRs for constants

Richard Biener rguenther@suse.de
Tue Jun 16 07:42:16 GMT 2020


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


More information about the Gcc-patches mailing list