1. 31 Aug, 2014 2 commits
    • Herbert Valerio Riedel's avatar
      Add `FiniteBits(count{Leading,Trailing}Zeros)` · a8a969ae
      Herbert Valerio Riedel authored
      This exposes the newly added CLZ/CTZ primops from
      e0c1767d (re #9340)
      via two new methods `countLeadingZeros` and `countTrailingZeros`
      in the `Data.Bits.FiniteBits` class.
      
      The original proposal can be found at
      
        http://www.haskell.org/pipermail/libraries/2014-August/023567.html
      
      Test Plan: successful validate
      
      Reviewers: ekmett, tibbe
      
      GHC Trac Issues: #9532
      
      Differential Revision: https://phabricator.haskell.org/D158
      a8a969ae
    • Herbert Valerio Riedel's avatar
      Re-export Word from Prelude (re #9531) · 393b8202
      Herbert Valerio Riedel authored
      The original proposal text can be found at
      
        http://www.haskell.org/pipermail/libraries/2014-August/023491.html
      
      The proposal passed with a clear majority, and was additionally
      confirmed by the core libraries committee.
      
      *Compatibility Note*
      
      Only code that imports `Data.Word` for the sole purpose of using `Word`
      *and* requires to be `-Werror`-clean (due to `-fwarn-unused-imports`)
      is affected by this change.
      
      In order to write warning-free forward/backward compatible against `base`,
      a variant of the following CPP-based snippet can be used:
      
        -- Starting with base>4.7.0 or GHC>7.8 Prelude re-exports 'Word'
        -- The following is needed, if 'Word' is the *only* entity needed from Data.Word
        #ifdef MIN_VERSION_base
        # if !MIN_VERSION_base(4,7,1)
        import Data.Word (Word)
        # endif
        -- no cabal_macros.h -- fallback to __GLASGOW_HASKELL__
        #elif __GLASGOW_HASKELL__ < 709
        import Data.Word (Word)
        #endif
      
      This also updates the haddock submodule in order to avoid a compile warning
      393b8202
  2. 29 Aug, 2014 10 commits
  3. 28 Aug, 2014 6 commits
  4. 22 Aug, 2014 2 commits
  5. 20 Aug, 2014 1 commit
  6. 19 Aug, 2014 4 commits
    • AndreasVoellmy's avatar
      rts/base: Fix #9423 · f9f89b78
      AndreasVoellmy authored
      Summary:
      Fix #9423.
      
      The problem in #9423 is caused when code invoked by `hs_exit()` waits
      on all foreign calls to return, but some IO managers are in `safe` foreign
      calls and do not return. The previous design signaled to the timer manager
      (via its control pipe) that it should "die" and when the timer manager
      returned to Haskell-land, the Haskell code in timer manager then signalled
      to the IO manager threads that they should return from foreign calls and
      `die`. Unfortunately, in the shutdown sequence the timer manager is unable
      to return to Haskell-land fast enough and so the code that signals to the
      IO manager threads (via their control pipes) is never executed and the IO
      manager threads remain out in the foreign calls.
      
      This patch solves this problem by having the RTS signal to all the IO
      manager threads (via their control pipes; and in addition to signalling
      to the timer manager thread) that they should shutdown (in `ioManagerDie()`
      in `rts/Signals.c`. To do this, we arrange for each IO manager thread to
      register its control pipe with the RTS (in `GHC.Thread.startIOManagerThread`).
      In addition, `GHC.Thread.startTimerManagerThread` registers its control pipe.
      These are registered via C functions `setTimerManagerControlFd` (in
      `rts/Signals.c`) and `setIOManagerControlFd` (in `rts/Capability.c`). The IO
      manager control pipe file descriptors are stored in a new field of the
      `Capability_ struct`.
      
      Test Plan: See the notes on #9423 to recreate the problem and to verify that it no longer occurs with the fix.
      
      Auditors: simonmar
      
      Reviewers: simonmar, edsko, ezyang, austin
      
      Reviewed By: austin
      
      Subscribers: phaskell, simonmar, ezyang, carter, relrod
      
      Differential Revision: https://phabricator.haskell.org/D129
      
      GHC Trac Issues: #9423, #9284
      f9f89b78
    • bernalex's avatar
      Mention that `Data.Ix` uses row-major indexing · 2fc22949
      bernalex authored
      This addresses Trac #8712
      
       by simply mentioning row-major indexing,
      thereby removing any ambiguity.
      Signed-off-by: default avatarAustin Seipp <austin@well-typed.com>
      2fc22949
    • bernalex's avatar
      Make Prelude.signum handle -0.0 correctly (#7858) · d9a20573
      bernalex authored
      Summary:
      Make the `Float` and `Double` implementations of `signum` handle -0.0
      correctly per IEEE-754.
      
      This, together with "Make Prelude.abs handle -0.0 correctly (#7858)",
      fixes Trac #7858
      
      .
      
      Depends on D145
      Signed-off-by: bernalex's avatarAlexander Berntsen <alexander@plaimi.net>
      
      Test Plan:
      signum of (-0.0) should be (-0.0) not 0.0.
      
      Test program:
      
        main =
          putStrLn $ p ++ " " ++ n
          where
            f = show . signum
            p = f (-0.0 :: Double)
          n = f (0.0 :: Double)
      
      Reviewers: ekmett, hvr, rwbarton, austin
      
      Reviewed By: austin
      
      Subscribers: phaskell, simonmar, relrod, ezyang, carter
      
      Differential Revision: https://phabricator.haskell.org/D148
      
      GHC Trac Issues: #7858
      d9a20573
    • bernalex's avatar
      Make Prelude.abs handle -0.0 correctly (#7858) · 6f6ee6ea
      bernalex authored
      
      
      Summary:
      Make the `Float` and `Double` implementations of `abs` handle -0.0
      correctly per IEEE-754.
      
      abs (-0.0::Float) and abs (-0.0::Double) previously returned -0.0, when
      they should return 0.0. This patch fixes this.
      Signed-off-by: bernalex's avatarAlexander Berntsen <alexander@plaimi.net>
      
      Test Plan: abs (-0.0::Double) should = 0.0 instead of (-0.0)
      
      Reviewers: ekmett, hvr, austin, rwbarton
      
      Reviewed By: austin, rwbarton
      
      Subscribers: phaskell, trofi, simonmar, relrod, ezyang, carter
      
      Differential Revision: https://phabricator.haskell.org/D145
      
      GHC Trac Issues: #7858
      6f6ee6ea
  7. 18 Aug, 2014 1 commit
  8. 17 Aug, 2014 1 commit
    • Herbert Valerio Riedel's avatar
      Workaround GCC `__ctzdi2` intrinsic linker errors · 6375934b
      Herbert Valerio Riedel authored
      On Linux/i386 the 64bit `__builtin_ctzll()` instrinsic doesn't get
      inlined by GCC but rather a short `__ctzdi2` runtime function is
      inserted when needed into compiled object files.
      
      This causes failures for the four test-cases
      
        TEST="T8639_api T8628 dynCompileExpr T5313"
      
      with error messages of the kind
      
        dynCompileExpr: .../libraries/ghc-prim/dist-install/build/libHSghcpr_BE58KUgBe9ELCsPXiJ1Q2r.a: unknown symbol `__ctzdi2'
        dynCompileExpr: dynCompileExpr: unable to load package `ghc-prim'
      
      This workaround forces GCC on 32bit x86 to to express `hs_ctz64` in
      terms of the 32bit `__builtin_ctz()` (this is no loss, as there's no
      64bit BSF instruction on i686 anyway) and thus avoid the problematic
      out-of-line runtime function.
      
      Note: `__builtin_ctzll()` is used since
            e0c1767d (re #9340)
      6375934b
  9. 14 Aug, 2014 1 commit
    • Herbert Valerio Riedel's avatar
      Implement new CLZ and CTZ primops (re #9340) · e0c1767d
      Herbert Valerio Riedel authored
      This implements the new primops
      
        clz#, clz32#, clz64#,
        ctz#, ctz32#, ctz64#
      
      which provide efficient implementations of the popular
      count-leading-zero and count-trailing-zero respectively
      (see testcase for a pure Haskell reference implementation).
      
      On x86, NCG as well as LLVM generates code based on the BSF/BSR
      instructions (which need extra logic to make the 0-case well-defined).
      
      Test Plan: validate and succesful tests on i686 and amd64
      
      Reviewers: rwbarton, simonmar, ezyang, austin
      
      Subscribers: simonmar, relrod, ezyang, carter
      
      Differential Revision: https://phabricator.haskell.org/D144
      
      GHC Trac Issues: #9340
      e0c1767d
  10. 11 Aug, 2014 1 commit
  11. 10 Aug, 2014 2 commits
  12. 09 Aug, 2014 3 commits
  13. 08 Aug, 2014 1 commit
    • Simon Peyton Jones's avatar
      Implement the final change to INCOHERENT from Trac #9242 · dff0623d
      Simon Peyton Jones authored
      The change here is to make INCOHERENT slightly more permissive:
      
        if the selected candidate is incoherent
        then ignore all unifying candidates
      
      This allows us to move the {-# INCOHERENT #-} pragma from
        from   instance Typeable (f a)
        to     Typeable (n:Nat) and Typable (s:Symbol)
      where it belongs, and where Trac #9242 said it should be.
      
      I don't think this will affect anyone.
      
      I've updated the user manual.
      dff0623d
  14. 05 Aug, 2014 2 commits
    • Edward Z. Yang's avatar
      Filter out null bytes from trace, and warn accordingly, fixing #9395. · d360d440
      Edward Z. Yang authored
      
      
      Summary:
      Previously, if you ran trace "foo\0bar", the output was truncated so
      that everything after the null byte was omitted.  This was terrible.
      Now we filter out null bytes, and emit an extra trace saying that
      null bytes were filtered out.
      
      NB: we CANNOT fix debugBelch, because all printf variants *always*
      respect null bytes, even if you're using string precision such as
      %.*s.  The alternative would have been to introduce a new function
      debugRawBelch which did not use format strings and took an explicit
      string length, but I decided we generally should avoid putting null
      bytes in our trace messages, and warn the user.
      Signed-off-by: default avatarEdward Z. Yang <ezyang@cs.stanford.edu>
      
      Test Plan: validate
      
      Reviewers: hvr, austin
      
      Subscribers: simonmar, relrod, ezyang, carter
      
      Differential Revision: https://phabricator.haskell.org/D121
      
      GHC Trac Issues: #9395
      d360d440
    • Edward Z. Yang's avatar
      Package keys (for linking/type equality) separated from package IDs. · 66218d15
      Edward Z. Yang authored
      
      
      This patch set makes us no longer assume that a package key is a human
      readable string, leaving Cabal free to "do whatever it wants" to allocate
      keys; we'll look up the PackageId in the database to display to the user.
      This also means we have a new level of qualifier decisions to make at the
      package level, and rewriting some Safe Haskell error reporting code to DTRT.
      
      Additionally, we adjust the build system to use a new ghc-cabal output
      Make variable PACKAGE_KEY to determine library names and other things,
      rather than concatenating PACKAGE/VERSION as before.
      
      Adds a new `-this-package-key` flag to subsume the old, erroneously named
      `-package-name` flag, and `-package-key` to select packages by package key.
      
      RFC: The md5 hashes are pretty tough on the eye, as far as the file
      system is concerned :(
      
      ToDo: safePkg01 test had its output updated, but the fix is not really right:
      the rest of the dependencies are truncated due to the fact the we're only
      grepping a single line, but ghc-pkg is wrapping its output.
      
      ToDo: In a later commit, update all submodules to stop using -package-name
      and use -this-package-key.  For now, we don't do it to avoid submodule
      explosion.
      Signed-off-by: default avatarEdward Z. Yang <ezyang@cs.stanford.edu>
      
      Test Plan: validate
      
      Reviewers: simonpj, simonmar, hvr, austin
      
      Subscribers: simonmar, relrod, carter
      
      Differential Revision: https://phabricator.haskell.org/D80
      66218d15
  15. 04 Aug, 2014 3 commits