https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120413
Bug ID: 120413 Summary: C++ OpenMP 'target' SIGSEGV in 'gcc/cp/semantics.cc:finish_omp_target_clauses_r' Product: gcc Version: 15.0 Status: UNCONFIRMED Keywords: ice-on-valid-code, openmp Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: tschwinge at gcc dot gnu.org CC: burnus at gcc dot gnu.org, cltang at gcc dot gnu.org, jakub at gcc dot gnu.org, waffl3x at gcc dot gnu.org Target Milestone: --- Created attachment 61497 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=61497&action=edit 'arr.C' Via Waffl3x, the attached minimal C++ file SIGSEGVs with '-fopenmp' enabled (no offloading configuration required): [...]/arr.C: In function ‘int main()’: [...]/arr.C:13:3: internal compiler error: Segmentation fault 13 | } | ^ Program received signal SIGSEGV, Segmentation fault. finish_omp_target_clauses_r (tp=<optimized out>, walk_subtrees=0x7fffffffbebc, ptr=0x7fffffffc1f0) at ../../source-gcc/gcc/cp/semantics.cc:10569 10569 for (tree var = BLOCK_VARS (block); var; var = DECL_CHAIN (var)) (gdb) print block $1 = (tree) 0x0 (gdb) bt #0 finish_omp_target_clauses_r (tp=<optimized out>, walk_subtrees=0x7fffffffbebc, ptr=0x7fffffffc1f0) at ../../source-gcc/gcc/cp/semantics.cc:10569 #1 0x00000000017d94fe in walk_tree_1 (tp=0x7ffff78e06f0, func=func@entry=0xba8400 <finish_omp_target_clauses_r(tree*, int*, void*)>, data=data@entry=0x7fffffffc1f0, pset=pset@entry=0x7fffffffc080, lh=lh@entry=0xbbd680 <cp_walk_subtrees(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)>) at ../../source-gcc/gcc/tree.cc:11588 #2 0x00000000017d9be7 in walk_tree_1 (tp=<optimized out>, tp@entry=0x7ffff78df340, func=func@entry=0xba8400 <finish_omp_target_clauses_r(tree*, int*, void*)>, data=data@entry=0x7fffffffc1f0, pset=pset@entry=0x7fffffffc080, lh=lh@entry=0xbbd680 <cp_walk_subtrees(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)>) at ../../source-gcc/gcc/tree.cc:11724 #3 0x00000000017d9ab5 in walk_tree_1 (tp=0x7ffff78e2e38, tp@entry=0x7ffff78df448, func=func@entry=0xba8400 <finish_omp_target_clauses_r(tree*, int*, void*)>, data=data@entry=0x7fffffffc1f0, pset=pset@entry=0x7fffffffc080, lh=lh@entry=0xbbd680 <cp_walk_subtrees(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)>) at ../../source-gcc/gcc/tree.cc:11704 #4 0x00000000017d9ab5 in walk_tree_1 (tp=0x7ffff748d4f8, tp@entry=0x7ffff78df538, func=func@entry=0xba8400 <finish_omp_target_clauses_r(tree*, int*, void*)>, data=data@entry=0x7fffffffc1f0, pset=pset@entry=0x7fffffffc080, lh=lh@entry=0xbbd680 <cp_walk_subtrees(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)>) at ../../source-gcc/gcc/tree.cc:11704 #5 0x00000000017d9ab5 in walk_tree_1 (tp=0x7ffff748e050, tp@entry=0x7fffffffc128, func=func@entry=0xba8400 <finish_omp_target_clauses_r(tree*, int*, void*)>, data=data@entry=0x7fffffffc1f0, pset=pset@entry=0x7fffffffc080, lh=lh@entry=0xbbd680 <cp_walk_subtrees(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)>) at ../../source-gcc/gcc/tree.cc:11704 #6 0x00000000017de396 in walk_tree_without_duplicates_1 (tp=tp@entry=0x7fffffffc128, func=func@entry=0xba8400 <finish_omp_target_clauses_r(tree*, int*, void*)>, data=data@entry=0x7fffffffc1f0, lh=0xbbd680 <cp_walk_subtrees(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, false, default_hash_traits<tree_node*> >*)>) at ../../source-gcc/gcc/tree.cc:11848 #7 0x0000000000ba1513 in finish_omp_target_clauses (loc=1184130, body=body@entry=0x7ffff748e060, clauses_ptr=clauses_ptr@entry=0x7fffffffc338) at ../../source-gcc/gcc/cp/semantics.cc:10620 #8 0x0000000000ba4a22 in finish_omp_target (loc=1184130, clauses=0x0, body=0x7ffff748e060, combined_p=combined_p@entry=false) at ../../source-gcc/gcc/cp/semantics.cc:10956 #9 0x0000000000aa4a78 in cp_parser_omp_target (parser=parser@entry=0x7ffff78c9d20, pragma_tok=pragma_tok@entry=0x7ffff7689308, context=context@entry=pragma_compound, if_p=if_p@entry=0x0) at ../../source-gcc/gcc/cp/parser.cc:48907 [...] (gdb) list 10564 } 10565 10566 if (TREE_CODE (t) == BIND_EXPR) 10567 { 10568 tree block = BIND_EXPR_BLOCK (t); 10569 for (tree var = BLOCK_VARS (block); var; var = DECL_CHAIN (var)) 10570 if (!data->local_decls.contains (var)) 10571 data->local_decls.add (var); 10572 return NULL_TREE; 10573 } I'm not familiar with this code to be able to easily tell if this just needs skipping for '!block' or if something is wrong elsewhere. That code was added in commit r12-5835-g0ab29cf0bb68960c1f87405f14b4fb2109254e2f "openmp: Improve OpenMP target support for C++ (PR92120)".