https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115070
--- Comment #6 from Francois-Xavier Coudert <fxcoudert at gcc dot gnu.org> ---
So the var_decl in question is fpstate.0:
<var_decl 0x1034e1200 fpstate.0
type <array_type 0x1036c4b28
type <integer_type 0x1035003f0 c_char public unsigned QI
size <integer_cst 0x1034bce70 constant 8>
unit-size <integer_cst 0x1034bce88 constant 1>
align:8 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x1035003f0 precision:8 min <integer_cst 0x1034bced0 0> max <integer_cst
0x1034bceb8 255>
pointer_to_this <pointer_type 0x103503bb8>>
BLK
size <integer_cst 0x103546988 constant 264>
unit-size <integer_cst 0x103546aa8 constant 33>
align:8 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x1036c4b28
domain <integer_type 0x1036c4a80 type <integer_type 0x1035007e0>
DI
size <integer_cst 0x1034bcd80 constant 64>
unit-size <integer_cst 0x1034bcd98 constant 8>
align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x1036c4a80 precision:64 min <integer_cst 0x1034bd050 0> max <integer_cst
0x103546a60 32>>
pointer_to_this <pointer_type 0x1036c4bd0>>
addressable used ignored BLK s.f90:10:17 size <integer_cst 0x103546988 264>
unit-size <integer_cst 0x103546aa8 33>
align:8 warn_if_not_align:0 context <function_decl 0x1036c8100 my_sub>>
And if I look at the tree dump, it seems the variable is indeed not created
correctly:
__attribute__((fn spec (". w ")))
void my_sub (struct __class_my_mod_My_type_t & restrict obs)
{
try
{
_gfortran_ieee_procedure_entry ((void *) &fpstate.0);
see the missing declaration for fpstate.0. But it is created by
gfc_create_var(), like so many other local variables in the front-end, so I
have no idea why it's disappearing.