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;