Fix #12998 by removing CTimer
authorRyan Scott <ryan.gl.scott@gmail.com>
Sun, 18 Dec 2016 15:41:48 +0000 (10:41 -0500)
committerRyan Scott <ryan.gl.scott@gmail.com>
Sun, 18 Dec 2016 15:41:48 +0000 (10:41 -0500)
commit513eb6a0638a1c64b9d76bcab39ed80cdd9dbb27
treebdcccb5cc54a9c84c952064f544b0b55ab945aca
parentb5d788aa0e73fdf22cca3f88962e7652b07073cc
Fix #12998 by removing CTimer

Summary:
CTimer is a wrapper around `timer_t`, which is a typedef for `void*`
on most platforms. The issue is that GHC's `FPTOOLS_CHECK_HTYPE` is not robust
enough to discern pointer types from non-pointer types, so it mistakenly labels
`timer_t` as a `Double` or `Int32` (depending on how many bits a pointer takes
up on your platform). This wreaks havoc when trying to give it certain type
class instances, as noted in
https://phabricator.haskell.org/rGHCffc2327070dbb664bdb407a804121eacb2a7c734.

For now, the simplest thing to do would be removing `CTimer`, since:

1. The original author (@DanielG) didn't have a particular use in mind for
   `timer_t` when he fixed #12795.
2. `CTimer` hasn't appeared in a release of `base` yet.

Fixes #12998.

Reviewers: austin, hvr, bgamari, DanielG, trofi

Reviewed By: bgamari, trofi

Subscribers: thomie, DanielG, erikd

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

GHC Trac Issues: #12795, #12998
libraries/base/System/Posix/Types.hs
libraries/base/changelog.md
libraries/base/configure.ac