#13838: -Wdeferred-type-errors on a program with main not of type IO () yields "main thread exited (uncaught exception)" -------------------------------------+------------------------------------- Reporter: harry | Owner: (none) Type: bug | Status: patch Priority: normal | Milestone: Component: Compiler | Version: 8.0.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Compile-time | Unknown/Multiple crash or panic | Test Case: Blocked By: | Blocking: Related Tickets: #13292 | Differential Rev(s): Phab:D4708 Wiki Page: | -------------------------------------+------------------------------------- Comment (by Ben Gamari <ben@…>): In [changeset:"49e423e9940a9122a4a417cfc7580b9984fb49eb/ghc" 49e423e9/ghc]: {{{ #!CommitTicketReference repository="ghc" revision="49e423e9940a9122a4a417cfc7580b9984fb49eb" Put the `ev_binds` of main function inside `runMainIO` This ensures that the deferred type error can be emitted correctly. For `main` function in `Main` module, we have :Main.main = GHC.TopHandler.runMainIO main When the type of `main` is not `IO t` and the `-fdefer-type-errors` is enabled, the `ev_binds` of `main` function will contain deferred type errors. Previously, the `ev_binds` are bound to `runMainIO main`, rather than `main`, the type error exception at runtime cannot be handled properly. See Trac #13838. This patch fix that. Test Plan: make test TEST="T13838" Reviewers: bgamari Reviewed By: bgamari Subscribers: rwbarton, thomie, carter GHC Trac Issues: #13838 Differential Revision: https://phabricator.haskell.org/D4708 }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13838#comment:6> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler