https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92029
--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> --- In particular, it happens for in nvptx-none/lto1 for: <var_decl 0x7ffff7ff8090 A.0 type <array_type 0x7ffff73c1b28 ... attributes <tree_list 0x7ffff73eb4b0 purpose <identifier_node 0x7ffff73eb488 omp declare target>> initial <error_mark 0x7ffff731c420>> In symtab_node::get () – as called in "varpool_node::get (var_decl)->force_output = 1;" - one has: 437 return decl->decl_with_vis.symtab_node; and this returns NULL. The core code Fortran code is (with: "integer :: v(4), i"): !$omp target map(from:v) v(:) = (/ (i, i=1,4) /) !$omp end target omplower dump has: .omp_data_arr.6.v = &v; #pragma omp target num_teams(1) thread_limit(0) map(from:v [len: 16]) [child fn: MAIN__._omp_fn.0 (.omp_data_arr.6, .omp_data_sizes.7, .omp_data_kinds.8)] { .omp_data_i = (const struct .omp_data_t.5 & restrict) &.omp_data_arr.6; { static integer(kind=4) A.0[4] = {1, 2, 3, 4}; D.3933 = .omp_data_i->v; D.3934 = D.3933; D.3935 = MEM <uint128_t> [(c_char * {ref-all})&A.0]; MEM <uint128_t> [(c_char * {ref-all})D.3934] = D.3935; } #pragma omp return } .omp_data_arr.6 = {CLOBBER}; In the optimized dump for MAIN__._omp_fn.0, one has – with -O0: integer(kind=4) A.0[4]; … _3 = .omp_data_i_2(D)->v; _4 = _3; _5 = MEM <uint128_t> [(c_char * {ref-all})&A.0]; MEM <uint128_t> [(c_char * {ref-all})_4] = _5; And with -Og (which ICEs): _3 = .omp_data_i_2(D)->v; MEM <uint128_t> [(c_char * {ref-all})_3] = 0x4000000030000000200000001;