On 06/15/2016 04:03 PM, Alan Modra wrote:
On Wed, Jun 15, 2016 at 11:49:50AM +0200, Bernd Schmidt wrote:
On 06/15/2016 03:30 AM, Alan Modra wrote:
Between these two calls to _gfortran_string_verify,
 if (verify(c4, "A", back = .true.) .ne. 3) call abort
 if (verify(c4, "AB") .ne. 0) call abort
it seems that gfortran is assuming that parameters passed on the stack
are unchanged.

How? Is this something in the Fortran frontend, or is there CSE going on for
stores to the argument area?

It's not a fortran problem, and I answered my own question about the
ABI by the testcase in
https://gcc.gnu.org/ml/gcc-patches/2016-06/msg01098.html.  If tail
calls are allowed, then the stack parameter area must be overwritten.
Thus an ABI can't allow tail calls if it specifies the stack parameter
area is preserved.  x86 allows tail calls.

Well yes. The problem isn't that the stack area is overwritten, the problem is that something expects that it isn't, and it's not clear to me yet where that problem occurs.


Bernd

Reply via email to