On Thu, Mar 03, 2016 at 07:46:49AM +0100, Jakub Jelinek wrote: > On Tue, Mar 01, 2016 at 09:04:54PM +0100, Eric Botcazou wrote: > > When stack checking is entirely done by the middle-end (default if no > > specific > > back-end support or forced by -fstack-check=generic), the checking for the > > prologue is actually done in the caller with a default range and the hope > > is > > that the callee's static frame is not too large... There are a few tricks > > to > > make it sort of work, but it's obviously not bullet proof so a warning will > > be > > issued in the problematic cases (lot of small variables). > > > > But it is issued at the end of reload and LRA didn't replicate it, so it > > will > > no longer be issued e.g. for s390, as seen under PR ada/70017. Therefore > > the > > attached patch moves it to the end of do_reload and also streamlines it a > > bit. > > Note that the testcase fails with -fstack-protector-strong, I'm testing > in the rpm builds with --target_board=unix\{,-fstack-protector-strong\} > because the latter option is what we build packages with, but with > -fstack-protector-strong there is no warning from the testcase. > Is that a -fstack-check=generic bug, or is -fstack-check= being known > incompatible with -fstack-protector*, or testcase bug?
None of the vars in the stack frame are actually used, so I wonder why the expansion actually allocates anything in the stack frame for them (there is just a CLOBBER for them). Anyway, looking at pro_and_epilogue dumps, with additional -fstack-protector-strong we decrease sp only by 4176, while without it by 8224 (on x86_64; the testcase fails on all targets I've tried so far ({x86_64,i686,powerpc64{,le},s390{,x},aarch64,armv7hl}-linux). Jakub