1. 13 Jun, 2016 3 commits
    • 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
    • Erik de Castro Lopo's avatar
      rts: Fix NUMA when cross compiling · 2bb6ba62
      Erik de Castro Lopo authored
      The NUMA code was enabled whenever numa.h and numaif.h are detected.
      Unfortunately, the hosts' header files were being detected even then
      cross compiling in the absence of a target libnuma.
      
      Fix that by relying on the the presence of libnuma instead of the
      presence of the header files. The test for libnuma does `AC_TRY_LINK`
      which will fail if the test program (compiled for the target) can't
      be linked against libnuma.
      
      Test Plan:
      Build on x86_64/linux and make sure NUMA works and cross compile to
      armhf/linux.
      
      Reviewers: austin, bgamari, hvr, simonmar
      
      Reviewed By: simonmar
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2329
      2bb6ba62
  2. 12 Jun, 2016 4 commits
    • Tamar Christina's avatar
      Disable T12031 on linux · 29e14643
      Tamar Christina authored
      29e14643
    • Tamar Christina's avatar
      Fix incorrect calculated relocations on Windows x86_64 · b40e1b4c
      Tamar Christina authored
      Summary:
      See #12031 for analysis, but essentially what happens is:
      
      To sum up the issue, the reason this seems to go wrong is because
      of how we initialize the `.bss` section for Windows in the runtime linker.
      
      The first issue is where we calculate the zero space for the section:
      
      ```
      zspace = stgCallocBytes(1, bss_sz, "ocGetNames_PEi386(anonymous bss)");
      sectab_i->PointerToRawData = ((UChar*)zspace) - ((UChar*)(oc->image));
      ```
      
      Where
      ```
      UInt32 PointerToRawData;
      ```
      
      This means we're stuffing a `64-bit` value into a `32-bit` one. Also `zspace`
      can be larger than `oc->image`. In which case it'll overflow and
      then get truncated in the cast.
      
      The address of a value in the `.bss` section is then calculated as:
      
      ```
      addr = ((UChar*)(oc->image))
           + (sectabent->PointerToRawData
           + symtab_i->Value);
      ```
      
      If it does truncate then this calculation won't be correct (which is what is happening).
      
      We then later use the value of `addr` as the `S` (Symbol) value for the relocations
      
      ```
      S = (size_t) lookupSymbol_( (char*)symbol );
      ```
      
      Now the majority of the relocations are `R_X86_64_PC32` etc.
      e.g. They are guaranteed to fit in a `32-bit` value.
      
      The `R_X86_64_64` introduced for these pseudo-relocations so they can use
      the full `48-bit` addressing space isn't as lucky.
      As for why it sometimes work has to do on whether the value is truncated or not.
      
      `PointerToRawData` can't be changed because it's size is fixed by the PE specification.
      
      Instead just like with the other platforms, we now use `section` on Windows as well.
      This gives us a `start` parameter of type `void*` which solves the issue.
      
      This refactors the code to use `section.start` and to fix the issues.
      
      Test Plan: ./validate and new test added T12031
      
      Reviewers: RyanGlScott, erikd, bgamari, austin, simonmar
      
      Reviewed By: simonmar
      
      Subscribers: thomie, #ghc_windows_task_force
      
      Differential Revision: https://phabricator.haskell.org/D2316
      
      GHC Trac Issues: #12031, #11317
      b40e1b4c
    • Matthew Pickering's avatar
      Skip retc001 on OSX · 91308679
      Matthew Pickering authored
      See #11204, this test sometimes fails and sometimes passes on OSX
      which causes intermittent validate failures if it is run.
      91308679
    • Erik de Castro Lopo's avatar
      rts: Fix build when USE_LARGE_ADDRESS_SPACE is undefined · 6ace660a
      Erik de Castro Lopo authored
      The recently added NUMA related functions were mistakenly defined
      within a `#ifdef USE_LARGE_ADDRESS_SPACE` ... `#endif` block. Moving
      them outside this block fixes the build on PowerPC and Arm Linux.
      
      Test Plan: Build on PowerPC or Arm Linux
      
      Reviewers: hvr, austin, bgamari, simonmar
      
      Reviewed By: simonmar
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2326
      6ace660a
  3. 11 Jun, 2016 1 commit
  4. 10 Jun, 2016 10 commits
    • Simon Marlow's avatar
      Rts flags cleanup · c88f31a0
      Simon Marlow authored
      * Remove unused/old flags from the structs
      * Update old comments
      * Add missing flags to GHC.RTS
      * Simplify GHC.RTS, remove C code and use hsc2hs instead
      * Make ParFlags unconditional, and add support to GHC.RTS
      c88f31a0
    • Simon Marlow's avatar
      NUMA support · 9e5ea67e
      Simon Marlow authored
      Summary:
      The aim here is to reduce the number of remote memory accesses on
      systems with a NUMA memory architecture, typically multi-socket servers.
      
      Linux provides a NUMA API for doing two things:
      * Allocating memory local to a particular node
      * Binding a thread to a particular node
      
      When given the +RTS --numa flag, the runtime will
      * Determine the number of NUMA nodes (N) by querying the OS
      * Assign capabilities to nodes, so cap C is on node C%N
      * Bind worker threads on a capability to the correct node
      * Keep a separate free lists in the block layer for each node
      * Allocate the nursery for a capability from node-local memory
      * Allocate blocks in the GC from node-local memory
      
      For example, using nofib/parallel/queens on a 24-core 2-socket machine:
      
      ```
      $ ./Main 15 +RTS -N24 -s -A64m
        Total   time  173.960s  (  7.467s elapsed)
      
      $ ./Main 15 +RTS -N24 -s -A64m --numa
        Total   time  150.836s  (  6.423s elapsed)
      ```
      
      The biggest win here is expected to be allocating from node-local
      memory, so that means programs using a large -A value (as here).
      
      According to perf, on this program the number of remote memory accesses
      were reduced by more than 50% by using `--numa`.
      
      Test Plan:
      * validate
      * There's a new flag --debug-numa=<n> that pretends to do NUMA without
        actually making the OS calls, which is useful for testing the code
        on non-NUMA systems.
      * TODO: I need to add some unit tests
      
      Reviewers: erikd, austin, rwbarton, ezyang, bgamari, hvr, niteria
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2199
      9e5ea67e
    • Simon Peyton Jones's avatar
      Small refactor to mkRuntimErrorId · b9fa72a2
      Simon Peyton Jones authored
      b9fa72a2
    • Simon Peyton Jones's avatar
      Minor refactoring · 3ae18df1
      Simon Peyton Jones authored
      Use tauifyExpType rather than something hand-rolled
      3ae18df1
    • Simon Peyton Jones's avatar
      Comments only · 0f0b002c
      Simon Peyton Jones authored
      ...about unarisation and unboxed tuples
      0f0b002c
    • Simon Peyton Jones's avatar
      Refine imports slightly · 6905ce26
      Simon Peyton Jones authored
      6905ce26
    • Simon Peyton Jones's avatar
      Comments only · 6adff010
      Simon Peyton Jones authored
      6adff010
    • sgillespie's avatar
      Fix #12099: Remove bogus flags · bcb419a4
      sgillespie authored
      Remove -fwarn- and -fno-warn- from flagsForCompletion
      
      Testcase: Fix linter error on T12099
      
      For Issue #12099
      
      Reviewers: austin, thomie, bgamari
      
      Reviewed By: austin, thomie, bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2281
      
      GHC Trac Issues: #12099
      bcb419a4
    • Ömer Sinan Ağacan's avatar
      Remove Printer.c:prettyPrintClosure() · 47d81732
      Ömer Sinan Ağacan authored
      It turns out this function was unused and broken for a long time (fixed
      with b0a76643). Removing it as it will probably get broken again in the
      future and it's unused.
      
      Reviewers: austin, erikd, simonmar, nomeata, bgamari
      
      Reviewed By: nomeata, bgamari
      
      Subscribers: Phyx, thomie, nomeata
      
      Differential Revision: https://phabricator.haskell.org/D2322
      47d81732
    • Ömer Sinan Ağacan's avatar
      prettyPrintClosure(): Untag the closure before accessing fields · b0a76643
      Ömer Sinan Ağacan authored
      (This fixes segfaults)
      b0a76643
  5. 09 Jun, 2016 14 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
    • thomie's avatar
      Docs: delete PatternGuards documentation · c22ab1a6
      thomie authored
      Since `-XPatternGuards` is enabled by default, invert the logic and
      mention `-XNoPatternGuards` first.
      
      Also, since this is a Haskell 2010 feature, refer to the language report
      instead of explaining it.
      
      In general, I would like to follow the guideline of assuming the latest
      language report as a given, and then only report GHC's deviations and
      extensions relative to that report.
      
      Reviewed by: bgamari
      
      Differential Revision: https://phabricator.haskell.org/D2319
      
      GHC Trac Issues: #12172
      c22ab1a6
    • 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
    • thomie's avatar
      Docs: fix links to ghc-flags · e703a232
      thomie authored
      e703a232
    • thomie's avatar
      Testsuite: delete dead code [skip ci] · 9dbf354f
      thomie authored
      9dbf354f
    • 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
    • Tamar Christina's avatar
      Remove special casing of Windows in generic files · 48385cb2
      Tamar Christina authored
      Summary:
      Remove some Windows specific code from the .m4 files
      and have configure figure it out.
      
      Unfortunately touchy can't be removed since there
      is no mingw build of coreutils. Only msys builds
      which would give us a dependency on the msys runtime.
      
      Reviewers: hvr, austin, thomie, bgamari
      
      Reviewed By: thomie, bgamari
      
      Subscribers: thomie, erikd, #ghc_windows_task_force
      
      Differential Revision: https://phabricator.haskell.org/D2248
      48385cb2
    • 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
  6. 08 Jun, 2016 6 commits
    • Ömer Sinan Ağacan's avatar
      Show sources of cost centers in .prof · d7933cbc
      Ömer Sinan Ağacan authored
      This fixes the problem with duplicate cost-centre names that was
      reported a couple of times before. When a module implements a typeclass
      multiple times for different types, methods of different implementations
      get same cost-centre names and are reported like this:
      
          COST CENTRE MODULE            %time %alloc
      
          CAF         GHC.IO.Handle.FD    0.0   32.8
          CAF         GHC.Read            0.0    1.0
          CAF         GHC.IO.Encoding     0.0    1.8
          showsPrec   Main                0.0    1.2
          readPrec    Main                0.0   19.4
          readPrec    Main                0.0   20.5
          main        Main                0.0   20.2
      
                                                  individual      inherited
          COST CENTRE  MODULE  no.     entries  %time %alloc   %time %alloc
      
          MAIN         MAIN     53          0    0.0    0.2     0.0  100.0
           CAF         Main    105          0    0.0    0.3     0.0   62.5
            readPrec   Main    109          1    0.0    0.6     0.0    0.6
            readPrec   Main    107          1    0.0    0.6     0.0    0.6
            main       Main    106          1    0.0   20.2     0.0   61.0
             ==        Main    114          1    0.0    0.0     0.0    0.0
             ==        Main    113          1    0.0    0.0     0.0    0.0
             showsPrec Main    112          2    0.0    1.2     0.0    1.2
             showsPrec Main    111          2    0.0    0.9     0.0    0.9
             readPrec  Main    110          0    0.0   18.8     0.0   18.8
             readPrec  Main    108          0    0.0   19.9     0.0   19.9
      
      It's not possible to tell from the report which `==` took how long. This
      patch adds one more column at the cost of making outputs wider. The
      report now looks like this:
      
          COST CENTRE MODULE           SRC                       %time %alloc
      
          CAF         GHC.IO.Handle.FD <entire-module>             0.0   32.9
          CAF         GHC.IO.Encoding  <entire-module>             0.0    1.8
          CAF         GHC.Read         <entire-module>             0.0    1.0
          showsPrec   Main             Main_1.hs:7:19-22           0.0    1.2
          readPrec    Main             Main_1.hs:7:13-16           0.0   19.5
          readPrec    Main             Main_1.hs:4:13-16           0.0   20.5
          main        Main             Main_1.hs:(10,1)-(20,20)    0.0   20.2
      
                                                                             individual      inherited
          COST CENTRE  MODULE        SRC                      no. entries  %time %alloc   %time %alloc
      
          MAIN         MAIN          <built-in>                53      0    0.0    0.2     0.0  100.0
           CAF         Main          <entire-module>          105      0    0.0    0.3     0.0   62.5
            readPrec   Main          Main_1.hs:7:13-16        109      1    0.0    0.6     0.0    0.6
            readPrec   Main          Main_1.hs:4:13-16        107      1    0.0    0.6     0.0    0.6
            main       Main          Main_1.hs:(10,1)-(20,20) 106      1    0.0   20.2     0.0   61.0
             ==        Main          Main_1.hs:7:25-26        114      1    0.0    0.0     0.0    0.0
             ==        Main          Main_1.hs:4:25-26        113      1    0.0    0.0     0.0    0.0
             showsPrec Main          Main_1.hs:7:19-22        112      2    0.0    1.2     0.0    1.2
             showsPrec Main          Main_1.hs:4:19-22        111      2    0.0    0.9     0.0    0.9
             readPrec  Main          Main_1.hs:7:13-16        110      0    0.0   18.8     0.0   18.8
             readPrec  Main          Main_1.hs:4:13-16        108      0    0.0   19.9     0.0   19.9
           CAF         Text.Read.Lex <entire-module>          102      0    0.0    0.5     0.0    0.5
      
      To fix failing test cases because of different orderings of cost centres
      (e.g. optimized and non-optimized build printing in different order),
      with this patch we also start sorting cost centres before printing. The
      order depends on 1) entries (more entered cost centres come first) 2)
      names (using strcmp() on cost centre names).
      
      Reviewers: simonmar, austin, erikd, bgamari
      
      Reviewed By: simonmar, bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2282
      
      GHC Trac Issues: #11543, #8473, #7105
      d7933cbc
    • Ömer Sinan Ağacan's avatar
      80cf4cf0
    • Ömer Sinan Ağacan's avatar
      Report term sizes with -v3 even when -ddump is enabled · c2bbc8ba
      Ömer Sinan Ağacan authored
      This is the proper fix for the problem I tried solve with D2310
      (committed as dd332459 and reverted in 44a3c182).
      
      Reviewers: austin, goldfire, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2315
      c2bbc8ba
    • Ömer Sinan Ağacan's avatar
      Revert "Desugar: Display resulting program stats with -v2" · 44a3c182
      Ömer Sinan Ağacan authored
      This reverts commit dd332459.
      
      It seems like we already have `endPassIO` calls here, which should print
      term sizes. For some reason they don't sometimes, and we need to
      understand why instead of adding more prints.
      44a3c182
    • Ömer Sinan Ağacan's avatar
      Desugar: Display resulting program stats with -v2 · dd332459
      Ömer Sinan Ağacan authored
      Reviewers: austin, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2310
      dd332459
    • niteria's avatar
      Add some determinism tests · d4b548ef
      niteria authored
      These are the tests that I accumulated fixing real issues.
      Each test is a separate thing that was broken and they are
      relatively small.
      
      GHC Trac: #4012
      d4b548ef
  7. 07 Jun, 2016 2 commits