middle-end/94479 - fix gimplification of address

When gimplifying an address operand we may expose an indirect
ref via DECL_VALUE_EXPR for example.  This is dealt with in the
code already but it fails to consider that INDIRECT_REFs get
gimplified to MEM_REFs.

Fixed which makes the ICE observed on x86_64-netbsd go away.

2020-04-07  Richard Biener  <rguenther@suse.de>

	PR middle-end/94479
	* gimplify.c (gimplify_addr_expr): Also consider generated
	MEM_REFs.

	* gcc.dg/torture/pr94479.c: New testcase.
This commit is contained in:
Richard Biener 2020-04-07 16:29:37 +02:00
parent 57391ddaf3
commit 3d947f1f27
4 changed files with 26 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2020-04-07 Richard Biener <rguenther@suse.de>
PR middle-end/94479
* gimplify.c (gimplify_addr_expr): Also consider generated
MEM_REFs.
2020-04-07 Andre Vieira <andre.simoesdiasvieira@arm.com>
* config/arm/arm_mve.h: Add C++ polymorphism and fix preserve MACROs.

View File

@ -6181,7 +6181,9 @@ gimplify_addr_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
/* For various reasons, the gimplification of the expression
may have made a new INDIRECT_REF. */
if (TREE_CODE (op0) == INDIRECT_REF)
if (TREE_CODE (op0) == INDIRECT_REF
|| (TREE_CODE (op0) == MEM_REF
&& integer_zerop (TREE_OPERAND (op0, 1))))
goto do_indirect_ref;
mark_addressable (TREE_OPERAND (expr, 0));

View File

@ -1,3 +1,8 @@
2020-04-07 Richard Biener <rguenther@suse.de>
PR middle-end/94479
* gcc.dg/torture/pr94479.c: New testcase.
2020-04-01 Fritz Reese <foreese@gcc.gnu.org>
PR fortran/93871

View File

@ -0,0 +1,12 @@
/* { dg-do compile } */
/* { dg-require-stack-check "specific" } */
/* { dg-additional-options "-fstack-check -w" } */
int a;
struct b {
char c;
void *d;
};
struct b e() {
struct b f[] = {{}, "", f, a};
}