Changed between 20200823 and 20201004, derived from memchr.c : $ cat z1.c typedef __INT8_TYPE__ int8_t; typedef __INT32_TYPE__ int32_t; extern void* memchr (const void*, int, long); struct SX { int32_t n; int8_t a[]; }; const struct SX sx = { 0x1221 }; const char sx_rep[] = { }; void test_find (void) { int n = 0, nb = (const char*)&sx.a - (const char*)&sx; const char *p = (const char*)&sx, *q = sx_rep; n += p + 1 == memchr (p, q[1], nb); } $ gcc-11-20201122 -c z1.c $ $ gcc-11-20201122 -c z1.c -O2 during GIMPLE pass: forwprop z1.c: In function 'test_find': z1.c:16:1: internal compiler error: in build2, at tree.c:4872 16 | } | ^ 0xdaae9e build2(tree_code, tree_node*, tree_node*, tree_node*) ../../gcc/tree.c:4871 0x880b9f build2_loc ../../gcc/tree.h:4371 0x880b9f fold_build2_loc(unsigned int, tree_code, tree_node*, tree_node*, tree_node*) ../../gcc/fold-const.c:13318 0xc3ad53 forward_propagate_into_comparison_1 ../../gcc/tree-ssa-forwprop.c:434 0xc41900 forward_propagate_into_comparison ../../gcc/tree-ssa-forwprop.c:491 0xc41900 execute ../../gcc/tree-ssa-forwprop.c:3145
Started with r11-2709-g866626efd749ed3e.
Patch: https://gcc.gnu.org/pipermail/gcc-patches/2020-November/560127.html
The master branch has been updated by Martin Sebor <msebor@gcc.gnu.org>: https://gcc.gnu.org/g:aec2d6849160f92cd45f97d6c3bdd8808ab01fa6 commit r11-5382-gaec2d6849160f92cd45f97d6c3bdd8808ab01fa6 Author: Martin Sebor <msebor@redhat.com> Date: Wed Nov 25 11:00:10 2020 -0700 PR middle-end/97956 - ICE due to type mismatch in pointer_plus_expr during memchr folding gcc/ChangeLog: PR middle-end/97956 * gimple-fold.c (gimple_fold_builtin_memchr): Use sizetype for pointer offsets. gcc/testsuite/ChangeLog: PR middle-end/97956 * gcc.dg/memchr-3.c: New test.
Committed in r11-5382.
(In reply to G. Steinmetz from comment #0) > typedef __INT8_TYPE__ int8_t; > typedef __INT32_TYPE__ int32_t; > extern void* memchr (const void*, int, long); For the record, the signature above is wrong (the third parameter should be size_t not long), and that's what caused the ICE. (So I think this should really be ice-on-invalid-code since it has a bad declaration of memchr).
The master branch has been updated by Jonathan Yong <jyong@gcc.gnu.org>: https://gcc.gnu.org/g:62a8d31ecc07041af4a81353c2d57d9845c4b771 commit r13-6414-g62a8d31ecc07041af4a81353c2d57d9845c4b771 Author: Jonathan Yong <10walls@gmail.com> Date: Mon Feb 27 10:02:32 2023 +0000 gcc.dg/memchr-3.c: Account for LLP64 warnings gcc/testsuite/ChangeLog: PR middle-end/97956 * gcc.dg/memchr-3.c (memchr): Account for LLP64 warnings. Signed-off-by: Jonathan Yong <10walls@gmail.com>