1. 12 Aug, 2015 5 commits
    • thomie's avatar
      Pretty: show rational as is (#10735) · 85bf76a8
      thomie authored
      Following libraries/pretty. I'm not sure why it converted to Double
      before.
      
      This function isn't used by GHC itself. It is exported from these two
      places:
        * compiler/utils/Outputable
        * libraries/template-haskell/Language/Haskell/TH/PprLib.hs
      85bf76a8
    • thomie's avatar
      Pretty: fix a broken invariant (#10735) · 5d57087e
      thomie authored
      This is a backport of a bug fix from
      6cfbd0444981c074bae10a3cf72733bcb8597bef in libraries/pretty:
      
          Fix a broken invariant
          Patch from #694,  for the problem "empty is an identity for <> and $$" is
          currently broken by eg. isEmpty (empty<>empty)"
      5d57087e
    • thomie's avatar
      Pretty: fix potential bad formatting of error message (#10735) · bcfae08c
      thomie authored
      This is a backport of a bug fix by Benedikt Huber for the same problem
      in the pretty library (#1337), from commit
      8d8866a8379c2fe8108ef034893c59e06d5e752f. The original explanation for
      the fix is attached below.
      
      Ticket #1776 originally reported an infinite loop when printing error
      message. This promptly got fixed in:
      
        commit 2d52ee06
        Author: simonpj@microsoft.com <unknown>
        Date:   Thu Mar 1 11:45:13 2007 +0000
      
            Do not go into an infinite loop when pretty-printer finds a
            negative indent (Trac #1176)
      
      SPJ reports in the ticket: "So infinite loop is fixed, but the bad
      formatting remains. I've added a test, tcfail177."
      
      tcfail177 however hasn't triggered the formatting problem for years (as
      Ian reported in c9e0e606).
      
      This patch updates the test to a version that at least still failed with
      ghc-7.0 (from #1776#comment:7).
      
      -------------------
      
      From https://mail.haskell.org/pipermail/libraries/2008-June/010013.html,
      by Benedikt Huber:
      
          Concerning ticket #1337, we have to change the formal specification of
          fill (it doesn't match the implementation):
      
          -- Current Specification:
          --   fill []  = empty
          --   fill [p] = p
          --   fill (p1:p2:ps) = oneLiner p1 <#> nest (length p1)
          --                                          (fill (oneLiner p2 : ps))
          --                     `union`
          --                      p1 $$ fill ps
      
          Problem 1: We want to `unnest' the second argument of (p1 $$ fill ps),
          but not the first one
      
          In the definition above we have e.g.
      
          > getSecondLayout $
          >   fillDef False [text "a", text "b", text "a"]
      
          >> text "ab"; nilabove; nest -1; text "a"; empty
          >> |ab|
          >> |.a|
      
          Problem 2: The overlapping $$ should only be used for those layouts of
          p1 which aren't one liners (otherwise violating the invariant "Left
          union arg has shorter first line").
      
          I suggest the following specification (i believe it almost matches the
          current implementation, modulo [fillNB: fix bug #1337] (see below):
      
          -- Revised Specification:
          --   fill g docs = fill' 0 docs
          --   gap g       = if g then 1 else 0
          --   fill' n []  = []
          --   fill' n [p] = [p]
          --   fill' n (p1:p2:ps) =
          --      oneLiner p1 <g> (fill' (n+length p1+gap g) (oneLiner p2 : ps))
          --        `union`
          --     (p1 $*$ nest (-n) (fill' g ps))
          --
          -- $*$ is defined for layouts (One-Layout Documents) as
          --
          -- layout1 $*$ layout2 | isOneLiner layout1 = layout1 $+$ layout2
          --                     | otherwise          = layout1 $$ layout2
      
          I've also implemented the specification in HughesPJQuickCheck.hs,
          and checked them against the patched pretty printer.
      
          Concerning Bug #1337:
          ~~~~~~~~~~~~~~~~~~~~~
      
          If the above formal specification is fine, it is easy to fix:
          elide the nests of (oneLiner p2) [see attached patch, record bug #1337].
      
          > PrettyPrint(0) $ ./Bug1337
          > ....ab
          > ...c
      
          The (long) explanation follows below.
      
          <snip/>
      
          ===========================================================
          Explanation of Bug #1337:
      
          Consider
      
          > fcat [ nest 1 $ text "a", nest 2 $ text "b", text "c"]
      
          --> expected: (nest 1; text "a"; text "b"; nest -3; "c")
          --> actual  : (nest 1; text "a"; text "b"; nest -5; "c")
      
          Reduction:
          === (nest 1; text a) <> (fill (-2) (p2:ps))
          ==>                     (nest 2 (text "b") $+$ text "c")
          ==>                     (nest 2 (text "b")) `nilabove`
                                  (nest (-3) (text "c"))
          ==> (nest 1; text a; text b; nest -5 c)
      
          The problem is that if we decide to layout (p1:p2:ps) as
      
          | p1 p2
          | ps
      
          (call it layout A), then we want to have
      
          > (p1 <> p2) $+$ ps.
      
          But following law <n6> this means that
      
          > fcat_A [p1:nest k p2:ps]
      
          is equivalent to
      
          > fcat_A [p1,p2,ps]
      
          so the nest of p2 has to be removed.
      
          This is somewhat similar to bug #667, but easier to fix
          from a semantic point of view:
          p1,p2 and ps are distinct layouts - we only have to preserve the
          individual layouts, and no combinations of them.
      bcfae08c
    • thomie's avatar
      Pretty: bugfix fillNB (#10735) · 67576ddc
      thomie authored
      This is a backport of a bug fix by Benedikt Huber (#2393), from commit
      1e50748beaa4bd2281d323b18ea51c786bba04a1 in the pretty library.
      
      From https://mail.haskell.org/pipermail/libraries/2008-June/009991.html:
      
          Law <l1> states that
      
          > sep (ps++[empty]++qs)   = sep (ps ++ qs)
          >         ...ditto hsep, hcat, vcat, fill...
      
          In the current implementation, this fails for the paragraph fill
          variants.
      
          > render' $ fsep [ text "c", text "c",empty, text "c", text "b"]
          >   where render' = renderStyle (Style PageMode 7 1.4)
          >> c c c
          >>     b
      67576ddc
    • Herbert Valerio Riedel's avatar
      Bump template-haskell to new major version 2.11 · 8cce7e4b
      Herbert Valerio Riedel authored
      ...since we already have introduced backward compat breakage
      that breaks packages such as QuickCheck-2.8.1
      
      Differential Revision: https://phabricator.haskell.org/D1144
      8cce7e4b
  2. 11 Aug, 2015 2 commits
  3. 10 Aug, 2015 1 commit
  4. 09 Aug, 2015 3 commits
  5. 08 Aug, 2015 2 commits
  6. 07 Aug, 2015 5 commits
  7. 06 Aug, 2015 9 commits
    • eir@cis.upenn.edu's avatar
      Rejigger OSMem.my_mmap to allow building on Mac · bc43d23a
      eir@cis.upenn.edu authored
      Previously, the prot and flags variables were set but never used
      on Mac (darwin). This caused a warning, and the build setup stopped
      compilation. This commit is intended simply to omit these variables
      when building with darwin_HOST_OS set. No change in behavior on any
      platform is intended.
      bc43d23a
    • rwbarton's avatar
    • Ben Gamari's avatar
      llvmGen: Rework LLVM mangler · 600b153a
      Ben Gamari authored
      The LLVM mangler does not currently transform AVX instructions on x86-64
      platforms, due to a missing #include. Also, it is significantly more
      complicated than necessary, due to the file into sections (not needed
      anymore), and is sensitive to the details of the whitespace in the
      assembly.
      
      Author: dobenour
      
      Test Plan: Validation on x86-64, x86-32, and ARM
      
      Reviewers: austin
      
      Subscribers: thomie, bgamari, rwbarton
      
      Differential Revision: https://phabricator.haskell.org/D1034
      
      GHC Trac Issues: #10394
      600b153a
    • Fumiaki Kinoshita's avatar
      base: Add instances · 97843d0b
      Fumiaki Kinoshita authored
      This patch adds following instances:
      
      * Foldable ZipList
      * Traversable ZipList
      * Functor Complex
      * Applicative Complex
      * Monad Complex
      * Foldable Complex
      * Traversable Complex
      * Generic1 Complex
      * Monoid a => Monoid (Identity a)
      * Storable ()
      
      Reviewers: ekmett, fumieval, hvr, austin
      
      Subscribers: thomie, #core_libraries_committee
      
      Projects: #core_libraries_committee
      
      Differential Revision: https://phabricator.haskell.org/D1049
      
      GHC Trac Issues: #10609
      97843d0b
    • Ben Gamari's avatar
      Ensure DynFlags are consistent · eca9a1a1
      Ben Gamari authored
      While we have always had makeDynFlagsConsistent to enforce a variety of
      consistency invariants on DynFlags, it hasn't been widely used.
      GHC.Main, for instance, ignored it entirely. This leads to issues like
      Trac #10549, where an OPTIONS_GHC pragma introduced an inconsistency,
      leading to a perplexing crash later in compilation.
      
      Here I add consistency checks in GHC.Main.set{Session,Program}DynFlags,
      closing this hole.
      
      Fixes #10549.
      
      Test Plan: Validate with T10549
      
      Reviewers: austin
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D1128
      
      GHC Trac Issues: #10549
      eca9a1a1
    • Simon Peyton Jones's avatar
      Test Trac #10742 · 64dba511
      Simon Peyton Jones authored
      64dba511
    • Simon Peyton Jones's avatar
      T8968-1 and -3 should pass · 294553e9
      Simon Peyton Jones authored
      See Trac #9953, comment:22.
      294553e9
    • Simon Peyton Jones's avatar
      Comments only · cc07c401
      Simon Peyton Jones authored
      cc07c401
    • Simon Peyton Jones's avatar
      Coments only · 75f5f23b
      Simon Peyton Jones authored
      75f5f23b
  8. 05 Aug, 2015 13 commits