1. 12 Sep, 2019 3 commits
  2. 11 Sep, 2019 8 commits
    • Tamar Christina's avatar
      Windows: make openTempFile fully atomic. · 3a7d3923
      Tamar Christina authored
      3a7d3923
    • Ömer Sinan Ağacan's avatar
      Refactor bad coercion checking in a few places · c76cc0c6
      Ömer Sinan Ağacan authored
      We do bad coercion checking in a few places in the compiler, but they
      all checked it differently:
      
      - CoreToStg.coreToStgArgs:
      
        Disallowed lifted-to-unlifted, disallowed changing prim reps even when
        the sizes are the same.
      
      - StgCmmExpr.cgCase:
      
        Checked primRepSlot equality. This disallowed Int to Int64 coercions
        on 64-bit systems (and Int to Int32 on 32-bit) even though those are
        fine.
      
      - CoreLint:
      
        Only place where we do this right. Full rules are explained in Note
        [Bad unsafe coercion].
      
      This patch implements the check explained in Note [Bad unsafe coercion]
      in CoreLint and uses it in CoreToStg.coreToStgArgs and
      StgCmmExpr.cgCase.
      
      This fixes #16952 and unblocks !1381 (which fixes #16893).
      
      This is the most conservative and correct change I came up with that
      fixes #16952.
      
      One remaining problem with coercion checking is that it's currently done
      in seemingly random places. What's special about CoreToStg.coreToStgArgs
      and StgCmmExpr.cgCase? My guess is that adding assertions to those
      places caught bugs before so we left assertions in those places. I think
      we should remove these assertions and do coercion checking in CoreLint
      and StgLint only (#17041).
      c76cc0c6
    • Ben Gamari's avatar
      SetLevels: Fix potential panic in lvlBind · 7ef6fe8f
      Ben Gamari authored
      3b31a94d introduced a use of isUnliftedType which can panic in the case
      of levity-polymorphic types. Fix this by introducing mightBeUnliftedType
      which returns whether the type is *guaranteed* to be lifted.
      7ef6fe8f
    • John Ericson's avatar
      Remove dead `ncgDebugIsOn` and `NCG_DEBUG` · d9e637df
      John Ericson authored
      Haven't been used since 16206a66.
      d9e637df
    • Luke Lau's avatar
      Bump Hadrian's QuickCheck dependency · df6fbe03
      Luke Lau authored
      df6fbe03
    • Peter Trommler's avatar
      testsuite: check for RTS linker · 58569a5b
      Peter Trommler authored
      Fixes #16833
      58569a5b
    • John Ericson's avatar
      Remove COMPILING_GHC · 7032a913
      John Ericson authored
      It is no longer used. I guess we are sharing fewer headers with the RTS
      than the comment claims. That's a relief!
      7032a913
    • Niklas Hambüchen's avatar
      linker: Move -optl flags to end of linker invocation. · 60c26403
      Niklas Hambüchen authored
      Until now, giving `-optl` linker flags to `ghc` on the command line placed
      them in the wrong place in the `ld` command line:
      
      They were given before all the Haskell libararies, when they should appear after.
      
      Background:
      Most linkers like `ld.bfd` and `ld.gold`, but not the newer LLVM `lld`, work in
      a way where the order of `-l` flags given matters; earlier `-lmylib1` flags are
      supposed to create "holes" for linker symbols that are to be filled with later
      `lmylib2` flags that "fill the holes" for these symbols.
      
      As discovered in
      https://github.com/haskell/cabal/pull/5451#issuecomment-518001240,
      the `-optl` flags appeared before e.g. the
      
          -lHStext-1.2.3.1
          -lHSbinary-0.8.6.0
          -lHScontainers-0.6.0.1
      
      flags that GHC added at the very end.
      
      Haskell libraries typically depend on C libraries, so `-lHS*` flags will create
      holes for the C libraries to fill in, but that only works when those libraries'
      `-l` flags are given **after** the `-lHS*` flags; until now they were given
      before, which was wrong.
      
      This meant that Cabal's `--ld-options` flag and `ld-options` `.cabal` file field
      were pretty ineffective, unless you used the `--ld-option=--start-group` hack as
      (https://github.com/haskell/cabal/pull/5451#issuecomment-406761676) that
      convinces the classical linkers to not be dependent on the order of linker flags
      given.
      
      This commit fixes the problem by simply flipping the order, putting `-optl`
      flags at the end, after Haskell libraries.
      
      The code change is effectively only `args1 ++ args` -> `args ++ args1`
      but the commit also renames the variables for improved clarity.
      
      Simple way to test it:
      
          ghc --make Main.hs -fforce-recomp -v -optl-s
      
      on a `Main.hs` like:
      
          import qualified Data.Set as Set
          main = print $ Set.fromList "hello"
      60c26403
  3. 09 Sep, 2019 6 commits
    • Sylvain Henry's avatar
      Module hierarchy: StgToCmm (#13009) · 447864a9
      Sylvain Henry authored
      Add StgToCmm module hierarchy. Platform modules that are used in several
      other places (NCG, LLVM codegen, Cmm transformations) are put into
      GHC.Platform.
      447864a9
    • Ryan Scott's avatar
      Replace queryCygwinTerminal with Win32's isMinTTYHandle · 270fbe85
      Ryan Scott authored
      `SysTools.Terminal.queryCygwinTerminal` now exists in the `Win32`
      library under the name `isMinTTYHandle` since `Win32-2.5.0.0`.
      (GHC 8.4.4 ships with `Win32-2.6.1.0`, so this is well within GHC's
      support window.) We can therefore get replace `queryCygwinTerminal`
      with `isMinTTYHandle` and delete quite a bit of code from
      `SysTools.Terminal` in the process.
      
      Along the way I needed to replace some uses of `#if defined x` with
      `#if defined(x)` to please the CI linters.
      270fbe85
    • Daniel Gröber (dxld)'s avatar
      Update FastString docstrings · f5e2fde4
      Daniel Gröber (dxld) authored
      1) FastStrings are always UTF-8 encoded now.
      2) Clarify what is meant by "hashed"
      3) Add mention of lazy z-enc
      f5e2fde4
    • Daniel Gröber (dxld)'s avatar
      Use lazyness for FastString's z-encoding memoization · 4cf91d1a
      Daniel Gröber (dxld) authored
      Having an IORef in FastString to memoize the z-encoded version is
      unecessary because there is this amazing thing Haskell can do natively,
      it's called "lazyness" :)
      
      We simply remove the UNPACK and strictness annotations from the constructor
      field corresponding to the z-encoding, making it lazy, and store the
      (pure) z-encoded string there.
      
      The only complication here is 'hasZEncoding' which allows cheking if a
      z-encoding was computed for a given string. Since this is only used for
      compiler performance statistics though it's not actually necessary to have
      the current per-string granularity.
      
      Instead I add a global IORef counter to the FastStringTable and use
      unsafePerformIO to increment the counter whenever a lazy z-encoding is
      forced.
      4cf91d1a
    • Moritz Kiefer's avatar
      Fix GHC version guard for Int32Rep/Word32Rep · d0b45ac6
      Moritz Kiefer authored
      Those constructors have been added after GHC 8.8. The version guards
      in `binary` are correct, see https://github.com/kolmodin/binary/pull/167/files.
      d0b45ac6
    • Ömer Sinan Ağacan's avatar
      Add a new flag -dno-typeable-binds for debugging · 51379b89
      Ömer Sinan Ağacan authored
      See the user manual entry -- this helps when debugging as generated Core
      gets smaller without these bindings.
      51379b89
  4. 07 Sep, 2019 2 commits
    • Alp Mestanogullari's avatar
    • Ömer Sinan Ağacan's avatar
      Minor refactoring in deriveConstants · 821bece9
      Ömer Sinan Ağacan authored
      Mainly we now generate this
      
          data PlatformConstants = PlatformConstants {
                pc_CONTROL_GROUP_CONST_291 :: Int,
                pc_STD_HDR_SIZE :: Int,
                pc_PROF_HDR_SIZE :: Int,
                pc_BLOCK_SIZE :: Int,
            }
      
      instead of
      
          data PlatformConstants = PlatformConstants {
              pc_platformConstants :: ()
              , pc_CONTROL_GROUP_CONST_291 :: Int
              , pc_STD_HDR_SIZE :: Int
              , pc_PROF_HDR_SIZE :: Int
              , pc_BLOCK_SIZE :: Int
              ...
            }
      
      The first field has no use and according to (removed) comments it was to
      make code generator's work easier.. if anything this version is simpler
      because it has less repetition (the commas in strings are gone).
      821bece9
  5. 05 Sep, 2019 2 commits
  6. 02 Sep, 2019 2 commits
  7. 01 Sep, 2019 1 commit
  8. 31 Aug, 2019 2 commits
    • Ömer Sinan Ağacan's avatar
      Remove redundant special case in STG pretty-printer · e56251f6
      Ömer Sinan Ağacan authored
      This special case existed for no reason, and made things inconsistent.
      
      Before
      
          Boolean.$bT :: Boolean.Boolean
          [GblId, Str=m, Unf=OtherCon []] =
              CAF_ccs  \ u  []  Boolean.$bT1;
      
      After
      
          Boolean.$bF :: Boolean.Boolean
          [GblId, Str=m, Unf=OtherCon []] =
              \u [] Boolean.$bF1;
      
      The cost-centre is now hidden when not profiling, as is the case with
      other types of closures.
      e56251f6
    • Eric Wolf's avatar
      Add additional step to T16804 · 7e6aeb13
      Eric Wolf authored
      Add another small test step
      
      Use the same identifier name in different
      scopes and see, if ':uses' handles that.
      
      Add another test step
      
      to check wether local bindings with the
      same identifier name might get confused
      
      Add easier to understand test output
      
      Fix annotated lines from file correctly
      7e6aeb13
  9. 30 Aug, 2019 2 commits
  10. 29 Aug, 2019 5 commits
    • Ömer Sinan Ağacan's avatar
      Small optimization in the SRT algorithm · 304067a0
      Ömer Sinan Ağacan authored
      Noticed by @simonmar in !1362:
      
          If the srtEntry is Nothing, then it should be safe to omit
          references to this SRT from other SRTs, even if it is a static
          function.
      
      When updating SRT map we don't omit references to static functions (see
      Note [Invalid optimisation: shortcutting]), but there's no reason to add
      an SRT entry for a static function if the function is not CAFFY.
      
      (Previously we'd add SRT entries for static functions even when they're
      not CAFFY)
      
      Using 9151b99e I checked sizes of all SRTs when building GHC and
      containers:
      
      - GHC: 583736 (HEAD), 581695 (this patch). 2041 less SRT entries.
      - containers: 2457 (HEAD), 2381 (this patch). 76 less SRT entries.
      304067a0
    • Ben Gamari's avatar
      gitlab-ci: Fix URL of Darwin's cabal-install tarball · fc746e98
      Ben Gamari authored
      This was inadvertently referring to the cabal-install-latest/ directory
      which is volatile.
      fc746e98
    • Ömer Sinan Ağacan's avatar
      Fix LLVM version check yet again · bf9dfe1c
      Ömer Sinan Ağacan authored
      There were two problems with LLVM version checking:
      
      - The parser would only parse x and x.y formatted versions. E.g. 1.2.3
        would be rejected.
      
      - The version check was too strict and would reject x.y formatted
        versions. E.g. when we support version 7 it'd reject 7.0 ("LLVM
        version 7.0") and only accept 7 ("LLVM version 7").
      
      We now parse versions with arbitrarily deep minor numbering (x.y.z.t...)
      and accept versions as long as the major version matches the supported
      version (e.g. 7.1, 7.1.2, 7.1.2.3 ...).
      bf9dfe1c
    • Luca Zulian's avatar
      Remove Unused flag -ddump-shape [skip ci] · 66282ba5
      Luca Zulian authored
      66282ba5
    • Ryan Scott's avatar
      Balance parentheses in GHC 8.10.1 release notes · 137c24e1
      Ryan Scott authored
      [ci skip]
      137c24e1
  11. 28 Aug, 2019 2 commits
    • Sebastian Graf's avatar
      Fix #17112 · a308b435
      Sebastian Graf authored
      The `mkOneConFull` function of the pattern match checker used to try to
      guess the type arguments of the data type's type constructor by looking
      at the ambient type of the match. This doesn't work well for Pattern
      Synonyms, where the result type isn't even necessarily a TyCon
      application, and it shows in #11336 and #17112.
      
      Also the effort seems futile; why try to try hard when the type checker
      has already done the hard lifting? After this patch, we instead supply
      the type constructors arguments as an argument to the function and
      lean on the type-annotated AST.
      a308b435
    • Ömer Sinan Ağacan's avatar
      Return results of Cmm streams in backends · 1c7ec449
      Ömer Sinan Ağacan authored
      This generalizes code generators (outputAsm, outputLlvm, outputC, and
      the call site codeOutput) so that they'll return the return values of
      the passed Cmm streams.
      
      This allows accumulating data during Cmm generation and returning it to
      the call site in HscMain.
      
      Previously the Cmm streams were assumed to return (), so the code
      generators returned () as well.
      
      This change is required by !1304 and !1530.
      
      Skipping CI as this was tested before and I only updated the commit
      message.
      
      [skip ci]
      1c7ec449
  12. 27 Aug, 2019 3 commits
  13. 23 Aug, 2019 2 commits
    • Sergei Trofimovich's avatar
      configure.ac: fix '--disable-dwarf-debug' · cff44d86
      Sergei Trofimovich authored
      Before the change
          ./configure --disable-dwarf-debug
      enabled DWARF debugging unconditionally.
      
      This happened due to use of 5-argument form of `AC_ARG_ENABLE`
      without actually checking the passed  `$enableval` parameter:
      
      ```
      AC_ARG_ENABLE(dwarf-unwind,
          [AC_HELP_STRING([--enable-dwarf-unwind],
              [Enable DWARF unwinding support in the runtime system via elfutils' libdw [default=no]])],
          [AC_CHECK_LIB(dw, dwfl_attach_state,
            [UseLibdw=YES],
            [AC_MSG_ERROR([Cannot find system libdw (required by --enable-dwarf-unwind)])])]
          [UseLibdw=NO]
      )
      ```
      
      Note:
      
      - `[UseLibdw=NO]` is called when `--{enable,disable}-dwarf-unwind`
        is not passed at all as a parameter (ok).
      - `[AC_CHECK_LIB(dw, dwfl_attach_state, [UseLibdw=YES],` is called
        for both:
      
        * `--enable-dwarf-unwind` being passed: `$enableval = "yes"` (ok).
        *  --disable-dwarf-unwind` being passed: `$enableval = "no"` (bad).
      
      The change is to use 3-argument `AC_ARG_ENABLE` and check for passed
      value as `"$enable_dwarf_unwind" = "yes"`.
      Signed-off-by: default avatarSergei Trofimovich <slyfox@gentoo.org>
      cff44d86
    • Andreas Klebinger's avatar
      Use variable length encoding for Binary instances. · 47070144
      Andreas Klebinger authored
      Use LEB128 encoding for Int/Word variants. This reduces
      the size of interface files significantly. (~19%).
      
      Also includes a few small optimizations to make unboxing
      work better that I have noticed while looking at the core.
      47070144