Skip to content
  • Tamar Christina's avatar
    Fix Windows stack allocations. · d4d6e448
    Tamar Christina authored and Ben Gamari's avatar Ben Gamari committed
    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 a55d581f)
    d4d6e448