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.