[Bug fortran/96486] get_environment_variable fails for zero-length values
kargl at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Aug 5 17:49:17 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96486
--- Comment #7 from kargl at gcc dot gnu.org ---
(In reply to kargl from comment #6)
> I do note there are other problems with get_environment_variable.
>
> 1) Neither length nor status can be integer(1). gfortran should issue
> an error.
>
> 2) Fortran 2018 has added an optional errmsg argument. This is not
> supported.
>
> 3) gfortran is issuing errors that don't make sence (to me).
>
> program foo
> integer( 1) i01
> integer( 2) i02
> integer( 4) i04
> integer( 8) i08
> #ifdef __GFC_INT_16__
> integer(16) i16
> #endif
> character(len=20) name
>
> print '(A,I0)', 'range(i01) = ', range(i01)
> print '(A,I0)', 'range(i02) = ', range(i02)
> print '(A,I0)', 'range(i04) = ', range(i04)
> print '(A,I0)', 'range(i08) = ', range(i08)
> #ifdef __GFC_INT_16__
> print '(A,I0)', 'range(i16) = ', range(i16)
> #endif
>
> name = ''
> ! Although valid Fortran, this should probably raise a warning.
> call get_environment_variable(name);
>
> name = 'FOO'
> call get_environment_variable(name,length=i01); ! Should be an error
> call get_environment_variable(name,length=i02); ! Should be ok
> call get_environment_variable(name,length=i04); ! Should be ok
> call get_environment_variable(name,length=i08); ! Should be ok
> #ifdef __GFC_INT_16__
> call get_environment_variable(name,length=i16); ! Should be ok
> #endif
>
> end program foo
>
> mobile:kargl[256] gfcx -o z a.F90 && ./z
> a.F90:29:45:
>
> 29 | call get_environment_variable(name,length=i01); ! Should be an
> error
> | 1
> Error: In call to 'get_environment_variable' at (1), type mismatch in
> argument length'; pass 'INTEGER(1)' to 'INTEGER(4)'
> a.F90:30:45:
>
> 30 | call get_environment_variable(name,length=i02);
> | 1
> Error: In call to 'get_environment_variable' at (1), type mismatch in
> argument length'; pass 'INTEGER(2)' to 'INTEGER(4)'
> a.F90:32:45:
>
> 32 | call get_environment_variable(name,length=i08);
> | 1
> Error: In call to 'get_environment_variable' at (1), type mismatch in
> argument length'; pass 'INTEGER(8)' to 'INTEGER(4)'
Need to add a gfc_check_get_environment_variable routine to get pass these
errors.
More information about the Gcc-bugs
mailing list