Bug 97956 - [11 Regression] ICE in build2, at tree.c:4872 since r11-2709-g866626efd749ed3e
Summary: [11 Regression] ICE in build2, at tree.c:4872 since r11-2709-g866626efd749ed3e
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: tree-optimization (show other bugs)
Version: 11.0
: P1 normal
Target Milestone: 11.0
Assignee: Martin Sebor
URL:
Keywords: ice-on-valid-code, patch
Depends on:
Blocks:
 
Reported: 2020-11-23 16:38 UTC by G. Steinmetz
Modified: 2023-03-02 13:42 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work: 10.2.0
Known to fail: 11.0
Last reconfirmed: 2020-11-23 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description G. Steinmetz 2020-11-23 16:38:33 UTC
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
Comment 1 Martin Liška 2020-11-23 18:24:35 UTC
Started with r11-2709-g866626efd749ed3e.
Comment 3 GCC Commits 2020-11-25 18:02:57 UTC
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.
Comment 4 Martin Sebor 2020-11-25 18:04:31 UTC
Committed in r11-5382.
Comment 5 Jonathan Wakely 2023-02-28 17:09:23 UTC
(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).
Comment 6 GCC Commits 2023-03-02 13:42:11 UTC
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>