public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r9-9442] rtlanal: Another fix for VOIDmode MEMs [PR98601]
@ 2021-04-20 23:34 Jakub Jelinek
  0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2021-04-20 23:34 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:86e761b46de55532db35f257ea67071512804a58

commit r9-9442-g86e761b46de55532db35f257ea67071512804a58
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Sat Apr 10 12:46:09 2021 +0200

    rtlanal: Another fix for VOIDmode MEMs [PR98601]
    
    This is a sequel to the PR85022 changes, inline-asm can (unfortunately)
    introduce VOIDmode MEMs and in PR85022 they have been changed so that
    we don't pretend we know their size (as opposed to assuming they have
    zero size).
    
    This time we ICE in rtx_addr_can_trap_p_1 because it assumes that
    all memory but BLKmode has known size.  The patch just treats VOIDmode
    MEMs like BLKmode in that regard.  And, the STRICT_ALIGNMENT change
    is needed because VOIDmode has GET_MODE_SIZE of 0 and we don't want to
    check if something is a multiple of 0.
    
    2021-04-10  Jakub Jelinek  <jakub@redhat.com>
    
            PR rtl-optimization/98601
            * rtlanal.c (rtx_addr_can_trap_p_1): Allow in assert unknown size
            not just for BLKmode, but also for VOIDmode.  For STRICT_ALIGNMENT
            unaligned_mems handle VOIDmode like BLKmode.
    
            * gcc.dg/torture/pr98601.c: New test.
    
    (cherry picked from commit e68ac8c2b46997af1464f2549ac520a192c928b1)

Diff:
---
 gcc/rtlanal.c                          |  9 +++++++--
 gcc/testsuite/gcc.dg/torture/pr98601.c | 14 ++++++++++++++
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 01af063a222..9d50d234f3d 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -462,12 +462,17 @@ rtx_addr_can_trap_p_1 (const_rtx x, poly_int64 offset, poly_int64 size,
 		       machine_mode mode, bool unaligned_mems)
 {
   enum rtx_code code = GET_CODE (x);
-  gcc_checking_assert (mode == BLKmode || known_size_p (size));
+  gcc_checking_assert (mode == BLKmode
+		       || mode == VOIDmode
+		       || known_size_p (size));
   poly_int64 const_x1;
 
   /* The offset must be a multiple of the mode size if we are considering
      unaligned memory references on strict alignment machines.  */
-  if (STRICT_ALIGNMENT && unaligned_mems && mode != BLKmode)
+  if (STRICT_ALIGNMENT
+      && unaligned_mems
+      && mode != BLKmode
+      && mode != VOIDmode)
     {
       poly_int64 actual_offset = offset;
 
diff --git a/gcc/testsuite/gcc.dg/torture/pr98601.c b/gcc/testsuite/gcc.dg/torture/pr98601.c
new file mode 100644
index 00000000000..ee9d076c02d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr98601.c
@@ -0,0 +1,14 @@
+/* PR rtl-optimization/98601 */
+/* { dg-do compile } */
+
+void
+foo (void *p)
+{
+  asm ("" : "=m" (*p));			/* { dg-warning "dereferencing 'void \\*' pointer" } */
+}
+
+void
+bar (void *p)
+{
+  asm volatile ("" : : "m" (*p));	/* { dg-warning "dereferencing 'void \\*' pointer" } */
+}


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-04-20 23:34 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-20 23:34 [gcc r9-9442] rtlanal: Another fix for VOIDmode MEMs [PR98601] Jakub Jelinek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).