1. 22 Aug, 2016 2 commits
    • Ryan Scott's avatar
      Splice singleton unboxed tuples correctly with Template Haskell · fb0d87f1
      Ryan Scott authored
      Previously, TH would implicitly remove the parentheses when splicing in
      singleton unboxed tuple types (e.g., turning `(# Int #)` into `Int`). Luckily,
      the fix is simply to delete some code.
      Fixes #12513.
      Test Plan: make test TEST=T12513
      Reviewers: hvr, bgamari, austin, goldfire
      Reviewed By: goldfire
      Subscribers: thomie
      Differential Revision: https://phabricator.haskell.org/D2462
      GHC Trac Issues: #12513
    • kgardas's avatar
      pass -z wxneeded or -Wl,-zwxneeded for linking on OpenBSD · f9aa996f
      kgardas authored
      This patch fixes issue with abort in GHCi on OpenBSD current
      as of Aug 12 2016. The OpenBSD is more and more strict about usage
      of writable and executable memory. Programs/applications which
      requires such functionality need to be linked with -z wxneeded linker
      flag and need to be run from the file-system mounted with wxallowed
      mount option. If either of those options in not met, then problematic
      program/application usually fail on some mmap/mprotect call which fail.
      Reviewers: bgamari, austin, hvr
      Subscribers: thomie, erikd
      Differential Revision: https://phabricator.haskell.org/D2454
  2. 21 Aug, 2016 8 commits
  3. 19 Aug, 2016 1 commit
  4. 18 Aug, 2016 1 commit
  5. 17 Aug, 2016 4 commits
  6. 16 Aug, 2016 4 commits
  7. 15 Aug, 2016 3 commits
  8. 14 Aug, 2016 4 commits
    • kgardas's avatar
      fix compilation failure on OpenBSD with system supplied GNU C 4.2.1 · ffd4029c
      kgardas authored
      This patch fixes compilation failure on OpenBSD. The OpenBSD's
      GNU C compiler is of 4.2.1 version and problematic __builtin_unreachable
      was added in GNU C 4.5 release. Let's use pure abort() call
      on OpenBSD instead of __builtin_unreachable
      Reviewers: bgamari, austin, erikd, simonmar
      Subscribers: thomie
      Differential Revision: https://phabricator.haskell.org/D2453
    • Tamar Christina's avatar
      Fix configure detection. · 18f06878
      Tamar Christina authored
      GHC's configure script seems to normalize the values returned from config.guess.
      So for Windows it turns x86_64-pc-mingw64 into x86_64-unknown-mingw32.
      These mangled names are stored in the values $BuildPlatform, $HostPlatform
      and $TargetPlatform.
      However further down the file when the comparison is done between the stage0
      compiler and the host the normalized versions are not used.
      So when normalization actually changes the triple this check will fail.
      Not sure why it's worked for all this time.. Nor if this is the right fix?
      Does it still work for cross compiling correctly?
      Test Plan: ./configure
      Reviewers: hvr, austin, thomie, bgamari, erikd
      Reviewed By: erikd
      Subscribers: erikd, #ghc_windows_task_force
      Differential Revision: https://phabricator.haskell.org/D2452
      GHC Trac Issues: #12487
    • Gabor Greif's avatar
      Misspellings in comments [skip ci] · 7ad3b491
      Gabor Greif authored
    • Gabor Greif's avatar
      Update `nofib` submodule to newest commit · 37a7bcbc
      Gabor Greif authored
  9. 13 Aug, 2016 1 commit
    • Erik de Castro Lopo's avatar
      Fix GHCi perf-llvm build on x86_64 · bd0c3106
      Erik de Castro Lopo authored
      With BuildFlavour set to `perf-llvm`, GHCi would fail as soon as it
      was run with:
        ghc-stage2: .../ghc-prim/dist-install/build/HSghc-prim-
        unknown symbol `__udivti3'
        ghc-stage2: unable to load package `ghc-prim-'
      Fix this by adding `__udivti3` and `__umodti3` to RtsSymbols.c.
      Test Plan: Validate
      Reviewers: simonmar, austin, bgamari, Phyx, trofi
      Reviewed By: Phyx, trofi
      Subscribers: thomie
      Differential Revision: https://phabricator.haskell.org/D2449
      GHC Trac Issues: #11981
  10. 12 Aug, 2016 1 commit
  11. 10 Aug, 2016 1 commit
    • Ömer Sinan Ağacan's avatar
      Remove StgRubbishArg and CmmArg · 9684dbb1
      Ömer Sinan Ağacan authored
      The idea behind adding special "rubbish" arguments was in unboxed sum types
      depending on the tag some arguments are not used and we don't want to move some
      special values (like 0 for literals and some special pointer for boxed slots)
      for those arguments (to stack locations or registers). "StgRubbishArg" was an
      indicator to the code generator that the value won't be used. During Stg-to-Cmm
      we were then not generating any move or store instructions at all.
      This caused problems in the register allocator because some variables were only
      initialized in some code paths. As an example, suppose we have this STG: (after
          Lib.$WT =
              \r [dt_sit]
                      case dt_sit of {
                        Lib.F dt_siv [Occ=Once] ->
                            (#,,#) [1# dt_siv StgRubbishArg::GHC.Prim.Int#];
                        Lib.I dt_siw [Occ=Once] ->
                            (#,,#) [2# StgRubbishArg::GHC.Types.Any dt_siw];
                  { (#,,#) us_giC us_giD us_giE -> Lib.T [us_giC us_giD us_giE];
      This basically unpacks a sum type to an unboxed sum with 3 fields, and then
      moves the unboxed sum to a constructor (`Lib.T`).
      This is the Cmm for the inner case expression (case expression in the scrutinee
      position of the outer case):
              -- look at dt_sit's tag
              if (_ciT::P64 != 1) goto ciS; else goto ciR;
          ciS: -- Tag is 2, i.e. Lib.F
              _siw::I64 = I64[_siu::P64 + 6];
              _giE::I64 = _siw::I64;
              _giD::P64 = stg_RUBBISH_ENTRY_info;
              _giC::I64 = 2;
              goto ciU;
          ciR: -- Tag is 1, i.e. Lib.I
              _siv::P64 = P64[_siu::P64 + 7];
              _giD::P64 = _siv::P64;
              _giC::I64 = 1;
              goto ciU;
      Here one of the blocks `ciS` and `ciR` is executed and then the execution
      continues to `ciR`, but only `ciS` initializes `_giE`, in the other branch
      `_giE` is not initialized, because it's "rubbish" in the STG and so we don't
      generate an assignment during code generator. The code generator then panics
      during the register allocations:
          ghc-stage1: panic! (the 'impossible' happened)
            (GHC version 8.1.20160722 for x86_64-unknown-linux):
                  LocalReg's live-in to graph ciY {_giE::I64}
      (`_giD` is also "rubbish" in `ciS`, but it's still initialized because it's a
      pointer slot, we have to initialize it otherwise garbage collector follows the
      pointer to some random place. So we only remove assignment if the "rubbish" arg
      has unboxed type.)
      This patch removes `StgRubbishArg` and `CmmArg`. We now always initialize
      rubbish slots. If the slot is for boxed types we use the existing `absentError`,
      otherwise we initialize the slot with literal 0.
      Reviewers: simonpj, erikd, austin, simonmar, bgamari
      Reviewed By: erikd
      Subscribers: thomie
      Differential Revision: https://phabricator.haskell.org/D2446
  12. 09 Aug, 2016 1 commit
  13. 08 Aug, 2016 3 commits
  14. 07 Aug, 2016 1 commit
  15. 06 Aug, 2016 5 commits