diff mbox series

tree-optimization/114246 - invalid call argument from DSE

Message ID 20240306092828.83777385803F@sourceware.org
State New
Headers show
Series tree-optimization/114246 - invalid call argument from DSE | expand

Commit Message

Richard Biener March 6, 2024, 9:27 a.m. UTC
The following makes sure to strip type conversions added by
build_fold_addr_expr before placing the result in a call argument.

Bootstrapped and tested on x86_64-unknown-linux-gnu, pushed.

	PR tree-optimization/114246
	* tree-ssa-dse.cc (increment_start_addr): Strip useless
	type conversions from the adjusted address.

	* gcc.dg/torture/pr114246.c: New testcase.
---
 gcc/testsuite/gcc.dg/torture/pr114246.c | 11 +++++++++++
 gcc/tree-ssa-dse.cc                     |  2 ++
 2 files changed, 13 insertions(+)
 create mode 100644 gcc/testsuite/gcc.dg/torture/pr114246.c
diff mbox series

Patch

diff --git a/gcc/testsuite/gcc.dg/torture/pr114246.c b/gcc/testsuite/gcc.dg/torture/pr114246.c
new file mode 100644
index 00000000000..eb20db594cd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr114246.c
@@ -0,0 +1,11 @@ 
+/* { dg-do compile } */
+/* { dg-additional-options "-w" } */
+
+int a, b;
+
+void
+foo (void)
+{
+  __builtin_memcpy (&a, (char *)&b - 1, 2);
+  __builtin_memcpy (&a, &b, 1);
+}
diff --git a/gcc/tree-ssa-dse.cc b/gcc/tree-ssa-dse.cc
index 7c348516ddf..fce4fc76a56 100644
--- a/gcc/tree-ssa-dse.cc
+++ b/gcc/tree-ssa-dse.cc
@@ -49,6 +49,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "cfgloop.h"
 #include "tree-data-ref.h"
 #include "internal-fn.h"
+#include "tree-ssa.h"
 
 /* This file implements dead store elimination.
 
@@ -658,6 +659,7 @@  increment_start_addr (gimple *stmt, tree *where, int increment)
 					      *where,
 					      build_int_cst (ptr_type_node,
 							     increment)));
+  STRIP_USELESS_TYPE_CONVERSION (*where);
 }
 
 /* STMT is builtin call that writes bytes in bitmap ORIG, some bytes are dead