Fix Windows stack allocations.
authorTamar Christina <tamar@zhox.com>
Fri, 26 Jan 2018 18:10:10 +0000 (13:10 -0500)
committerBen Gamari <ben@smart-cactus.org>
Mon, 29 Jan 2018 21:20:01 +0000 (16:20 -0500)
commitd4d6e448d1700dbc074058540724fab54e5f0f33
tree944a265f49e6b129f13a011d056d618ce0c1831e
parent309d632c7147b65b9ae017f08d65295e8b1fdbcb
Fix Windows stack allocations.

On Windows we use the function `win32AllocStack` to do stack
allocations in 4k blocks and insert a stack check afterwards
to ensure the allocation returned a valid block.

The problem is this function does something that by C semantics
is pointless. The stack allocated value can never escape the
function, and the stack isn't used so the compiler just optimizes
away the entire function body.

After considering a bunch of other possibilities I think the simplest
fix is to just disable optimizations for the function.

Alternatively inline assembly is an option but the stack check function
doesn't have a very portable name as it relies on e.g. `libgcc`.

Thanks to Sergey Vinokurov for helping diagnose and test.

Test Plan: ./validate

Reviewers: bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14669

Differential Revision: https://phabricator.haskell.org/D4343

(cherry picked from commit a55d581f8f2923560c3444253050b13fdf2dec10)
includes/Stg.h
rts/StgCRun.c