1. 01 Apr, 2017 8 commits
  2. 31 Mar, 2017 4 commits
    • rwbarton's avatar
      Fix space leaks in simplifier (#13426) · e13419c5
      rwbarton authored
      The Join points commit (8d5cf8bf) introduced a space leak
      somewhere in the simplifier. The extra strictness added in this commit
      fixes the leak. Unfortunately I don't really understand the details.
      Unfortunately, the extra strictness appears to result in more overall
      allocations in some cases, even while the peak heap size decreases in others.
      Test Plan: harbormaster
      Reviewers: austin, bgamari
      Reviewed By: bgamari
      Subscribers: thomie
      Differential Revision: https://phabricator.haskell.org/D3399
    • Ben Gamari's avatar
      Clean up coreView/tcView. · 6575f4b6
      Ben Gamari authored
      In Core, Constraint should be considered fully equal to
      TYPE LiftedRep, in all ways. Accordingly, coreView should
      unwrap Constraint to become TYPE LiftedRep. Of course, this
      would be a disaster in the type checker.
      So, where previously we used coreView in both the type checker
      and in Core, we now have coreView and tcView, which differ only
      in their treatment of Constraint.
      Historical note: once upon a past, we had tcView distinct from
      coreView. Back then, it was because newtypes were unwrapped in
      Core but not in the type checker. The distinction is back, but
      for a different reason than before.
      This had a few knock-on effects:
       * The Typeable solver must explicitly handle Constraint to ensure
         that we produce the correct evidence.
       * TypeMap now respects the Constraint/Type distinction
      Finished by: bgamari
      Test Plan: ./validate
      Reviewers: simonpj, austin, bgamari
      Reviewed By: simonpj
      Subscribers: rwbarton, thomie
      Differential Revision: https://phabricator.haskell.org/D3316
    • Simon Peyton Jones's avatar
      Refactor simplExpr (Type ty) · 29645274
      Simon Peyton Jones authored
      This small refactoring, provoked by comment:18 on Trac #13426,
      makes it so that simplExprF never gets a (Type ty) expression to
      simplify, which in turn means that calls to exprType on its argument
      will always succeed.
      No change in behaviour.
    • Joachim Breitner's avatar
      Disable bogus lint checks about levity polimorphic coerions · 03c7dd09
      Joachim Breitner authored
      These checks, introduced in cea71418
      hugely inflated build logs, which incapitated perf.haskell.org.
      According to Richard, the checks are useless and wrong, and that Ben
      plans to investigate.
      Until that happens, I remove them from the code.
  3. 30 Mar, 2017 2 commits
    • David Feuer's avatar
      Deriving for phantom and empty types · 69f070d8
      David Feuer authored
      Make `Functor`, `Foldable`, and `Traversable` take advantage
      of the case where the type parameter is phantom. In this case,
      * `fmap _ = coerce`
      * `foldMap _ _ = mempty`
      * `traverse _ x = pure (coerce x)`
      For the sake of consistency and especially simplicity, make other types
      with no data constructors behave the same:
      * `fmap _ x = case x of`
      * `foldMap _ _ = mempty`
      * `traverse _ x = pure (case x of)`
      Similarly, for `Generic`,
      * `to x = case x of`
      * `from x = case x of`
      Give all derived methods for types without constructors appropriate
      arities. For example,
          compare _ _ = error ...
      rather than
          compare = error ...
      Fixes #13117 and #13328
      Reviewers: austin, bgamari, RyanGlScott
      Reviewed By: RyanGlScott
      Subscribers: ekmett, RyanGlScott, rwbarton, thomie
      Differential Revision: https://phabricator.haskell.org/D3374
    • Gabor Greif's avatar
      Typos in comments [ci skip] · ff7094e5
      Gabor Greif authored
  4. 29 Mar, 2017 14 commits
    • Sergei Trofimovich's avatar
      unique: fix UNIQUE_BITS crosscompilation (Trac #13491) · 01b062ec
      Sergei Trofimovich authored
      The #13491
       manifests best when we try to crosscompile
      from 32-bit (i386-linux) to 64-bit (powerpc64-linux)
          ./configure --target=powerpc64-unknown-linux-gnu
      The build fails at assembly time:
        "inplace/bin/ghc-stage1" ...  -c rts/StgStartup.cmm
          /tmp/ghc19687_0/ghc_4.s: Assembler messages:
          /tmp/ghc19687_0/ghc_4.s:11:0: error:
               Error: unknown pseudo-op: `.l'
          11 | .L<\x00>4:
             | ^
      That happens because UNIQUE_BITS is defined in terms
      of WORD_SIZE_IN_BITS macro:
          #define UNIQUE_BITS (WORD_SIZE_IN_BITS - 8)
      WORD_SIZE_IN_BITS is 64 bits (equals to target value)
      while ghc-stage1 is still running on i386-linux
      The fix is to stop relying on target macros and use
      host's 'sizeof (HsInt)' and 'finiteBitSize' way to
      determine unique layout.
      Signed-off-by: default avatarSergei Trofimovich <slyfox@gentoo.org>
      Test Plan: build i386-to-powerpc64 crosscompiler
      Reviewers: rwbarton, austin, bgamari
      Reviewed By: bgamari
    • Matthías Páll Gissurarson's avatar
      Show valid substitutions for typed holes · 26c95f46
      Matthías Páll Gissurarson authored
      The idea is to implement a mechanism similar to PureScript, where they
      suggest which identifiers in scope would fit the given hole. In
      PureScript, they use subsumption (which is what we would like here as
      well). For subsumption, we would have to check each type in scope
      whether the hole is a subtype of the given type, but that would require
      `tcSubType` and constraint satisfiability checking. Currently,
      `TcSimplify` uses a lot of functions from `TcErrors`, so that would
      require more of a rewrite, I will hold on with that for now, and submit
      the more simpler type equality version.
      As an example, consider
      ps :: String -> IO ()
      ps = putStrLn
      ps2 :: a -> IO ()
      ps2 _ = putStrLn "hello, world"
      main :: IO ()
      main = _ "hello, world"
      The results would be something like
          • Found hole: _ :: [Char] -> IO ()
          • In the expression: _
            In a stmt of a 'do' block: _ "hello, world"
            In the expression:
              do _ "hello, world"
          • Relevant bindings include
              main :: IO () (bound at test.hs:13:1)
              ps :: String -> IO () (bound at test.hs:7:1)
              ps2 :: forall a. a  -> IO () (bound at test.hs:10:1)
            Valid substitutions include
              putStrLn :: String
                          -> IO () (imported from ‘Prelude’ at
                                    (and originally defined in
              putStr :: String
                        -> IO () (imported from ‘Prelude’ at
                                  (and originally defined in ‘System.IO’))
      We'd like here for ps2 to be suggested as well, but for that we require
      Reviewers: austin, bgamari, dfeuer, mpickering
      Reviewed By: dfeuer, mpickering
      Subscribers: mpickering, Wizek, dfeuer, rwbarton, thomie
      Differential Revision: https://phabricator.haskell.org/D3361
    • Moritz Angermann's avatar
      Various patches to support android cross compilation · 924a65fc
      Moritz Angermann authored
      - Better test for SHT_INIT_ARRAY than openbsd_HOST_OS
        This is actually bens patch:
      - linux-android defines.
      - No need for -lpthread on OSAndroid
        However, I’m confused why we do not use the AC NEED_PTHREAD_LIB
        value here?
      - Use mmap on android
      - Support `none` vendor.
      Reviewers: austin, hvr, bgamari, erikd, simonmar
      Reviewed By: bgamari
      Subscribers: rwbarton, thomie, erikd
      Differential Revision: https://phabricator.haskell.org/D3356
    • Moritz Angermann's avatar
      Check TargetPlatform instead of HostPlatform for leading underscore · 81f5b6ec
      Moritz Angermann authored
      Reviewers: austin, hvr, rwbarton, bgamari
      Reviewed By: rwbarton, bgamari
      Subscribers: rwbarton, thomie, erikd
      Differential Revision: https://phabricator.haskell.org/D3348
    • Matthew Pickering's avatar
      Allow operators as record pattern synonym fields · 154d224a
      Matthew Pickering authored
      Fixes #13454
      Reviewers: austin, bgamari, dfeuer
      Reviewed By: dfeuer
      Subscribers: RyanGlScott, rwbarton, thomie
      Differential Revision: https://phabricator.haskell.org/D3379
    • Matthew Pickering's avatar
      Print module when dumping rules · 04ea4c3f
      Matthew Pickering authored
      It is sometimes hard to find where a rule is defined. Printing the
      module where it comes from will make it much easier to find.
      Reviewers: austin, bgamari
      Reviewed By: bgamari
      Subscribers: rwbarton, thomie
      Differential Revision: https://phabricator.haskell.org/D3378
    • ruperthorlick's avatar
      Fixed error messages for RecursiveDo (#8501) · 5856c564
      ruperthorlick authored
      Changes in a few different places to catch several different
      types of error related to RecursiveDo
      Signed-off-by: ruperthorlick's avatarRupert Horlick <ruperthorlick@gmail.com>
      Test Plan: Three test cases, with further tests in comments
      Reviewers: austin, bgamari
      Reviewed By: bgamari
      Subscribers: thomie
      Differential Revision: https://phabricator.haskell.org/D3271
    • Ben Gamari's avatar
      base: Check for path separators chars in openTempFile' template string · b04ded8f
      Ben Gamari authored
      This fixes #13489.
    • Ben Gamari's avatar
      testsuite: More 32-bit performance changes · fb7e5bd3
      Ben Gamari authored
    • Simon Marlow's avatar
      Fix scc001 · 5ebf83e0
      Simon Marlow authored
    • Simon Marlow's avatar
      cg057: accept output · 01e12987
      Simon Marlow authored
    • Simon Peyton Jones's avatar
      Fix ASSERT failure in TcErrors · f88ac374
      Simon Peyton Jones authored
      This fixes Trac #13494, by improving
         commit e0ad55f8
         Author: Simon Peyton Jones <simonpj@microsoft.com>
         Date:   Mon Mar 27 10:32:08 2017 +0100
         Fix error-message suppress on given equalities
      which in turn was a fix to #13446
    • Simon Peyton Jones's avatar
      Add a couple of HasDebugCallStack contexts · 60d338f5
      Simon Peyton Jones authored
      Just for future (and past) debugging...
    • Simon Peyton Jones's avatar
      Allow unbound Refl binders in a RULE · 8674883c
      Simon Peyton Jones authored
      Trac #13410 was failing because we had a RULE with a binder
         (c :: t~t)
      and the /occurrences/ of c on the LHS were being optimised to Refl,
      leaving a binder that would not be filled in by matching the LHS
      of the rule.
      I flirted with trying to ensure that occurrences (c :: t~t) are
      not optimised to Relf, but that turned out to be fragile; it was
      being done, for good reasons, in multiple places, including
        - TyCoRep.substCoVarBndr
        - Simplify.simplCast
        - Corecion.mkCoVarCo
      So I fixed it in one place by making Rules.matchN deal happily
      with an unbound binder (c :: t~t).  Quite easy.  See "Coercion
      variables" in Note [Unbound RULE binders] in Rules.
      In addition, I needed to make CoreLint be happy with an bound
      RULE binder that is a Relf coercion variable
      In debugging this, I was perplexed that occurrences of a variable
      (c :: t~t) mysteriously turned into Refl.  I found out how it
      was happening, and decided to move it:
      * In TyCoRep.substCoVarBndr, do not substitute Refl for a
        binder (c :: t~t).
      * In mkCoVarCo do not optimise (c :: t~t) to Refl.
      Instead, we do this optimisation in optCoercion (specifically
      opt_co4) where, surprisingly, the optimisation was /not/
      being done.  This has no effect on what programs compile;
      it just moves a relatively-expensive optimisation to optCoercion,
      where it seems more properly to belong.  It's actually not clear
      to me which is really "better", but this way round is less
      One small simplifying refactoring
      * Eliminate TyCoRep.substCoVarBndrCallback, which was only
        called locally.
  5. 28 Mar, 2017 6 commits
  6. 27 Mar, 2017 6 commits
    • Richard Eisenberg's avatar
      Fix #13458 · cea71418
      Richard Eisenberg authored
      Core Lint shouldn't check representations of types that don't
      have representations.
      test case: typecheck/should_compile/T13458
    • Matthew Pickering's avatar
    • Simon Peyton Jones's avatar
      Remove utterly bogus code · de4723fd
      Simon Peyton Jones authored
      The commit 67465497
          Author: Richard Eisenberg <eir@cis.upenn.edu>
          Date:   Fri Dec 11 18:19:53 2015 -0500
          Add kind equalities to GHC.
      added this entirely bogus code to Simplify.simplLam:
          env' | Coercion co <- arg
               = extendCvSubst env bndr co
               | otherwise
               = env
      It's bogus because 'co' is an 'InCoercion', but a CvSubst should have
      only OutCoercions in it.  Moreover, completeBind does the job nicely.
      This led to an ASSERT failure in an experimental branch; but I have
      not got a repro case that works on HEAD.  But still, the patch deletes
      code and fixes a bug, so it must be good.
      The only mystery is why Richard added it in the first place :-).
      I hope I'm not missing anything.  But it validates fine.
    • Simon Peyton Jones's avatar
      Fix 'unsolved constraints' in GHCi · feca929b
      Simon Peyton Jones authored
      In initTc, if the computation fails with an exception, we
      should not complain about unsolved constraints.
      Fixes Trac #13466.
    • Simon Peyton Jones's avatar
      Fix error-message suppress on given equalities · e0ad55f8
      Simon Peyton Jones authored
      I'd got the logic slightly wrong when reporting type errors
      for insoluble 'given' equalities.  We suppress insoluble givens
      under some circumstances (see Note [Given errors]), but we then
      suppressed subsequent 'wanted' errors because the (suppressed)
      'given' error "won".  Result: no errors at all :-(.
      This patch fixes it and
       - Renames TcType.isTyVarUnderDatatype to the more
         perspicuous TcType.isInsolubleOccursCheck
      In doing this I realise that I don't understand why we need
      to keep the insolubles partitioned out separately at all...
      but that is for another day.
    • Simon Peyton Jones's avatar
      Fix explicitly-bidirectional pattern synonyms · 7c7479d0
      Simon Peyton Jones authored
      This partly fixes Trac #13441, at least for the explicitly
      bidirectional case.
      See Note [Checking against a pattern signature], the part about
      "Existential type variables".
      Alas, the implicitly-bidirectional case is still not quite right, but
      at least there is a workaround by making it explicitly bidirectional.