1. 15 Jun, 2016 2 commits
    • Simon Peyton Jones's avatar
      Re-add FunTy (big patch) · 77bb0927
      Simon Peyton Jones authored
      With TypeInType Richard combined ForAllTy and FunTy, but that was often
      awkward, and yielded little benefit becuase in practice the two were
      always treated separately.  This patch re-introduces FunTy.  Specfically
      
      * New type
          data TyVarBinder = TvBndr TyVar VisibilityFlag
        This /always/ has a TyVar it.  In many places that's just what
        what we want, so there are /lots/ of TyBinder -> TyVarBinder changes
      
      * TyBinder still exists:
          data TyBinder = Named TyVarBinder | Anon Type
      
      * data Type = ForAllTy TyVarBinder Type
                  | FunTy Type Type
                  |  ....
      
      There are a LOT of knock-on changes, but they are all routine.
      
      The Haddock submodule needs to be updated too
      77bb0927
    • Simon Peyton Jones's avatar
      Revert "Make the Ord Module independent of Unique order" · 70a45893
      Simon Peyton Jones authored
      This reverts commit 0497ee50.
      
      Reason: See Trac #12191.  I'm reverting pending Bartosz's
      investigation of what went wrong.
      70a45893
  2. 14 Jun, 2016 3 commits
  3. 13 Jun, 2016 12 commits
    • niteria's avatar
      Make the Ord Module independent of Unique order · 0497ee50
      niteria authored
      The `Ord Module` instance currently uses `Unique`s for comparison.
      We don't want to use the `Unique` order because it can introduce nondeterminism.
      This switches `Ord ModuleName` and `Ord UnitId` to use lexicographic ordering
      making `Ord Module` deterministic transitively.
      
      I've run `nofib` and it doesn't make a measurable difference.
      
      See also Note [ModuleEnv determinism and performance].
      
      Test Plan:
      ./validate
      run nofib: P112
      
      Reviewers: simonpj, simonmar, austin, bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2030
      
      GHC Trac Issues: #4012
      0497ee50
    • niteria's avatar
      Use UniqFM for SigOf · 586d5581
      niteria authored
      Summary:
      The Ord instance for ModuleName is currently implemented in
      terms of Uniques causing potential determinism problems.
      I plan to change it to use the actual FastStrings and in
      preparation for that I'm switching to UniqFM where it's
      possible (you need *one* Unique per key, and you can't get
      the keys back), so that the performance doesn't suffer.
      
      Test Plan: ./validate
      
      Reviewers: simonmar, austin, ezyang, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2320
      
      GHC Trac Issues: #4012
      586d5581
    • niteria's avatar
      Kill unused foldModuleEnv · 7de776cf
      niteria authored
      With the current implementation, it's nondeterministic
      because Ord Module is nondeterministic.
      7de776cf
    • Simon Peyton Jones's avatar
      Remove some traceTc calls · 8104f7c6
      Simon Peyton Jones authored
      During the kind-checking "knot" we have to be careful not
      to print too eagerly.
      8104f7c6
    • Simon Peyton Jones's avatar
      Beef up isPredTy · 599d912f
      Simon Peyton Jones authored
      isPredTy can be called on ill-kinded types, especially (of course) if
      there is a kind error.  We don't wnat it to crash, but it was, in
      piResultTy.
      
      This patch introduces piResultTy_maybe, and uses it in isPredTy.
      
      Ugh.  I dislike this code.  It's mainly used to know when we should
      print types with '=>', and we should probably have a better way to
      signal that.
      599d912f
    • Simon Peyton Jones's avatar
      Fix the in-scope set for extendTvSubstWithClone · 15fc5281
      Simon Peyton Jones authored
      We'd forgotten the variables free in the kind.
      
      Ditto extendCvSubstWithClone
      15fc5281
    • Simon Peyton Jones's avatar
      Beef up mkNakedCastTy · 1f661281
      Simon Peyton Jones authored
      By spotting Refl coercions we can avoid building an awful
      lot of CastTys.  Simple and effective.
      1f661281
    • Simon Peyton Jones's avatar
      Move the constraint-kind validity check · 35c9de7c
      Simon Peyton Jones authored
      For type synonyms, we need to check that if the RHS has
      kind Constraint, then we have -XConstraintKinds.  For
      some reason this was done in checkValidType, but it makes
      more sense to do it in checkValidTyCon.
      
      I can't remember quite why I made this change; maybe it fixes
      a Trac ticket, but if so I forget which.  But it's a modest
      improvement anyway.
      35c9de7c
    • Simon Peyton Jones's avatar
      Get in-scope set right in top_instantiate · 7afb7adf
      Simon Peyton Jones authored
      ...thereby being able to replace substThetaUnchecked
      with substTheta
      7afb7adf
    • Simon Peyton Jones's avatar
      Tidy up zonkQuantifiedTyVar · c28dde37
      Simon Peyton Jones authored
      I managed to eliminate the strange zonkQuantifiedTyVarOrType,
      which is no longer used.
      c28dde37
    • Simon Peyton Jones's avatar
      Improve typechecking of let-bindings · 15b9bf4b
      Simon Peyton Jones authored
      This major commit was initially triggered by #11339, but it spiraled
      into a major review of the way in which type signatures for bindings
      are handled, especially partial type signatures.  On the way I fixed a
      number of other bugs, namely
         #12069
         #12033
         #11700
         #11339
         #11670
      
      The main change is that I completely reorganised the way in which type
      signatures in bindings are handled. The new story is in TcSigs
      Note [Overview of type signatures].  Some specific:
      
      * Changes in the data types for signatures in TcRnTypes:
        TcIdSigInfo and new TcIdSigInst
      
      * New module TcSigs deals with typechecking type signatures
        and pragmas. It contains code mostly moved from TcBinds,
        which is already too big
      
      * HsTypes: I swapped the nesting of HsWildCardBndrs
        and HsImplicitBndsrs, so that the wildcards are on the
        oustide not the insidde in a LHsSigWcType.  This is just
        a matter of convenient, nothing deep.
      
      There are a host of other changes as knock-on effects, and
      it all took FAR longer than I anticipated :-).  But it is
      a significant improvement, I think.
      
      Lots of error messages changed slightly, some just variants but
      some modest improvements.
      
      New tests
      
      * typecheck/should_compile
          * SigTyVars: a scoped-tyvar test
          * ExPat, ExPatFail: existential pattern bindings
          * T12069
          * T11700
          * T11339
      
      * partial-sigs/should_compile
          * T12033
          * T11339a
          * T11670
      
      One thing to check:
      
      * Small change to output from ghc-api/landmines.
        Need to check with Alan Zimmerman
      15b9bf4b
    • Simon Peyton Jones's avatar
      Kill off redundant SigTv check in occurCheckExpand · d25cb61a
      Simon Peyton Jones authored
      This patch simply deletes code, the SigTv check in
      occurCheckExpand.  As the new comment says
      
      In the past we also rejected a SigTv matched with a non-tyvar
      But it is wrong to reject that for Givens;
      and SigTv is in any case handled separately by
         - TcUnify.checkTauTvUpdate (on-the-fly unifier)
         - TcInteract.canSolveByUnification (main constraint solver)
      d25cb61a
  4. 11 Jun, 2016 1 commit
  5. 10 Jun, 2016 6 commits
  6. 09 Jun, 2016 10 commits
    • Facundo Domínguez's avatar
      Improve the error messages for static forms. · e9dfb6e5
      Facundo Domínguez authored
      Now the message explains why closed variables are not closed when
      encountered in the body of (static ...).
      
      This required adding to the local environment the free variables of
      the local bindings in scope. Thus we can analyze and explain why a
      variable is not closed when encountered.
      
      Test Plan: ./validate
      
      Reviewers: austin, simonpj, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: mboes, thomie
      
      Differential Revision: https://phabricator.haskell.org/D2167
      
      GHC Trac Issues: #12003
      e9dfb6e5
    • Tamar Christina's avatar
      Fix Ticky histogram on Windows · b020db2a
      Tamar Christina authored
      Summary:
      The histogram types are defined in `Ticky.c` as `StgInt` values.
      
      ```
      EXTERN StgInt RET_NEW_hst[TICKY_BIN_COUNT] INIT({0});
      EXTERN StgInt RET_OLD_hst[TICKY_BIN_COUNT] INIT({0});
      EXTERN StgInt RET_UNBOXED_TUP_hst[TICKY_BIN_COUNT] INIT({0});
      ```
      
      which means they'll be `32-bits` on `x86` and `64-bits` on `x86_64`.
      
      However the `bumpHistogram` in `StgCmmTicky` is incrementing them as if
      they're a `cLong`. A long on Windows `x86_64` is `32-bit`.
      
      As such when then value for the `_hst_1` is being set what it's actually doing
      is setting the value of the high bits of the first entry.
      
      This ends up giving us `0b‭100000000000000000000000000000000‬` or `4294967296`
      as is displayed in the ticket on #8308.
      
      Since `StgInt` is defined using the `WORD` size. Just use that directly in
      `bumpHistogram`.
      
      Also since `cLong` is no longer used after this commit it will also be dropped.
      
      Test Plan: make TEST=T8308
      
      Reviewers: mlen, jstolarek, bgamari, thomie, goldfire, simonmar, austin
      
      Reviewed By: bgamari, thomie
      
      Subscribers: #ghc_windows_task_force
      
      Differential Revision: https://phabricator.haskell.org/D2318
      
      GHC Trac Issues: #8308
      b020db2a
    • niteria's avatar
      Remove Ord AltCon · 77b8c29b
      niteria authored
      It uses Ord DataCon which uses Ord Unique which is
      nondeterministic
      
      GHC Trac: #4012
      77b8c29b
    • niteria's avatar
      Remove Ord PatSyn · b2624ee3
      niteria authored
      It's implemented in terms of Unique which is nondeterministic
      
      GHC Trac: #4012
      b2624ee3
    • niteria's avatar
      Remove Ord Class · 70e0a564
      niteria authored
      It was implemented in terms of Unique which is nondeterministic
      
      GHC Trac: #4012
      70e0a564
    • niteria's avatar
      Remove Ord (CoAxiom br) · 68c1c29d
      niteria authored
      It was implemented in terms of Uniques, but fortunately it's unused
      so we can remove it.
      
      GHC Trac: #4012
      68c1c29d
    • niteria's avatar
      Implement Eq TyCon directly · ceaf7f10
      niteria authored
      Eq TyCon is defined in terms of Ord TyCon, but we want to
      remove Ord TyCon, because it's implemented in terms of unique
      comparison, which is nondeterministic.
      
      GHC Trac: #4012
      ceaf7f10
    • Edward Z. Yang's avatar
      Fix #12076 by inlining trivial expressions in CorePrep. · 11ff1df8
      Edward Z. Yang authored
      Summary:
      This mostly follows the plan detailed by the discussion
      Simon and I had, with one difference: instead of grabbing
      the free variables of the trivial expressions to get the
      embedded Ids, we just use getIdFromTrivialExpr_maybe to extract
      out the Id.  If there is no Id, the expression cannot
      refer to a function (as there are no literal functions)
      and thus we do not need to saturate.
      Signed-off-by: default avatarEdward Z. Yang <ezyang@cs.stanford.edu>
      
      Test Plan: validate
      
      Reviewers: simonpj, austin, bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2309
      
      GHC Trac Issues: #12076
      11ff1df8
    • Edward Z. Yang's avatar
      acb9e85c
    • Edward Z. Yang's avatar
      Fix #12064 by making IfaceClass typechecking more lazy. · 8f6d2927
      Edward Z. Yang authored
      Summary:
      Comes with a test based off of prog006.
      Signed-off-by: default avatarEdward Z. Yang <ezyang@cs.stanford.edu>
      
      Test Plan: validate
      
      Reviewers: simonpj, austin, bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2221
      
      GHC Trac Issues: #12064
      8f6d2927
  7. 08 Jun, 2016 4 commits
  8. 07 Jun, 2016 2 commits
    • niteria's avatar
      Use pprUFM in pprStgLVs · 7d58a978
      niteria authored
      7d58a978
    • niteria's avatar
      Kill varSetElems · 7008515b
      niteria authored
      This eradicates varSetElems from the codebase. This function
      used to introduce nondeterminism.
      I've also documented benign nondeterminism in three places.
      
      GHC Trac: #4012
      7008515b