Skip to content
Snippets Groups Projects
  1. Feb 13, 2024
  2. Feb 12, 2024
    • Teo Camarasu's avatar
      doc: Add requires prof annotation to options that require it · d0d5acb5
      Teo Camarasu authored and Marge Bot's avatar Marge Bot committed
      Resolves #24421
      d0d5acb5
    • Teo Camarasu's avatar
      nonmoving: Add support for heap profiling · bedb4f0d
      Teo Camarasu authored and Marge Bot's avatar Marge Bot committed
      Add support for heap profiling while using the nonmoving collector.
      
      We greatly simply the implementation by disabling concurrent collection for
      GCs when heap profiling is enabled. This entails that the marked objects on
      the nonmoving heap are exactly the live objects.
      
      Note that we match the behaviour for live bytes accounting by taking the size
      of objects on the nonmoving heap to be that of the segment's block
      rather than the object itself.
      
      Resolves #22221
      bedb4f0d
    • Sylvain Henry's avatar
      JS: add support for linking C sources · aef587f6
      Sylvain Henry authored and Marge Bot's avatar Marge Bot committed
      Support linking C sources with JS output of the JavaScript backend.
      See the added documentation in the users guide.
      
      The implementation simply extends the JS linker to use the objects (.o)
      that were already produced by the emcc compiler and which were filtered
      out previously. I've also added some options to control the link with C
      functions (see the documentation about pragmas).
      
      With this change I've successfully compiled the direct-sqlite package
      which embeds the sqlite.c database code. Some wrappers are still
      required (see the documentation about wrappers) but everything generic
      enough to be reused for other libraries have been integrated into
      rts/js/mem.js.
      aef587f6
  3. Feb 10, 2024
    • Matthew Pickering's avatar
      rts: eras profiling mode · b0293f78
      Matthew Pickering authored and Marge Bot's avatar Marge Bot committed
      The eras profiling mode is useful for tracking the life-time of
      closures. When a closure is written, the current era is recorded in the
      profiling header. This records the era in which the closure was created.
      
      * Enable with -he
      * User mode: Use functions ghc-experimental module GHC.Profiling.Eras to modify the era
      * Automatically: --automatic-era-increment, increases the user era on major
        collections
      * The first era is era 1
      * -he<era> can be used with other profiling modes to select a specific
        era
      
      If you just want to record the era but not to perform heap profiling you
      can use `-he --no-automatic-heap-samples`.
      
      https://well-typed.com/blog/2024/01/ghc-eras-profiling/
      
      Fixes #24332
      b0293f78
  4. Feb 08, 2024
    • Matthew Pickering's avatar
      Use specific clang assembler when compiling with -fllvm · ab533e71
      Matthew Pickering authored and Marge Bot's avatar Marge Bot committed
      There are situations where LLVM will produce assembly which older gcc
      toolchains can't handle. For example on Deb10, it seems that LLVM >= 13
      produces assembly which the default gcc doesn't support.
      
      A more robust solution in the long term is to require a specific LLVM
      compatible assembler when using -fllvm.
      
      Fixes #16354
      ab533e71
  5. Feb 05, 2024
  6. Feb 01, 2024
    • Andrei Borzenkov's avatar
      Namespacing for WARNING/DEPRECATED pragmas (#24396) · 151dda4e
      Andrei Borzenkov authored and Marge Bot's avatar Marge Bot committed
      New syntax for WARNING and DEPRECATED pragmas was added,
      namely namespace specifierss:
      
        namespace_spec ::= 'type' | 'data' | {- empty -}
      
        warning ::= warning_category namespace_spec namelist strings
      
        deprecation ::= namespace_spec namelist strings
      
      A new data type was introduced to represent these namespace specifiers:
      
        data NamespaceSpecifier =
          NoSpecifier |
          TypeNamespaceSpecifier (EpToken "type") |
          DataNamespaceSpecifier (EpToken "data")
      
      Extension field XWarning now contains this NamespaceSpecifier.
      
      lookupBindGroupOcc function was changed: it now takes NamespaceSpecifier
      and checks that the namespace of the found names matches the passed flag.
      With this change {-# WARNING data D "..." #-} pragma will only affect value
      namespace and {-# WARNING type D "..." #-} will only affect type
      namespace. The same logic is applicable to DEPRECATED pragmas.
      
      Finding duplicated warnings inside rnSrcWarnDecls now takes into
      consideration NamespaceSpecifier flag to allow warnings with the
      same names that refer to different namespaces.
      151dda4e
    • Teo Camarasu's avatar
      doc: Add -Dn flag to user guide · 94ce031d
      Teo Camarasu authored and Marge Bot's avatar Marge Bot committed
      Resolves #24394
      94ce031d
  7. Jan 24, 2024
  8. Jan 20, 2024
  9. Jan 16, 2024
  10. Jan 15, 2024
    • Krzysztof Gogolewski's avatar
      Make the build more strict on documentation errors · da908790
      Krzysztof Gogolewski authored and Marge Bot's avatar Marge Bot committed
      * Detect undefined labels. This can be tested by adding :ref:`nonexistent`
        to a documentation rst file; attempting to build docs will fail.
        Fixed the undefined label in `9.8.1-notes.rst`.
      * Detect errors. While we have plenty of warnings, we can at least enforce
        that Sphinx does not report errors.
        Fixed the error in `required_type_arguments.rst`.
      
      Unrelated change: I have documented that the `-dlint` enables
      `-fcatch-nonexhaustive-cases`, as can be verified by checking
      `enableDLint`.
      da908790
  11. Jan 13, 2024
  12. Jan 10, 2024
  13. Jan 08, 2024
  14. Jan 07, 2024
  15. Jan 01, 2024
  16. Dec 25, 2023
  17. Dec 24, 2023
  18. Dec 20, 2023
  19. Dec 15, 2023
  20. Dec 13, 2023
  21. Dec 11, 2023
    • Arnaud Spiwack's avatar
      Linear let and where bindings · 8e0446df
      Arnaud Spiwack authored
      For expediency, the initial implementation of linear types in GHC
      made it so that let and where binders would always be considered
      unrestricted. This was rather unpleasant, and probably a big obstacle
      to adoption. At any rate, this was not how the proposal was designed.
      
      This patch fixes this infelicity. It was surprisingly difficult to
      build, which explains, in part, why it took so long to materialise.
      
      As of this patch, let or where bindings marked with %1 will be
      linear (respectively %p for an arbitrary multiplicity p). Unmarked let
      will infer their multiplicity.
      
      Here is a prototypical example of program that used to be rejected and
      is accepted with this patch:
      
      ```haskell
      f :: A %1 -> B
      g :: B %1 -> C
      
      h :: A %1 -> C
      h x = g y
        where
          y = f x
      ```
      
      Exceptions:
      - Recursive let are unrestricted, as there isn't a clear semantics of
        what a linear recursive binding would be.
      - Destructive lets with lazy bindings are unrestricted, as their
        desugaring isn't linear (see also #23461).
      - (Strict) destructive lets with inferred polymorphic type are
        unrestricted. Because the desugaring isn't linear (See #18461
        down-thread).
      
      Closes #18461 and #18739
      
      Co-authored-by: @jackohughes
      8e0446df
    • Vladislav Zavialov's avatar
      Make forall a keyword (#23719) · d9e4c597
      Vladislav Zavialov authored and Marge Bot's avatar Marge Bot committed
      Before this change, GHC used to accept `forall` as a term-level
      identifier:
      
      	-- from constraints-0.13
      	forall :: forall p. (forall a. Dict (p a)) -> Dict (Forall p)
      	forall d = ...
      
      Now it is a parse error.
      
      The -Wforall-identifier warning has served its purpose and is now
      a deprecated no-op.
      d9e4c597
  22. Nov 26, 2023
  23. Nov 21, 2023
  24. Nov 17, 2023
  25. Nov 16, 2023
  26. Nov 15, 2023
  27. Nov 09, 2023
  28. Nov 03, 2023
    • Vladislav Zavialov's avatar
      T2T in Expressions (#23738) · 0dfb1fa7
      Vladislav Zavialov authored and Marge Bot's avatar Marge Bot committed
      This patch implements the T2T (term-to-type) transformation in
      expressions. Given a function with a required type argument
      	vfun :: forall a -> ...
      
      the user can now call it as
      	vfun (Maybe Int)
      
      instead of
      	vfun (type (Maybe Int))
      
      The Maybe Int argument is parsed and renamed as a term (HsExpr), but then
      undergoes a conversion to a type (HsType).
      See the new function expr_to_type in compiler/GHC/Tc/Gen/App.hs
      and Note [RequiredTypeArguments and the T2T mapping]
      
      Left as future work: checking for puns.
      0dfb1fa7
    • Jaro Reinders's avatar
      Add NCG support for common 64bit operations to the x86 backend. · 6755d833
      Jaro Reinders authored and Andreas Klebinger's avatar Andreas Klebinger committed
      These used to be implemented via C calls which was obviously quite bad
      for performance for operations like simple addition.
      
      Co-authored-by: Andreas Klebinger
      6755d833
  29. Nov 01, 2023
    • Ryan Scott's avatar
      More robust checking for DataKinds · 9f9c9227
      Ryan Scott authored and Marge Bot's avatar Marge Bot committed
      As observed in #22141, GHC was not doing its due diligence in catching code
      that should require `DataKinds` in order to use. Most notably, it was allowing
      the use of arbitrary data types in kind contexts without `DataKinds`, e.g.,
      
      ```hs
      data Vector :: Nat -> Type -> Type where
      ```
      
      This patch revamps how GHC tracks `DataKinds`. The full specification is
      written out in the `DataKinds` section of the GHC User's Guide, and the
      implementation thereof is described in `Note [Checking for DataKinds]` in
      `GHC.Tc.Validity`. In brief:
      
      * We catch _type_-level `DataKinds` violations in the renamer. See
        `checkDataKinds` in `GHC.Rename.HsType` and `check_data_kinds` in
        `GHC.Rename.Pat`.
      
      * We catch _kind_-level `DataKinds` violations in the typechecker, as this
        allows us to catch things that appear beneath type synonyms. (We do *not*
        want to do this in type-level contexts, as it is perfectly fine for a type
        synonym to mention something that requires DataKinds while still using the
        type synonym in a module that doesn't enable DataKinds.) See `checkValidType`
        in `GHC.Tc.Validity`.
      
      * There is now a single `TcRnDataKindsError` that classifies all manner of
        `DataKinds` violations, both in the renamer and the typechecker. The
        `NoDataKindsDC` error has been removed, as it has been subsumed by
        `TcRnDataKindsError`.
      
      * I have added `CONSTRAINT` is `isKindTyCon`, which is what checks for illicit
        uses of data types at the kind level without `DataKinds`. Previously,
        `isKindTyCon` checked for `Constraint` but not `CONSTRAINT`. This is
        inconsistent, given that both `Type` and `TYPE` were checked by `isKindTyCon`.
        Moreover, it thwarted the implementation of the `DataKinds` check in
        `checkValidType`, since we would expand `Constraint` (which was OK without
        `DataKinds`) to `CONSTRAINT` (which was _not_ OK without `DataKinds`) and
        reject it. Now both are allowed.
      
      * I have added a flurry of additional test cases that test various corners of
        `DataKinds` checking.
      
      Fixes #22141.
      9f9c9227
    • Krzysztof Gogolewski's avatar
      docs: fix ScopedTypeVariables example (#24101) · 7a90020f
      Krzysztof Gogolewski authored and Marge Bot's avatar Marge Bot committed
      The previous example didn't compile.
      
      Furthermore, it wasn't demonstrating the point properly.
      I have changed it to an example which shows that 'a' in the signature
      must be the same 'a' as in the instance head.
      7a90020f
Loading