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

            Bug ID: 97560
           Summary: [11 Regression] ICE: tree check: expected tree that
                    contains 'decl common' structure, have 'component_ref'
                    in tree_could_trap_p, at tree-eh.c:2708
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: asolokha at gmx dot com
  Target Milestone: ---

g++-11.0.0-alpha20201018 snapshot (g:1e70b1a358b6ce3b894f284d88fbb90518d45cc0)
ICEs when compiling the following testcase, reduced from
test/libcxx/containers/sequences/list/list.cons/db_move.pass.cpp from the
libcxx 10.0.1 test suite, w/ -O2 -fno-tree-forwprop -fnon-call-exceptions:

template <typename>
struct pv;

template <typename CY>
struct pv<CY &> {
  typedef CY g7;
};

template <typename Q6>
typename pv<Q6>::g7 hq (Q6 &&lb)
{
  return static_cast<typename pv<Q6>::g7 &&> (lb);
}

struct fk {
  fk *j6;
  fk *od;
};

fk *qi;

struct xz : fk {
  xz (xz &&)
  {
    qi = this;

    if (j6)
      od = this;
  }
};

struct el {
  struct {
    xz ls;
  } eu;
};

struct be : el {
};

be l1 = hq (l1);

% g++-11.0.0 -O2 -fno-tree-forwprop -fnon-call-exceptions -c um06grxw.cpp
during GIMPLE pass: evrp
um06grxw.cpp: In function 'void __static_initialization_and_destruction_0(int,
int)':
um06grxw.cpp:41:16: internal compiler error: tree check: expected tree that
contains 'decl common' structure, have 'component_ref' in tree_could_trap_p, at
tree-eh.c:2708
   41 | be l1 = hq (l1);
      |                ^
0x7e046c tree_contains_struct_check_failed(tree_node const*,
tree_node_structure_enum, char const*, int, char const*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/tree.c:9903
0x785391 contains_struct_check(tree_node*, tree_node_structure_enum, char
const*, int, char const*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/tree.h:3417
0x785391 tree_could_trap_p(tree_node*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/tree-eh.c:2708
0x1087624 stmt_could_throw_1_p
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/tree-eh.c:2868
0x1087624 stmt_could_throw_p(function*, gimple*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/tree-eh.c:2922
0x1089035 stmt_could_throw_p(function*, gimple*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/tree-eh.c:2894
0x1089035 stmt_can_throw_internal(function*, gimple*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/tree-eh.c:2996
0x12ca68a infer_value_range(gimple*, tree_node*, tree_code*, tree_node**)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/tree-vrp.c:1331
0x1b1d42f non_null_ref::process_name(tree_node*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/gimple-range-cache.cc:102
0x1b1d544 non_null_ref::non_null_deref_p(tree_node*, basic_block_def*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/gimple-range-cache.cc:60
0x1b1d544 non_null_ref::non_null_deref_p(tree_node*, basic_block_def*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/gimple-range-cache.cc:53
0x1b1eda9 ranger_cache::ssa_range_in_bb(irange&, tree_node*, basic_block_def*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/gimple-range-cache.cc:555
0x1b1f0cd ranger_cache::iterative_cache_update(tree_node*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/gimple-range-cache.cc:638
0x1b1f5f2 ranger_cache::fill_block_cache(tree_node*, basic_block_def*,
basic_block_def*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/gimple-range-cache.cc:808
0x1b1fda6 ranger_cache::block_range(irange&, basic_block_def*, tree_node*,
bool)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/gimple-range-cache.cc:589
0x1b18784 gimple_ranger::range_on_entry(irange&, basic_block_def*, tree_node*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/gimple-range.cc:909
0x1b18eeb gimple_ranger::range_of_expr(irange&, tree_node*, gimple*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/gimple-range.cc:880
0x130cb4d range_query::value_of_expr(tree_node*, gimple*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/value-query.cc:85
0x19b4831 hybrid_folder::value_of_expr(tree_node*, gimple*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/gimple-ssa-evrp.c:235
0x11c0594 substitute_and_fold_engine::replace_uses_in(gimple*)
       
/var/tmp/portage/sys-devel/gcc-11.0.0_alpha20201018/work/gcc-11-20201018/gcc/tree-ssa-propagate.c:871

Reply via email to