https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86816

            Bug ID: 86816
           Summary: [8 Regression] ICE: SIGSEGV in tree-ssa-pre /
                    tail_merge_optimize
           Product: gcc
           Version: tree-ssa
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: janu.gorec at interia dot pl
  Target Milestone: ---

Created attachment 44481
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44481&action=edit
Source of minimal test case

Environment:
/home/local/gcc820/bin/g++ -v
Using built-in specs.
COLLECT_GCC=/home/local/gcc820/bin/g++
COLLECT_LTO_WRAPPER=/home/local/gcc820/libexec/gcc/x86_64-pc-linux-gnu/8.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-8.2.0/configure --prefix=/home/local/gcc820
--with-gmp=/home/local --with-mpfr=/home/local --with-mpc=/home/local
--enable-languages=c,c++
Thread model: posix
gcc version 8.2.0 (GCC)


Command line:
/home/local/gcc820/bin/gcc -O2 -c -Wall -Wextra ice-test.cpp


Compiler output:
during GIMPLE pass: pre
ice-test.cpp: In member function 'void Test::TestIce(Ctx&, Signal*)':
ice-test.cpp:21:6: internal compiler error: Segmentation fault
 void Test::TestIce( Ctx& ctx, Signal* sig)
      ^~~~
0xb372cf crash_signal
        ../../gcc-8.2.0/gcc/toplev.c:325
0xcd8a6e vn_valueize
        ../../gcc-8.2.0/gcc/tree-ssa-sccvn.h:258
0xcd8a6e gvn_uses_equal
        ../../gcc-8.2.0/gcc/tree-ssa-tail-merge.c:366
0xcdbb36 gimple_equal_p
        ../../gcc-8.2.0/gcc/tree-ssa-tail-merge.c:1087
0xcdbb36 find_duplicate
        ../../gcc-8.2.0/gcc/tree-ssa-tail-merge.c:1281
0xcdbb36 find_clusters_1
        ../../gcc-8.2.0/gcc/tree-ssa-tail-merge.c:1487
0xcdbb36 find_clusters
        ../../gcc-8.2.0/gcc/tree-ssa-tail-merge.c:1508
0xcdbb36 tail_merge_optimize(unsigned int)
        ../../gcc-8.2.0/gcc/tree-ssa-tail-merge.c:1752
0xc8a515 execute
        ../../gcc-8.2.0/gcc/tree-ssa-pre.c:4209
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.


Same for -O3 and gcc-8.1.0.
gcc-7.3.0 (and 6, 5, 4.9, 4.7) is Ok.


Minimal test case: (also in attachment)

class Signal
{
public:
    int                 m_Mode;
};

class Ctx
{
public:
    bool                m_Invert;

    void                DoSomething();
};

class Test
{
    void                TestIce( Ctx& ctx, Signal* sig);
};

void Test::TestIce( Ctx& ctx, Signal* sig)
{
    int invert = false;

    if( ! ctx.m_Invert)
        invert = ! invert;

    switch( sig->m_Mode)
    {
        case 1:
            invert = ! invert;
            break;

        case 2:
            invert = true;
            break;
    }

    if( invert)
        ctx.DoSomething();
}

Reply via email to