Bug 103268 - [12 regression] ICE om glib-2.10.1: internal compiler error: in optimize_atomic_bit_test_and, at tree-ssa-ccp.c:3626
Summary: [12 regression] ICE om glib-2.10.1: internal compiler error: in optimize_atom...
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: tree-optimization (show other bugs)
Version: 12.0
: P3 normal
Target Milestone: 12.0
Assignee: Not yet assigned to anyone
URL:
Keywords: ice-on-valid-code
Depends on:
Blocks:
 
Reported: 2021-11-15 23:47 UTC by Sergei Trofimovich
Modified: 2021-11-16 03:24 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2021-11-16 00:00:00


Attachments
A patch (1.18 KB, patch)
2021-11-16 00:24 UTC, H.J. Lu
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Sergei Trofimovich 2021-11-15 23:47:07 UTC
ICE is initially observed on glib-2.70.1. Here is extracted example:

    // $ cat a.c.c
    void g_assertion_message_cmpnum(long);
    
    static int si;
    
    void test_types(long n) {
       unsigned u2 = ({ __atomic_fetch_xor(&si, 0, 5); });
      long l = u2;
      g_assertion_message_cmpnum(l);
    }

$ gcc-12.0.0 a.c.c -c -O2
a.c.c: In function 'test_types':
a.c.c:5:22: warning: unused parameter 'n' [-Wunused-parameter]
    5 | void test_types(long n) {
      |                 ~~~~~^
during GIMPLE pass: fab
a.c.c:5:6: internal compiler error: in optimize_atomic_bit_test_and, at tree-ssa-ccp.c:3626
    5 | void test_types(long n) {
      |      ^~~~~~~~~~
0x1df4a67 internal_error(char const*, ...)
        ???:0
0x8d493d fancy_abort(char const*, int, char const*)
        ???:0
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

$ gcc-12.0.0 -v
Using built-in specs.
COLLECT_GCC=/nix/store/kb1by7nzcqlv8j2hl7q0kks8fw8dpym0-gcc-12.0.0/bin/gcc
COLLECT_LTO_WRAPPER=/nix/store/kb1by7nzcqlv8j2hl7q0kks8fw8dpym0-gcc-12.0.0/libexec/gcc/x86_64-unknown-linux-gnu/12.0.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with:
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 12.0.0 20211114 (experimental) (GCC)
Comment 1 Andrew Pinski 2021-11-15 23:50:00 UTC
I think this was just fixed today, see PR 103184.
Comment 2 H.J. Lu 2021-11-16 00:04:16 UTC
A simplified test:


[hjl@gnu-cfl-2 pr103268]$ cat x.c
static int si;
long
test_types (long n)
{
  unsigned int u2 = __atomic_fetch_xor (&si, 0, 5);
  return u2;
}
[hjl@gnu-cfl-2 pr103268]$ make
/export/build/gnu/tools-build/gcc-gitlab-debug/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/tools-build/gcc-gitlab-debug/build-x86_64-linux/gcc/ -O2 -S x.c
during GIMPLE pass: fab
x.c: In function ‘test_types’:
x.c:3:1: internal compiler error: in optimize_atomic_bit_test_and, at tree-ssa-ccp.c:3645
    3 | test_types (long n)
      | ^~~~~~~~~~
0x1515c9d optimize_atomic_bit_test_and
	/export/gnu/import/git/gitlab/x86-gcc/gcc/tree-ssa-ccp.c:3645
0x151790a execute
	/export/gnu/import/git/gitlab/x86-gcc/gcc/tree-ssa-ccp.c:4115
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
make: *** [Makefile:43: x.s] Error 1
[hjl@gnu-cfl-2 pr103268]$
Comment 3 H.J. Lu 2021-11-16 00:12:57 UTC
It is related to PR 103194.
Comment 4 H.J. Lu 2021-11-16 00:24:14 UTC
Created attachment 51802 [details]
A patch
Comment 5 Hongtao.liu 2021-11-16 01:32:56 UTC
I've verified my patch in pr103194, it can also fix this ICE.
Comment 6 GCC Commits 2021-11-16 03:24:17 UTC
The master branch has been updated by H.J. Lu <hjl@gcc.gnu.org>:

https://gcc.gnu.org/g:074ee8d9a91d7573c1e8774a22e4e08f923adb18

commit r12-5290-g074ee8d9a91d7573c1e8774a22e4e08f923adb18
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Mon Nov 15 17:37:10 2021 -0800

    Add a missing return when transforming atomic bit test and operations
    
    When failing to transform equivalent, but slighly different cases of
    atomic bit test and operations to their canonical forms, return
    immediately.
    
    gcc/
    
            PR middle-end/103268
            * tree-ssa-ccp.c (optimize_atomic_bit_test_and): Add a missing
            return.
    
    gcc/testsuite/
    
            PR middle-end/103268
            * gcc.dg/pr103268-1.c: New test.
            * gcc.dg/pr103268-2.c: Likewise.
Comment 7 H.J. Lu 2021-11-16 03:24:47 UTC
Fixed.