On Tue, Sep 09, 2025 at 08:49:51PM +0200, Harald Anlauf wrote:
> Hi Jerry!
> 
> Am 08.09.25 um 23:56 schrieb Jerry D:
> > On 9/8/25 12:59 PM, Harald Anlauf wrote:
> > > Dear all,
> > > 
> > > this is the second (and hopefully final) patch to fix this PR for good.
> > > This makes the GNU intrinsics STAT/LSTAT/FSTAT almost generic, with few
> > > restrictions:
> > > 
> > > - for the VALUES argument we will support only kinds 4 and 8.
> > >    This allows to stay with the current runtime library functions
> > >    in libgfortran.  Other arguments will be converted suitably.
> > > 
> > > - a STATUS argument shall have a decimal exponent range of at
> > >    least four.  This allows to handle both common errno values
> > >    as well as potential LIBERROR_* from libgfortran.h.
> > > 
> > > The hard part was getting this optional,intent(out) STATUS
> > > argument right when we want to allow kind conversions,
> > > and the actual argument being an optional dummy.
> > > 
> > > In its current version, gfc_conv_procedure_call does not seem
> > > to support such trickery, so I wrote a specialized version
> > > handling this.  It is actually more complex than it needs
> > > to be, as the related runtime library functions do not
> > > change their behavior depending on the presence of the
> > > actual argument.  We'll generate a temporary of the needed
> > > kind, pass a suitable pointer, and assign the result only
> > > when it should happen.
> > > 
> > > (Maybe the required feature is already mostly implemented,
> > > but I just did not see it.)
> > > 
> > > Regtested on x86_64-pc-linux-gnu.  OK for mainline?
> > > 
> > > Thanks,
> > > Harald
> > > 
> > 
> > Reviewed, applied, regression checked here OK.
> > 
> > make info has no errors and the generated info file looks good.
> 
> Thanks for the review and full testing!
> 
> Pushed as r16-3724-g52d754a1a620ef.
> 
> Harald
> 

This broke bootstrap on FreeBSD where warning.


In function 'tree_node* conv_intrinsic_fstat_lstat_stat_sub(gfc_code*)',
    inlined from 'tree_node* gfc_conv_intrinsic_subroutine(gfc_code*)' at 
../../gccx/gcc/fortran/trans-intrinsic.cc:13477:49:
../../gccx/gcc/fortran/trans-intrinsic.cc:5964:31: error: 'unit' may be used 
uninitialized [-Werror=maybe-uninitialized]
 5964 |     tmp = build_call_expr_loc (input_location, tmp, 3, unit, vals,
      |           ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 5965 |                                stat ? arg3 : null_pointer_node);
      |                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../gccx/gcc/fortran/trans-intrinsic.cc: In function 'tree_node* 
gfc_conv_intrinsic_subroutine(gfc_code*)':
../../gccx/gcc/fortran/trans-intrinsic.cc:5881:8: note: 'unit' was declared here
 5881 |   tree unit;
      |        ^~~~
In function 'tree_node* conv_intrinsic_fstat_lstat_stat_sub(gfc_code*)',
    inlined from 'tree_node* gfc_conv_intrinsic_subroutine(gfc_code*)' at 
../../gccx/gcc/fortran/trans-intrinsic.cc:13477:49:
../../gccx/gcc/fortran/trans-intrinsic.cc:5967:31: error: 'name' may be used 
uninitialized [-Werror=maybe-uninitialized]
 5967 |     tmp = build_call_expr_loc (input_location, tmp, 4, name, vals,
      |           ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 5968 |                                stat ? arg3 : null_pointer_node, slen);
      |                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../gccx/gcc/fortran/trans-intrinsic.cc: In function 'tree_node* 
gfc_conv_intrinsic_subroutine(gfc_code*)':
../../gccx/gcc/fortran/trans-intrinsic.cc:5882:8: note: 'name' was declared here
 5882 |   tree name, slen;
      |        ^~~~
In function 'tree_node* conv_intrinsic_fstat_lstat_stat_sub(gfc_code*)',
    inlined from 'tree_node* gfc_conv_intrinsic_subroutine(gfc_code*)' at 
../../gccx/gcc/fortran/trans-intrinsic.cc:13477:49:
../../gccx/gcc/fortran/trans-intrinsic.cc:5967:31: error: 'slen' may be used 
uninitialized [-Werror=maybe-uninitialized]
 5967 |     tmp = build_call_expr_loc (input_location, tmp, 4, name, vals,
      |           ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 5968 |                                stat ? arg3 : null_pointer_node, slen);
      |                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../gccx/gcc/fortran/trans-intrinsic.cc: In function 'tree_node* 
gfc_conv_intrinsic_subroutine(gfc_code*)':
../../gccx/gcc/fortran/trans-intrinsic.cc:5882:14: note: 'slen' was declared 
here
 5882 |   tree name, slen;
      |              ^~~~

-- 
Steve

Reply via email to