Bug 97668 - [11 Regression] ICE in cmp_cst, at analyzer/svalue.cc:283
Summary: [11 Regression] ICE in cmp_cst, at analyzer/svalue.cc:283
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: analyzer (show other bugs)
Version: 11.0
: P3 normal
Target Milestone: 11.0
Assignee: David Malcolm
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-11-02 06:38 UTC by Arseny Solokha
Modified: 2020-11-05 15:14 UTC (History)
1 user (show)

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


Attachments
Testcase (216 bytes, text/plain)
2020-11-02 06:38 UTC, Arseny Solokha
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Arseny Solokha 2020-11-02 06:38:30 UTC
Created attachment 49484 [details]
Testcase

gfortran-11.0.0-alpha20201101 snapshot (g:590febb5f6624f78b36402a7c9a9c318978f1efa) ICEs when compiling the attached testcase w/ -O1 -fanalyzer:

% powerpc-e300c3-linux-gnu-gfortran-11.0.0 -std=legacy -O1 -fanalyzer -c d9xjyayq.f
during IPA pass: analyzer
d9xjyayq.f:6:16:

    6 |       DO 136 IG=IS,1
      |                ^
internal compiler error: in cmp_cst, at analyzer/svalue.cc:283
0x71ef8e cmp_cst
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/svalue.cc:283
0x18aca58 cmp1<sort_ctx>
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/sort.cc:153
0x18acab4 netsort<sort_ctx>
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/sort.cc:170
0x18acab4 mergesort<sort_ctx>
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/sort.cc:207
0x18ad0f2 gcc_qsort(void*, unsigned long, unsigned long, int (*)(void const*, void const*))
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/sort.cc:266
0x183636a ana::constraint_manager::canonicalize()
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/constraint-manager.cc:1713
0x1211e95 ana::program_state::prune_for_point(ana::exploded_graph&, ana::program_point const&, ana::exploded_node const*) const
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/program-state.cc:1049
0x11fcf02 ana::exploded_graph::get_or_create_node(ana::program_point const&, ana::program_state const&, ana::exploded_node const*)
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/engine.cc:2045
0x11ffae4 ana::exploded_graph::process_node(ana::exploded_node*)
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/engine.cc:2850
0x1200672 ana::exploded_graph::process_worklist()
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/engine.cc:2523
0x120282b ana::impl_run_checkers(ana::logger*)
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/engine.cc:4658
0x1203721 ana::run_checkers()
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/engine.cc:4729
0x11f6748 execute
	/var/tmp/portage/cross-powerpc-e300c3-linux-gnu/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/analyzer-pass.cc:84

(While my target here is powerpc, the ICE should not be target-specific.)
Comment 1 Martin Liška 2020-11-02 08:35:15 UTC
Confirmed, started with r11-4435-gbf1b5dae440de888.
Comment 2 Arseny Solokha 2020-11-04 18:51:41 UTC
Finally, a C testcase:

void
wb (_Complex double jh)
{
  _Complex double af = 0.0;

  do
    {
      af += jh;
    }
  while (af != 0.0);
}

_Complex double
o6 (void)
{
  _Complex double ba = 0.0;

  for (;;)
    {
      wb (ba);
      ba = 1.0;
    }

  return ba;
}

% gcc-11.0.0 -O1 -fanalyzer -c nzttegjf.c
during IPA pass: analyzer
nzttegjf.c: In function 'wb':
nzttegjf.c:20:7: internal compiler error: in cmp_cst, at analyzer/svalue.cc:283
   20 |       wb (ba);
      |       ^~~~~~~
0x73dc66 cmp_cst
	/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/svalue.cc:283
0x19296e0 cmp1<sort_ctx>
	/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/sort.cc:153
0x1929734 netsort<sort_ctx>
	/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/sort.cc:170
0x1929734 mergesort<sort_ctx>
	/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/sort.cc:207
0x1929cc2 gcc_qsort(void*, unsigned long, unsigned long, int (*)(void const*, void const*))
	/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/sort.cc:266
0x18c2311 vec<ana::svalue const*, va_heap, vl_embed>::qsort(int (*)(void const*, void const*))
	/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/vec.h:1138
0x18c2311 vec<ana::svalue const*, va_heap, vl_ptr>::qsort(int (*)(void const*, void const*))
	/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/vec.h:2031
0x18c2311 ana::equiv_class::canonicalize()
	/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/constraint-manager.cc:431
0x18c2311 ana::constraint_manager::canonicalize()
	/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/constraint-manager.cc:1713
0x115d881 ana::program_state::prune_for_point(ana::exploded_graph&, ana::program_point const&, ana::exploded_node const*) const
	/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/program-state.cc:1049
0x1149245 ana::exploded_graph::get_or_create_node(ana::program_point const&, ana::program_state const&, ana::exploded_node const*)
	/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/engine.cc:2045
0x114c6cd ana::exploded_graph::process_node(ana::exploded_node*)
	/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/engine.cc:2850
0x114d47a ana::exploded_graph::process_worklist()
	/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/engine.cc:2523
0x114f59a ana::impl_run_checkers(ana::logger*)
	/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/engine.cc:4658
0x115036c ana::run_checkers()
	/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/engine.cc:4729
0x11424e8 execute
	/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201101/work/gcc-11-20201101/gcc/analyzer/analyzer-pass.cc:84
Comment 3 GCC Commits 2020-11-05 14:55:55 UTC
The master branch has been updated by David Malcolm <dmalcolm@gcc.gnu.org>:

https://gcc.gnu.org/g:54cbdb528df16686290ad26e2130a1896915639d

commit r11-4740-g54cbdb528df16686290ad26e2130a1896915639d
Author: David Malcolm <dmalcolm@redhat.com>
Date:   Thu Nov 5 09:54:58 2020 -0500

    analyzer: fix ICE comparing COMPLEX_CSTs [PR97668]
    
    gcc/analyzer/ChangeLog:
            PR analyzer/97668
            * svalue.cc (cmp_cst): Handle COMPLEX_CST.
    
    gcc/testsuite/ChangeLog:
            PR analyzer/97668
            * gcc.dg/analyzer/pr97668.c: New test.
            * gfortran.dg/analyzer/pr97668.f: New test.
Comment 4 David Malcolm 2020-11-05 15:14:04 UTC
Thanks for filing this.  Should be fixed by the above commit.