Skip to content
  • Tamar Christina's avatar
    Prevent GHC from silently dying when preprocessor is not found · b6f76b9a
    Tamar Christina authored and Ben Gamari's avatar Ben Gamari committed
    The Windows preprocessor code calls `runInteractiveProcess` but does
    not check if an exception is thrown.
    `runInteractiveProcess` calls `CreateProcess` which when given a format
    the system loader does not know about
    will throw an exception. This is what makes #9399 fail.
    
    Ultimately we should not use any `CreateProcess` based calls but
    instead `ShellExecuteEx` as  this would allow
    us to run applications that the shell knows about instead of just the
    loader. More details on #365.
    
    This patch removes `PhaseFailed` and throws `ProgramError` instead.
    `PhaseFailed` was largely unneeded since it never gave
    very useful information aside from the `errorcode` which was almost
    always `1`. `IOErrors` have also been eliminated and `GhcExceptions`
    thrown in their place wherever possible.
    
    Updates haddock submodule.
    
    Test Plan:
    `./validate` to make sure anything didn't break and
    `make TESTS="T365"` to test that an error is now properly thrown
    
    Reviewers: austin, thomie, bgamari
    
    Reviewed By: thomie, bgamari
    
    Subscribers: #ghc_windows_task_force
    
    Differential Revision: https://phabricator.haskell.org/D1256
    
    GHC Trac Issues: #365
    b6f76b9a