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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|needs-reduction             |
           Priority|P3                          |P2
   Target Milestone|---                         |10.5
                 CC|                            |hubicka at gcc dot gnu.org,
                   |                            |jamborm at gcc dot gnu.org
            Summary|tbb-2021.8.0 fails on       |[10/11/12/13 Regression]
                   |i686-linux (32-bit),        |tbb-2021.8.0 fails on
                   |internal compiler error: in |i686-linux (32-bit),
                   |expand_expr_real_1, at      |internal compiler error: in
                   |expr.c:10281                |expand_expr_real_1, at
                   |                            |expr.c:10281

--- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Reduced testcase for -m32 -O3 -std=c++11 -fPIC:

struct unique_scoped_lock {
  unique_scoped_lock(int);
  ~unique_scoped_lock();
};
struct rw_scoped_lock {
  rw_scoped_lock(int, bool);
  ~rw_scoped_lock();
};
template <typename _Tp> struct Trans_NS___cxx11_list {
  typedef _Tp value_type;
  void push_front(value_type);
  void push_back(value_type &&);
};
class receiver typedef node_priority_t;
struct graph_node {
  virtual void reset_node();
};
template <typename> struct sender {
  typedef receiver successor_type;
  virtual bool register_successor(successor_type &);
};
struct receiver {
  virtual node_priority_t priority() { return receiver(); }
};
void fgt_make_edge(void *, void *);
struct successor_cache {
  int my_mutex;
  Trans_NS___cxx11_list<receiver *> my_successors;
  void register_successor(receiver &r) {
    rw_scoped_lock l(my_mutex, true);
    r.priority();
    my_successors.push_front(&r);
    my_successors.push_back(&r);
  }
};
struct input_node : graph_node, sender<int> {
  template <typename Body> input_node(int, Body);
  bool register_successor(successor_type &r) {
    unique_scoped_lock lock(my_mutex);
    my_successors.register_successor(r);
    if (my_active)
      return true;
  }
  int my_mutex;
  bool my_active;
  successor_cache my_successors;
};
inline void make_edge(sender<int> &p) {
  receiver s, __trans_tmp_2;
  p.register_successor(__trans_tmp_2);
  fgt_make_edge(&p, &s);
}
enum TestNodeTypeEnum { nonThrowing, isThrowing };
template <TestNodeTypeEnum> struct absorber_body;
template <class, class InputNodeType, class, class, class, class>
void run_one_priority_queue_node_test() {
  int g, input_count;
  InputNodeType input(g, input_count);
  make_edge(input);
}
template <class, int, TestNodeTypeEnum SinkThrowType>
void run_priority_queue_node_test() {
  run_one_priority_queue_node_test<int, input_node, int, int, graph_node,
                                   absorber_body<SinkThrowType>>();
}
void test_priority_queue_node() {
  run_priority_queue_node_test<int, isThrowing, nonThrowing>();
  run_priority_queue_node_test<int, isThrowing, isThrowing>();
}

This started to ICE (segfault in same_node_or_its_all_contexts_clone_p) with
r10-4511-g6cf67b62c8cda035dccac and starting with
r10-5061-g68188fff88d0c302e6002 it gets the
ICE that shows up to latest trunk.

Reply via email to