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