1. 17 Oct, 2019 3 commits
    • Ben Gamari's avatar
      testsuite: Assert that testsuite ways are known · c4c9904b
      Ben Gamari authored
      This ensures that all testsuite way names given to `omit_ways`,
      `only_ways`, etc. are known ways.
      c4c9904b
    • Richard Eisenberg's avatar
      4efdda90
    • Ben Gamari's avatar
      testsuite: Ensure that makefile tests get run · b15a7fb8
      Ben Gamari authored
      Previously `makefile_test` and `run_command` tests could easily end up
      in a situation where they wouldn't be run if the user used the
      `only_ways` modifier. The reason is to build the set of a ways to run
      the test in we first start with a candidate set determined by the test
      type (e.g. `makefile_test`, `compile_run`, etc.) and then filter that
      set with the constraints given by the test's modifiers.
      
      `makefile_test` and `run_command` tests' candidate sets were simply
      `{normal}`, and consequently most uses of `only_ways` would result in
      the test being never run.
      
      To avoid this we rather use all ways as the candidate sets for these
      test types. This may result in a few more testcases than we would like
      (given that some `run_command` tests are insensitive to way) but this
      can be fixed by adding modifiers and we would much rather run too many
      tests than too few.
      
      This fixes #16042 and a number of other tests afflicted by the same issue.
      However, there were a few cases that required special attention:
      
       * `T14028` is currently failing and is therefore marked as broken due
         to #17300
      
       * `T-signals-child` is fragile in the `threaded1` and `threaded2` ways
         (tracked in #17307)
      b15a7fb8
  2. 16 Oct, 2019 9 commits
    • Brian Wignall's avatar
      42ebc3f6
    • Ryan Scott's avatar
      Make Coverage.TM a newtype · deb96399
      Ryan Scott authored
      deb96399
    • Ben Gamari's avatar
      hadrian: Introduce enableDebugInfo flavour transformer · 11d4fc50
      Ben Gamari authored
      Also refactor things a bit to eliminate repetition.
      11d4fc50
    • Richard Eisenberg's avatar
      Break up TcRnTypes, among other modules. · 51fad9e6
      Richard Eisenberg authored
      This introduces three new modules:
      
       - basicTypes/Predicate.hs describes predicates, moving
         this logic out of Type. Predicates don't really exist
         in Core, and so don't belong in Type.
      
       - typecheck/TcOrigin.hs describes the origin of constraints
         and types. It was easy to remove from other modules and
         can often be imported instead of other, scarier modules.
      
       - typecheck/Constraint.hs describes constraints as used in
         the solver. It is taken from TcRnTypes.
      
      No work other than module splitting is in this patch.
      
      This is the first step toward homogeneous equality, which will
      rely more strongly on predicates. And homogeneous equality is the
      next step toward a dependently typed core language.
      51fad9e6
    • John Ericson's avatar
      Delete ghctags cabal file · 798037a1
      John Ericson authored
      It came back to life in 381c3ae3 by
      mistake.
      798037a1
    • Sebastian Graf's avatar
      Infer rho-types instead of sigma-types in guard BindStmts and TransStmts · 6ede3554
      Sebastian Graf authored
      In #17343 we saw that we didn't handle the pattern guard `!_ <-
      undefined` correctly: The `undefined` was never evaluated. Indeed,
      elaboration failed to insert the invisible type aruments to `undefined`.
      So `undefined` was trivially a normal-form and in turn never entered.
      
      The problem is that we used to infer a sigma-type for the RHS of the
      guard, the leading qualifiers of which will never be useful in a pattern
      match situation. Hence we infer a rho-type now.
      
      Fixes #17343.
      6ede3554
    • Takenobu Tani's avatar
      testsuite: Add test for #8305 · 19641957
      Takenobu Tani authored
      This is a test for the current algorithm of GHCi command name resolution.
      
      I add this test in preparation for updating GHCi command name resolution.
      
      For the current algorithm, see https://downloads.haskell.org/ghc/latest/docs/html/users_guide/ghci.html#the-ghci-files
      19641957
    • Adithya Kumar's avatar
    • Andreas Klebinger's avatar
      Add loop level analysis to the NCG backend. · 535a88e1
      Andreas Klebinger authored
      For backends maintaining the CFG during codegen
      we can now find loops and their nesting level.
      
      This is based on the Cmm CFG and dominator analysis.
      
      As a result we can estimate edge frequencies a lot better
      for methods, resulting in far better code layout.
      
      Speedup on nofib: ~1.5%
      Increase in compile times: ~1.9%
      
      To make this feasible this commit adds:
      * Dominator analysis based on the Lengauer-Tarjan Algorithm.
      * An algorithm estimating global edge frequences from branch
      probabilities - In CFG.hs
      
      A few static branch prediction heuristics:
      
      * Expect to take the backedge in loops.
      * Expect to take the branch NOT exiting a loop.
      * Expect integer vs constant comparisons to be false.
      
      We also treat heap/stack checks special for branch prediction
      to avoid them being treated as loops.
      535a88e1
  3. 15 Oct, 2019 4 commits
    • Ben Gamari's avatar
      hadrian: Add support for bindist compressors other than Xz · 9c11f817
      Ben Gamari authored
      Fixes #17351.
      9c11f817
    • Alp Mestanogullari's avatar
      a55b8a65
    • Ryan Scott's avatar
      Don't skip validity checks for built-in classes (#17355) · 426b0ddc
      Ryan Scott authored
      Issue #17355 occurred because the control flow for
      `TcValidity.check_valid_inst_head` was structured in such a way that
      whenever it checked a special, built-in class (like `Generic` or
      `HasField`), it would skip the most important check of all:
      `checkValidTypePats`, which rejects nonsense like this:
      
      ```hs
      instance Generic (forall a. a)
      ```
      
      This fixes the issue by carving out `checkValidTypePats` from
      `check_valid_inst_head` so that `checkValidTypePats` is always
      invoked. `check_valid_inst_head` has also been renamed to
      `check_special_inst_head` to reflect its new purpose of _only_
      checking for instances headed by special classes.
      
      Fixes #17355.
      426b0ddc
    • Ryan Scott's avatar
      Refactor some cruft in TcDerivInfer.inferConstraints · a2d3594c
      Ryan Scott authored
      The latest installment in my quest to clean up the code in
      `TcDeriv*`. This time, my sights are set on
      `TcDerivInfer.inferConstraints`, which infers the context for derived
      instances. This function is a wee bit awkward at the moment:
      
      * It's not terribly obvious from a quick glance, but
        `inferConstraints` is only ever invoked when using the `stock` or
        `anyclass` deriving strategies, as the code for inferring the
        context for `newtype`- or `via`-derived instances is located
        separately in `mk_coerce_based_eqn`. But there's no good reason
        for things to be this way, so I moved this code from
        `mk_coerce_based_eqn` to `inferConstraints` so that everything
        related to inferring instance contexts is located in one place.
      * In this process, I discovered that the Haddocks for the auxiliary
        function `inferConstraintsDataConArgs` are completely wrong. It
        claims that it handles both `stock` and `newtype` deriving, but
        this is completely wrong, as discussed above—it only handles
        `stock`. To rectify this, I renamed this function to
        `inferConstraintsStock` to reflect its actual purpose and created
        a new `inferConstraintsCoerceBased` function to specifically
        handle `newtype` (and `via`) deriving.
      
      Doing this revealed some opportunities for further simplification:
      
      * Removing the context-inference–related code from
        `mk_coerce_based_eqn` made me realize that the overall structure
        of the function is basically identical to `mk_originative_eqn`.
        In fact, I was easily able to combine the two functions into a
        single `mk_eqn_from_mechanism` function.
      
        As part of this merger, I now invoke
        `atf_coerce_based_error_checks` from `doDerivInstErrorChecks1`.
      * I discovered that GHC defined this function:
      
        ```hs
        typeToTypeKind = liftedTypeKind `mkVisFunTy` liftedTypeKind
        ```
      
        No fewer than four times in different modules. I consolidated all
        of these definitions in a single location in `TysWiredIn`.
      a2d3594c
  4. 14 Oct, 2019 3 commits
    • Ben Gamari's avatar
      gitlab-ci: Move hadrian-ghc-in-ghci job first · 0ca044fd
      Ben Gamari authored
      This is a very cheap job and can catch a number of "easy" failure modes
      (e.g. missing imports in the compiler). Let's run it first.
      0ca044fd
    • Ryan Scott's avatar
      Mention changes from #16980, #17213 in 8.10.1 release notes · 4aba72d6
      Ryan Scott authored
      The fixes for these issues both have user-facing consequences, so it
      would be good to mention them in the release notes for GHC 8.10.1.
      
      While I'm in town, also mention `UnboxedSums` in the release notes
      entry related to `-fobject-code`.
      4aba72d6
    • Ryan Scott's avatar
      Add docs/users_guide/.log to .gitignore · 78463fc5
      Ryan Scott authored
      When the users guide fails to build (as in #17346), a
      `docs/users_guide/.log` file will be generated with contents that
      look something like this:
      
      ```
      WARNING: unknown config value 'latex_paper_size' in override, ignoring
      /home/rgscott/Software/ghc5/docs/users_guide/ghci.rst:3410: WARNING: u'ghc-flag' reference target not found: -pgmo ?option?
      /home/rgscott/Software/ghc5/docs/users_guide/ghci.rst:3410: WARNING: u'ghc-flag' reference target not found: -pgmo ?port?
      
      Encoding error:
      'ascii' codec can't encode character u'\u27e8' in position 132: ordinal not in range(128)
      The full traceback has been saved in /tmp/sphinx-err-rDF2LX.log, if you want to report the issue to the developers.
      ```
      
      This definitely should not be checked in to version control, so let's
      add this to `.gitignore`.
      78463fc5
  5. 13 Oct, 2019 4 commits
  6. 12 Oct, 2019 8 commits
    • Simon Peyton Jones's avatar
      Do not add a 'solved dict' for quantified constraints · 226d86d2
      Simon Peyton Jones authored
      GHC has a wonderful-but-delicate mechanism for building recursive
      dictionaries by adding a goal to the "solved dictionaries" before
      solving the sub-goals.  See Note [Solved dictionaries] in TcSMonad
      
      Ticket #17267 showed that if you use this mechanism for local
      /quantified/ constraints you can get a loop -- or even unsafe
      coerce.   This patch fixes the bug.
      
      Specifically
      
      * Make TcSMonad.addSolvedDict be conditional on using a
        /top level/ instance, not a quantified one.
      
      * Moreover, we /also/ don't want to add a solved dict
        for equalities (a~b).
      
      * Add lots more comments to Note [Solved dictionaries]
        to explain the above cryptic stuff.
      
      * Extend InstanceWhat to identify those strange built-in
        equality instances.
      
      A couple of other things along the way
      
      * Delete the unused Type.isIPPred_maybe.
      
      * Stop making addSolvedDict conditional on not being an
        impolicit parameter.  This comes from way back. But
        it's irrelevant now because IP dicts are never solved
        via an instance.
      226d86d2
    • Simon Peyton Jones's avatar
      Fix validity checking for inferred types · c50e4c92
      Simon Peyton Jones authored
      GHC is suposed to uphold the principle that an /inferred/ type
      for a let-binding should obey the rules for that module.  E.g.
      we should only accept an inferred higher rank type if we have
      RankNTypes on.
      
      But we were failing to check this: TcValidity.checkValidType
      allowed arbitrary rank for inferred types.
      
      This patch fixes the bug.  It might in principle cause some breakage,
      but if so that's good: the user should add RankNTypes and/or a
      manual signature.  (And almost every package has explicit user
      signatures for all top-level things anyway.)  Let's see.
      
      Fixes #17213.
      
      Metric Decrease:
          T10370
      c50e4c92
    • Ryan Scott's avatar
      Use newDFunName for both manual and derived instances (#17339) · 0a338264
      Ryan Scott authored
      Issue #17339 was caused by using a slightly different version of
      `newDFunName` for derived instances that, confusingly enough, did not
      take all arguments to the class into account when generating the
      `DFun` name. I cannot think of any good reason for doing this, so
      this patch uses `newDFunName` uniformly for both derived instances
      and manually written instances alike.
      
      Fixes #17339.
      0a338264
    • Vladislav Zavialov's avatar
      Skip T13767 on Darwin · cd1a8808
      Vladislav Zavialov authored
      The CI job fails with:
      
      	+++ rts/T13676.run/T13676.run.stderr.normalised	2019-10-09 12:27:56.000000000 -0700
      	@@ -0,0 +1,4 @@
      	+dyld: Library not loaded: @rpath/libHShaskeline-0.7.5.0-ghc8.9.0.20191009.dylib
      	+  Referenced from: /Users/builder/builds/ewzE5N2p/0/ghc/ghc/inplace/lib/bin/ghc
      	+  Reason: image not found
      	+*** Exception: readCreateProcess: '/Users/builder/builds/ewzE5N2p/0/ghc/ghc/inplace/lib/bin/ghc' '-B/Users/builder/builds/ewzE5N2p/0/ghc/ghc/inplace/lib' '-e' ''/''$'/'' == '/''/x0024'/''' +RTS '-tT13676.t'  (exit -6): failed
      
      Unable to reproduce locally.
      cd1a8808
    • Vladislav Zavialov's avatar
      Escape stats file command (#13676) · f1ce3535
      Vladislav Zavialov authored
      f1ce3535
    • John Ericson's avatar
      Simplify Configure in a few ways · c2290596
      John Ericson authored
       - No need to distinguish between gcc-llvm and clang. First of all,
         gcc-llvm is quite old and surely unmaintained by now. Second of all,
         none of the code actually care about that distinction!
      
         Now, it does make sense to consider C multiple frontends for LLVMs in
         the form of clang vs clang-cl (same clang, yes, but tweaked
         interface). But this is better handled in terms of "gccish vs
         mvscish" and "is LLVM", yielding 4 combinations. Therefore, I don't
         think it is useful saving the existing code for that.
      
       - Get the remaining CC_LLVM_BACKEND, and also TABLES_NEXT_TO_CODE in
         mk/config.h the normal way, rather than hacking it post-hoc. No point
         keeping these special cases around for now reason.
      
       - Get rid of hand-rolled `die` function and just use `AC_MSG_ERROR`.
      
       - Abstract check + flag override for unregisterised and tables next to
         code.
      
      Oh, and as part of the above I also renamed/combined some variables
      where it felt appropriate.
      
       - GccIsClang -> CcLlvmBackend. This is for `AC_SUBST`, like the other
       Camal case ones. It was never about gcc-llvm, or Apple's renamed clang,
       to be clear.
      
       - llvm_CC_FLAVOR -> CC_LLVM_BACKEND. This is for `AC_DEFINE`, like the
       other all-caps snake case ones. llvm_CC_FLAVOR was just silly
       indirection *and* an odd name to boot.
      c2290596
    • Stefan Schulze Frielinghaus's avatar
      166e1c2a
    • Sebastian Graf's avatar
      Much simpler language for PmCheck · 30f5ac07
      Sebastian Graf authored
      Simon realised that the simple language composed of let bindings, bang
      patterns and flat constructor patterns is enough to capture the
      semantics of the source pattern language that are important for
      pattern-match checking. Well, given that the Oracle is smart enough to
      connect the dots in this less informationally dense form, which it is
      now.
      
      So we transform `translatePat` to return a list of `PmGrd`s relative to
      an incoming match variable. `pmCheck` then trivially translates each of
      the `PmGrd`s into constraints that the oracle understands.
      
      Since we pass in the match variable, we incidentally fix #15884
      (coverage checks for view patterns) through an interaction with !1746.
      30f5ac07
  7. 09 Oct, 2019 6 commits
    • Ryan Scott's avatar
      Use addUsedDataCons more judiciously in TcDeriv (#17324) · d584e3f0
      Ryan Scott authored
      If you derive an instance like this:
      
      ```hs
      deriving <...> instance Foo C
      ```
      
      And the data constructors for `C` aren't in scope, then
      `doDerivInstErrorChecks1` throws an error. Moreover, it will
      _only_ throw an error if `<...>` is either `stock` or `newtype`.
      This is because the code that the `anyclass` or `via` strategies
      would generate would not require the use of the data constructors
      for `C`.
      
      However, `doDerivInstErrorChecks1` has another purpose. If you
      write this:
      
      ```hs
      import M (C(MkC1, ..., MkCn))
      
      deriving <...> instance Foo C
      ```
      
      Then `doDerivInstErrorChecks1` will call `addUsedDataCons` on
      `MkC1` through `MkCn` to ensure that `-Wunused-imports` does not
      complain about them. However, `doDerivInstErrorChecks1` was doing
      this for _every_ deriving strategy, which mean that if `<...>` were
      `anyclass` or `via`, then the warning about `MkC1` through `MkCn`
      being unused would be suppressed!
      
      The fix is simple enough: only call `addUsedDataCons` when the
      strategy is `stock` or `newtype`, just like the other code paths
      in `doDerivInstErrorChecks1`.
      
      Fixes #17324.
      d584e3f0
    • Ben Gamari's avatar
      Test · 35cc5eff
      Ben Gamari authored
      35cc5eff
    • Ben Gamari's avatar
      Remove GHC_STAGE guards from MachDeps · 5f2c49d8
      Ben Gamari authored
      This allows the stage1 compiler (which needs to run on the build
      platform and produce code for the host) to depend upon properties of the
      target. This is wrong. However, it's no more wrong than it was
      previously and @Erichson2314 is working on fixing this so I'm going to
      remove the guard so we can finally bootstrap HEAD with ghc-8.8 (see
      issue #17146).
      5f2c49d8
    • Ben Gamari's avatar
      817c1a94
    • Ben Gamari's avatar
      Relayout generated header body · 63a5371d
      Ben Gamari authored
      63a5371d
    • Ben Gamari's avatar
      Rename STAGE macro to GHC_STAGE · 0c0a15a8
      Ben Gamari authored
      To avoid polluting the macro namespace
      0c0a15a8
  8. 08 Oct, 2019 3 commits
    • Sebastian Graf's avatar
      PmCheck: Look up parent data family TyCon when populating `PossibleMatches` · f691f0c2
      Sebastian Graf authored
      The vanilla COMPLETE set is attached to the representation TyCon of a
      data family instance, whereas the user-defined COMPLETE sets are
      attached to the parent data family TyCon itself.
      
      Previously, we weren't trying particularly hard to get back to the
      representation TyCon to the parent data family TyCon, resulting in bugs
      like #17207. Now we should do much better.
      
      Fixes the original issue in #17207, but I found another related bug that
      isn't so easy to fix.
      f691f0c2
    • Vladislav Zavialov's avatar
      Bump array and haddock submodules · c2d4011c
      Vladislav Zavialov authored
      c2d4011c
    • Richard Eisenberg's avatar
      Solve constraints from top-level groups sooner · 9612e91c
      Richard Eisenberg authored
      Previously, all constraints from all top-level groups (as
      separated by top-level splices) were lumped together and solved
      at the end. This could leak metavariables to TH, though, and
      that's bad. This patch solves each group's constraints before
      running the next group's splice.
      
      Naturally, we now report fewer errors in some cases.
      
      One nice benefit is that this also fixes #11680, but in a much
      simpler way than the original fix for that ticket. Admittedly,
      the error messages degrade just a bit from the fix from #11680
      (previously, we informed users about variables that will be
      brought into scope below a top-level splice, and now we just
      report an out-of-scope error), but the amount of complexity
      required throughout GHC to get that error was just not worth it.
      
      This patch thus reverts much of
      f93c9517.
      
      Fixes #16980
      
      Test cases: th/T16980{,a}
      9612e91c