re PR fortran/90329 (Incompatibility between gfortran and C lapack calls)
2019-05-19 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/90329 * invoke.texi: Document -fbroken-callers. * lang.opt: Add -fbroken-callers. * trans-decl.c (create_function_arglist): Only set DECL_HIDDEN_STRING_LENGTH if flag_broken_callers is set. From-SVN: r271376
This commit is contained in:
parent
f12b0a6226
commit
14688b8de3
4 changed files with 46 additions and 2 deletions
|
@ -1,3 +1,11 @@
|
|||
2019-05-19 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/90329
|
||||
* invoke.texi: Document -fbroken-callers.
|
||||
* lang.opt: Add -fbroken-callers.
|
||||
* trans-decl.c (create_function_arglist): Only set
|
||||
DECL_HIDDEN_STRING_LENGTH if flag_broken_callers is set.
|
||||
|
||||
2019-05-17 Thomas Schwinge <thomas@codesourcery.com>
|
||||
|
||||
PR fortran/89433
|
||||
|
|
|
@ -181,7 +181,7 @@ and warnings}.
|
|||
@item Code Generation Options
|
||||
@xref{Code Gen Options,,Options for code generation conventions}.
|
||||
@gccoptlist{-faggressive-function-elimination -fblas-matmul-limit=@var{n} @gol
|
||||
-fbounds-check -fcheck-array-temporaries @gol
|
||||
-fbounds-check -fbroken-callers -fcheck-array-temporaries @gol
|
||||
-fcheck=@var{<all|array-temps|bounds|do|mem|pointer|recursion>} @gol
|
||||
-fcoarray=@var{<none|single|lib>} -fexternal-blas -ff2c
|
||||
-ffrontend-loop-interchange @gol
|
||||
|
@ -1617,6 +1617,34 @@ warnings for generated array temporaries.
|
|||
@c Note: This option is also referred in gcc's manpage
|
||||
Deprecated alias for @option{-fcheck=bounds}.
|
||||
|
||||
@item -fbroken-callers
|
||||
@opindex @code{broken-callers}
|
||||
Some C interfaces to Fortran codes violate the gfortran ABI by
|
||||
omitting the hidden character length arguments as described in
|
||||
@xref{Argument passing conventions}. This can lead to crashes
|
||||
because pushing arguments for tail calls can overflow the stack.
|
||||
|
||||
To provide a workaround for existing binary packages, this option
|
||||
disables tail call optimization for gfortran procedures with character
|
||||
arguments.
|
||||
|
||||
Using this option can lead to problems including crashes due to
|
||||
insufficient stack space.
|
||||
|
||||
It is @emph{very strongly} recommended to fix the code in question.
|
||||
The @option{-fc-prototypes-external} option can be used to generate
|
||||
prototypes which conform to gfortran's ABI, for inclusion in the
|
||||
source code.
|
||||
|
||||
Support for this option will likely be withdrawn in a future release
|
||||
of gfortran.
|
||||
|
||||
The negative form, @option{-fno-broken-callers}, can be used to
|
||||
disable this option.
|
||||
|
||||
Default is currently @option{-fbroken-callers}, this will change
|
||||
in future releases.
|
||||
|
||||
@item -fcheck-array-temporaries
|
||||
@opindex @code{fcheck-array-temporaries}
|
||||
Deprecated alias for @option{-fcheck=array-temps}.
|
||||
|
|
|
@ -397,6 +397,10 @@ fblas-matmul-limit=
|
|||
Fortran RejectNegative Joined UInteger Var(flag_blas_matmul_limit) Init(30)
|
||||
-fblas-matmul-limit=<n> Size of the smallest matrix for which matmul will use BLAS.
|
||||
|
||||
fbroken-callers
|
||||
Fortran Var(flag_broken_callers) Init(1)
|
||||
Disallow tail call optimization when a calling routine may have omitted character lenghts.
|
||||
|
||||
fcheck-array-temporaries
|
||||
Fortran
|
||||
Produce a warning at runtime if a array temporary has been created for a procedure argument.
|
||||
|
|
|
@ -2516,7 +2516,11 @@ create_function_arglist (gfc_symbol * sym)
|
|||
DECL_ARG_TYPE (length) = len_type;
|
||||
TREE_READONLY (length) = 1;
|
||||
gfc_finish_decl (length);
|
||||
if (f->sym->ts.u.cl
|
||||
|
||||
/* Marking the length DECL_HIDDEN_STRING_LENGTH will lead
|
||||
to tail calls being disabled. Only do that if we
|
||||
potentially have broken callers. */
|
||||
if (flag_broken_callers && f->sym->ts.u.cl
|
||||
&& f->sym->ts.u.cl->length
|
||||
&& f->sym->ts.u.cl->length->expr_type == EXPR_CONSTANT)
|
||||
DECL_HIDDEN_STRING_LENGTH (length) = 1;
|
||||
|
|
Loading…
Add table
Reference in a new issue