It's a simple fix of a division by zero.

Patch can bootstrap on x86_64-linux-gnu and survives regression tests.

Ready to be installed?
Thanks,
Martin

gcc/ChangeLog:

        PR c/98087
        * gimple-fold.c (clear_padding_type): Do not divide by zero.

gcc/testsuite/ChangeLog:

        PR c/98087
        * gcc.c-torture/compile/pr98087.c: New test.
---
 gcc/gimple-fold.c                             | 2 ++
 gcc/testsuite/gcc.c-torture/compile/pr98087.c | 8 ++++++++
 2 files changed, 10 insertions(+)
 create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr98087.c

diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 1f3d80e2881..ab74494703a 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -4552,6 +4552,8 @@ clear_padding_type (clear_padding_struct *buf, tree type, 
HOST_WIDE_INT sz)
     case ARRAY_TYPE:
       HOST_WIDE_INT nelts, fldsz;
       fldsz = int_size_in_bytes (TREE_TYPE (type));
+      if (fldsz == 0)
+       break;
       nelts = sz / fldsz;
       if (nelts > 1
          && sz > 8 * UNITS_PER_WORD
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr98087.c 
b/gcc/testsuite/gcc.c-torture/compile/pr98087.c
new file mode 100644
index 00000000000..9f0e5c4be7d
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr98087.c
@@ -0,0 +1,8 @@
+/* PR c/98087 */
+
+struct S {};
+void foo (int n)
+{
+  struct S a[n][0];
+  __builtin_clear_padding (a);
+}
--
2.29.2

Reply via email to