1. 29 May, 2019 16 commits
    • John Ericson's avatar
      Break up `Settings` into smaller structs · ace2e335
      John Ericson authored
      As far as I can tell, the fields within `Settings` aren't *intrinsicly*
      related. They just happen to be initialized the same way (in particular
      prior to the rest of `DynFlags`), and that is why they are grouped
      Within `Settings`, however, there are groups of settings that clearly do
      share something in common, regardless of how they anything is
      In the spirit of GHC being a library, where the end cosumer may choose
      to initialize this configuration in arbitrary ways, I made some new data
      types for thoses groups internal to `Settings`, and used them to define
      `Settings` instead. Hopefully this is a baby step towards a general
      decoupling of the stateful and stateless parts of GHC.
    • Josh Meredith's avatar
      Provide details in `plusSimplCount` errors · 2d2aa203
      Josh Meredith authored
    • Vladislav Zavialov's avatar
      tcMatchesFun s/rho/sigma #16692 · ae968d41
      Vladislav Zavialov authored
    • Ömer Sinan Ağacan's avatar
    • Daniel Gröber (dxld)'s avatar
      downsweep: Allow TargetFile not to exist when a buffer is given · fb26d467
      Daniel Gröber (dxld) authored
      Currently 'getRootSummary' will fail with an exception if a 'TargetFile' is
      given but it does not exist even if an input buffer is passed along for
      this target.
      In this case it is not necessary for the file to exist since the buffer
      will be used as input for the compilation pipeline instead of the file
    • Daniel Gröber (dxld)'s avatar
      Allow using tagetContents for modules needing preprocessing · 5b90e0a1
      Daniel Gröber (dxld) authored
      This allows GHC API clients, most notably tooling such as
      Haskell-IDE-Engine, to pass unsaved files to GHC more easily.
      Currently when targetContents is used but the module requires preprocessing
      'preprocessFile' simply throws an error because the pipeline does not
      support passing a buffer.
      This change extends `runPipeline` to allow passing the input buffer into
      the pipeline. Before proceeding with the actual pipeline loop the input
      buffer is immediately written out to a new tempfile.
      I briefly considered refactoring the pipeline at large to pass around
      in-memory buffers instead of files, but this seems needlessly complicated
      since no pipeline stages other than Hsc could really support this at the
    • Daniel Gröber (dxld)'s avatar
      Add hPutStringBuffer utility · cc0d05a7
      Daniel Gröber (dxld) authored
    • Nathan Collins's avatar
    • Krzysztof Gogolewski's avatar
      Fix missing unboxed tuple RuntimeReps (#16565) · 69b16331
      Krzysztof Gogolewski authored
      Unboxed tuples and sums take extra RuntimeRep arguments,
      which must be manually passed in a few places.
      This was not done in deSugar/Check.
      This error was hidden because zipping functions in TyCoRep
      ignored lists with mismatching length. This is now fixed;
      the lengths are now checked by calling zipEqual.
      As suggested in #16565, I moved checking for isTyVar and
      isCoVar to zipTyEnv and zipCoEnv.
    • Krzysztof Gogolewski's avatar
      In hole fits, don't show VTA for inferred variables (#16456) · f9d61ebb
      Krzysztof Gogolewski authored
      We fetch the ArgFlag for every argument by using splitForAllVarBndrs
      instead of splitForAllTys in unwrapTypeVars.
    • KevinBuhr's avatar
    • Oleg Grenrus's avatar
      Fix some warnings in users_guide (incl #16640) · 5bfd28f5
      Oleg Grenrus authored
      - short underline
      - :ghc-flag:, not :ghc-flags:
      - :since: have to be separate
      - newline before code block
      - workaround anchor generation so
          - pragma:SPECIALISE
          - pragma:SPECIALIZE-INLINE
          - pragma:SPECIALIZE-inline
        are different anchors, not all the same `pragma:SPECIALIZE`
    • Oleg Grenrus's avatar
      Remove stale 8.2.1-notes · b58b389b
      Oleg Grenrus authored
    • P.C. Shyamshankar's avatar
      Minor spelling fixes to users guide. · 32acecc2
      P.C. Shyamshankar authored
    • Alp Mestanogullari's avatar
      testsuite: introduce 'static_stats' tests · 7a75a094
      Alp Mestanogullari authored
      They are a particular type of perf tests. This patch introduces a
      'stats_files_dir' configuration field in the testsuite driver where all
      haddock timing files (and possibly others in the future) are assumed to live.
      We also change both the Make and Hadrian build systems to pass respectively
      $(TOP)/testsuite/tests/perf/haddock/ and
      <build root>/stage1/haddock-timing-files/ as the value of that new
      configuration field, and to generate the timing files in those directories
      in the first place while generating documentation with haddock.
      This new test type can be seen as one dedicated to examining stats files that
      are generated while building a GHC distribution. This also lets us get rid of
      the 'extra_files' directives in the all.T entries for haddock.base,
      haddock.Cabal and haddock.compiler.
    • Krzysztof Gogolewski's avatar
  2. 28 May, 2019 1 commit
  3. 27 May, 2019 10 commits
    • Ömer Sinan Ağacan's avatar
      Add missing opening braces in Cmm dumps · db8e3275
      Ömer Sinan Ağacan authored
      Previously -ddump-cmm was generating code with unbalanced curly braces:
           stg_atomically_entry() //  [R1]
                   { info_tbls: [(cfl,
                                  label: stg_atomically_info
                                  rep: tag:16 HeapRep 1 ptrs { Thunk }
                                  srt: Nothing)]
                     stack_info: arg_space: 8 updfr_space: Just 8
                 cfl: // cfk
                     unwind Sp = Just Sp + 0;
                     _cfk::P64 = R1;
                     //tick src<rts/PrimOps.cmm:(1243,1)-(1245,1)>
                     R1 = I64[_cfk::P64 + 8 + 8 + 0 * 8];
                     call stg_atomicallyzh(R1) args: 8, res: 0, upd: 8;
           }, <---- OPENING BRACE MISSING
      After this patch:
           stg_atomically_entry() { //  [R1] <---- MISSING OPENING BRACE HERE
                   { info_tbls: [(cfl,
                                  label: stg_atomically_info
                                  rep: tag:16 HeapRep 1 ptrs { Thunk }
                                  srt: Nothing)]
                     stack_info: arg_space: 8 updfr_space: Just 8
                 cfl: // cfk
                     unwind Sp = Just Sp + 0;
                     _cfk::P64 = R1;
                     //tick src<rts/PrimOps.cmm:(1243,1)-(1245,1)>
                     R1 = I64[_cfk::P64 + 8 + 8 + 0 * 8];
                     call stg_atomicallyzh(R1) args: 8, res: 0, upd: 8;
    • John Ericson's avatar
      hadrian: Fix generation of settings · f80d3afd
      John Ericson authored
      I jumbled some lines in e529c65e,
      messing up the leading underscores and rts ways settings. This broke at
      least stage1 linking on macOS, but probably loads of other things too.
      Should fix #16685 and #16658.
    • Jasper Van der Jeugt's avatar
      Fix padding of entries in .prof files · 95b79173
      Jasper Van der Jeugt authored
      When the number of entries of a cost centre reaches 11 digits, it takes
      up the whole space reserved for it and the prof file ends up looking
          ... no.        entries  %time %alloc   %time %alloc
          ... 120918     978250    0.0    0.0     0.0    0.0
          ... 118891          0    0.0    0.0    73.3   80.8
          ... 11890229702412351    8.9   13.5    73.3   80.8
          ... 118903  153799689    0.0    0.1     0.0    0.1
      This results in tooling not being able to parse the .prof file.  I
      realise we have the JSON output as well now, but still it'd be good to
      fix this little weirdness.
      Original bug report and full prof file can be seen here:
    • Simon Jakobi's avatar
      base: Include (<$) in all exports of Functor · 6d188dd5
      Simon Jakobi authored
      Previously the haddocks for Control.Monad and Data.Functor gave
      the impression that `fmap` was the only Functor method.
      Fixes #16681.
    • Sebastian Graf's avatar
      Add a pprTraceWith function · 723216e3
      Sebastian Graf authored
    • Krzysztof Gogolewski's avatar
      Fix tcfail158 (#15899) · 1f51aad6
      Krzysztof Gogolewski authored
      As described in #15899, this test was broken, but now it's back
      to normal.
    • Josh Price's avatar
      Correct the large tuples section in user's guide · 3f6e5b97
      Josh Price authored
      Fixes #16644.
    • mizunashi_mana's avatar
      Fix typo of primop format · dcd843ac
      mizunashi_mana authored
    • Alp Mestanogullari's avatar
      Hadrian: Fix problem with unlit path in settings file · 01f8e390
      Alp Mestanogullari authored
      e529c65e introduced a problem in the logic for generating the
      path to the unlit command in the settings file, and this patches
      fixes it.
      This fixes many tests, the simplest of which is:
      > _build/stage1/bin/ghc testsuite/tests/parser/should_fail/T8430.lhs
      which failed because of a wrong path for unlit, and now fails for the right
      reason, with the error message expected for this test.
      This addresses #16659.
    • Moritz Angermann's avatar
      Lowercase windows imports · 4b228768
      Moritz Angermann authored
      While windows and macOS are currently on case-insensitive file
      systems, this poses no issue on those.  When cross compiling from
      linux with a case sensitive file system and mingw providing only
      lowercase headers, this in fact produces an issue.  As such we just
      lowercase the import headers, which should still work fine on a
      case insensitive file system and also enable mingw's headers to
      be usable porperly.
  4. 26 May, 2019 1 commit
    • isovector's avatar
      Let the specialiser work on dicts under lambdas · 2d0cf625
      isovector authored
      Following the discussion under #16473, this change allows the
      specializer to work on any dicts in a lambda, not just those that occur
      at the beginning.
      For example, if you use data types which contain dictionaries and
      higher-rank functions then once these are erased by the optimiser you
      end up with functions such as:
        -> forall (m :: * -> *).
           Monad m =>
           (forall x. Union '[State (Sum Int)] x -> m x) -> m ()
      The dictionary argument is after the Int# value argument, this patch
      allows `go` to be specialised.
  5. 25 May, 2019 2 commits
  6. 24 May, 2019 6 commits
    • Michael Sloan's avatar
      Add PlainPanic for throwing exceptions without depending on pprint · d9dfbde3
      Michael Sloan authored
      This commit splits out a subset of GhcException which do not depend on
      pretty printing (SDoc), as a new datatype called
      PlainGhcException. These exceptions can be caught as GhcException,
      because 'fromException' will convert them.
      The motivation for this change is that that the Panic module
      transitively depends on many modules, primarily due to pretty printing
      code.  It's on the order of about 130 modules.  This large set of
      dependencies has a few implications:
      1. To avoid cycles / use of boot files, these dependencies cannot
      throw GhcException.
      2. There are some utility modules that use UnboxedTuples and also use
      `panic`. This means that when loading GHC into GHCi, about 130
      additional modules would need to be compiled instead of
      interpreted. Splitting the non-pprint exception throwing into a new
      module resolves this issue. See #13101
    • David Eichmann's avatar
      Allow metric change after reverting "Add Generic tuple instances up to 15-tuple" #16688 · c931f256
      David Eichmann authored
      Metrics increased on commit 5eb94454 and
      decreased on revert commit 535a26c9.
      Metric Decrease:
    • Ryan Scott's avatar
      Some forall-related cleanup in deriving code · 6eedbd83
      Ryan Scott authored
      * Tweak the parser to allow `deriving` clauses to mention explicit
        `forall`s or kind signatures without gratuitous parentheses.
        (This fixes #14332 as a consequence.)
      * Allow Haddock comments on `deriving` clauses with explicit
        `forall`s. This requires corresponding changes in Haddock.
    • Iavor S. Diatchki's avatar
      Add a `NOINLINE` pragma on `someNatVal` (#16586) · 59f4cb6f
      Iavor S. Diatchki authored
      This fixes #16586, see `Note [NOINLINE someNatVal]` for details.
    • Ömer Sinan Ağacan's avatar
      Add a test for #16597 · 0b449d34
      Ömer Sinan Ağacan authored
    • Alp Mestanogullari's avatar
      add an --hadrian mode to ./validate · 04b4b984
      Alp Mestanogullari authored
      When the '--hadrian' flag is passed to the validate script, we use hadrian
      to build GHC, package it up in a binary distribution and later on run GHC's
      testsuite against the said bindist, which gets installed locally in the process.
      Along the way, this commit fixes a typo, an omission (build iserv binaries
      before producing the bindist archive) and moves the Makefile that enables
      'make install' on those bindists from being a list of strings in the code to
      an actual file (it was becoming increasingly annoying to work with).
      Finally, the Settings.Builders.Ghc part of this patch is necessary for being
      able to use the installed binary distribution, in 'validate'.
  7. 23 May, 2019 1 commit
  8. 22 May, 2019 3 commits
    • Luite Stegeman's avatar
    • Ryan Scott's avatar
      Use HsTyPats in associated type family defaults · 6efe04de
      Ryan Scott authored
      Associated type family default declarations behave strangely in a
      couple of ways:
      1. If one tries to bind the type variables with an explicit `forall`,
         the `forall`'d part will simply be ignored. (#16110)
      2. One cannot use visible kind application syntax on the left-hand
         sides of associated default equations, unlike every other form
         of type family equation. (#16356)
      Both of these issues have a common solution. Instead of using
      `LHsQTyVars` to represent the left-hand side arguments of an
      associated default equation, we instead use `HsTyPats`, which is what
      other forms of type family equations use. In particular, here are
      some highlights of this patch:
      * `FamEqn` is no longer parameterized by a `pats` type variable, as
        the `feqn_pats` field is now always `HsTyPats`.
      * The new design for `FamEqn` in chronicled in
        `Note [Type family instance declarations in HsSyn]`.
      * `TyFamDefltEqn` now becomes the same thing as `TyFamInstEqn`. This
        means that many of `TyFamDefltEqn`'s code paths can now reuse the
        code paths for `TyFamInstEqn`, resulting in substantial
        simplifications to various parts of the code dealing with
        associated type family defaults.
      Fixes #16110 and #16356.
    • Alp Mestanogullari's avatar
      Hadrian: add --test-root-dirs, to only run specific directories of tests · 2c15b85e
      Alp Mestanogullari authored
      We can specify several of those, by using the flag multiple times or
      just once but combining the directories with ':'.
      Along the way, this patch also fixes the testsuite-related --only flag,
      so that we can use it many times instead of being force to specify a
      space-separated list of test in a single --only flag.