| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
| |
Note [Tidying multiple names at once] indicates that if multiple
variables have the same name then we shouldn't prioritise one of them
and instead rename them all to a1, a2, a3... etc
This patch implements that change, some error message changes as
expected.
Closes #20932
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch fixes #17469, by improving matters when you use
non-existent field names in a record construction:
data T = MkT { x :: Int }
f v = MkT { y = 3 }
The check is now made in the renamer, in GHC.Rename.Env.lookupRecFieldOcc.
That in turn led to a spurious error in T9975a, which is fixed by
making GHC.Rename.Names.extendGlobalRdrEnvRn fail fast if it finds
duplicate bindings. See Note [Fail fast on duplicate definitions]
in that module for more details.
This patch was originated and worked on by Alex D (@nineonine)
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, directly calling a function that pattern matches on an
unlifted data type which has at least two constructors in GHCi resulted
in a segfault.
This happened due to unaccounted return frame info table pointer. The fix is
to pop the above mentioned frame info table pointer when unlifted things are
returned. See Note [Popping return frame for unlifted things]
authors: bgamari, nineonine
|
|
|
|
|
|
| |
Previously the documentation was subtly incorrect regarding the bounds
of the operation. Fix this and add a test asserting that a zero-length
operation is in fact a no-op.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The main motivation for this patch is to allow tests to be added to the
testsuite which test things about the source tree without needing to
build GHC. In particular the notes linter can easily start failing and
by integrating it into the testsuite the process of observing these
changes is caught by normal validation procedures rather than having to
run the linter specially.
With this patch I can run
```
./hadrian/build test --flavour=devel2 --only="uniques"
```
In a clean tree to run the checkUniques linter without having to build
GHC.
Fixes #21029
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Here we introduce a new data structure, RoughMap, inspired by the
previous `RoughTc` matching mechanism for checking instance matches.
This allows [Fam]InstEnv to be implemented as a trie indexed by these
RoughTc signatures, reducing the complexity of instance lookup and
FamInstEnv merging (done during the family instance conflict test)
from O(n) to O(log n).
The critical performance improvement currently realised by this patch is
in instance matching. In particular the RoughMap mechanism allows us to
discount many potential instances which will never match for constraints
involving type variables (see Note [Matching a RoughMap]). In realistic
code bases matchInstEnv was accounting for 50% of typechecker time due
to redundant work checking instances when simplifying instance contexts
when deriving instances. With this patch the cost is significantly
reduced.
The larger constants in InstEnv creation do mean that a few small
tests regress in allocations slightly. However, the runtime of T19703 is
reduced by a factor of 4. Moreover, the compilation time of the Cabal
library is slightly improved.
A couple of test cases are included which demonstrate significant
improvements in compile time with this patch.
This unfortunately does not fix the testcase provided in #19703 but does
fix #20933
-------------------------
Metric Decrease:
T12425
Metric Increase:
T13719
T9872a
T9872d
hard_hole_fits
-------------------------
Co-authored-by: Matthew Pickering <matthewtpickering@gmail.com>
|
|
|
|
|
|
|
|
|
|
| |
This allows us to remove the dependency on parsec and hence transitively
on text.
Also added some simple unit tests for the parser and fixed two small
issues in the documentation.
Fixes #21033
|
|
|
|
| |
Fixes #14276
|
|
|
|
|
|
| |
Using ghc_plugin_way had the unintended effect of meaning certain tests
weren't run at all when ghc_dynamic=true, if you delete this modifier
then the tests work in both the static and dynamic cases.
|
|
|
|
|
| |
Due to #20791 you need to explicitly flush as otherwise the output from
these tests doesn't make it to stdout.
|
|
|
|
| |
This test was previously not run due to #20960
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
The test produces different output on static vs dynamic GHC builds.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch implements a fix for #20817. It ensures that
* The final strictness signature for a function accurately
reflects the unboxing done by the wrapper
See Note [Finalising boxity for demand signatures]
and Note [Finalising boxity for let-bound Ids]
* A much better "layer-at-a-time" implementation of the
budget for how many worker arguments we can have
See Note [Worker argument budget]
Generally this leads to a bit more worker/wrapper generation,
because instead of aborting entirely if the budget is exceeded
(and then lying about boxity), we unbox a bit.
Binary sizes in increase slightly (around 1.8%) because of the increase
in worker/wrapper generation. The big effects are to GHC.Ix,
GHC.Show, GHC.IO.Handle.Internals. If we did a better job of dropping
dead code, this effect might go away.
Some nofib perf improvements:
Program Size Allocs Runtime Elapsed TotalMem
--------------------------------------------------------------------------------
VSD +1.8% -0.5% 0.017 0.017 0.0%
awards +1.8% -0.1% +2.3% +2.3% 0.0%
banner +1.7% -0.2% +0.3% +0.3% 0.0%
bspt +1.8% -0.1% +3.1% +3.1% 0.0%
eliza +1.8% -0.1% +1.2% +1.2% 0.0%
expert +1.7% -0.1% +9.6% +9.6% 0.0%
fannkuch-redux +1.8% -0.4% -9.3% -9.3% 0.0%
kahan +1.8% -0.1% +22.7% +22.7% 0.0%
maillist +1.8% -0.9% +21.2% +21.6% 0.0%
nucleic2 +1.7% -5.1% +7.5% +7.6% 0.0%
pretty +1.8% -0.2% 0.000 0.000 0.0%
reverse-complem +1.8% -2.5% +12.2% +12.2% 0.0%
rfib +1.8% -0.2% +2.5% +2.5% 0.0%
scc +1.8% -0.4% 0.000 0.000 0.0%
simple +1.7% -1.3% +17.0% +17.0% +7.4%
spectral-norm +1.8% -0.1% +6.8% +6.7% 0.0%
sphere +1.7% -2.0% +13.3% +13.3% 0.0%
tak +1.8% -0.2% +3.3% +3.3% 0.0%
x2n1 +1.8% -0.4% +8.1% +8.1% 0.0%
--------------------------------------------------------------------------------
Min +1.1% -5.1% -23.6% -23.6% 0.0%
Max +1.8% +0.0% +36.2% +36.2% +7.4%
Geometric Mean +1.7% -0.1% +6.8% +6.8% +0.1%
Compiler allocations in CI have a geometric mean of +0.1%; many small
decreases but there are three bigger increases (7%), all because we do
more worker/wrapper than before, so there is simply more code to
compile. That's OK.
Perf benchmarks in perf/should_run improve in allocation by a geo mean
of -0.2%, which is good. None get worse. T12996 improves by -5.8%
Metric Decrease:
T12996
Metric Increase:
T18282
T18923
T9630
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
As #20941 describes, this patch implements a couple of small
fixes to the Simplifier. They make a difference principally
with -O0, so few people will notice. But with -O0 they can
reduce the number of Simplifer iterations.
* In occurrence analysis we avoid making x = (a,b) into a loop breaker
because we want to be able to inline x, or (more likely) do
case-elimination. But HEAD does not treat
x = let y = blah in (a,b)
in the same way. We should though, because we are going to float
that y=blah out of the x-binding. A one-line fix in OccurAnal.
* The crucial function exprIsConApp_maybe uses getUnfoldingInRuleMatch
(rightly) but the latter was deeply strange. In HEAD, if
rule-rewriting was off (-O0) we only looked inside stable
unfoldings. Very stupid. The patch simplifies.
* I also noticed that in simplStableUnfolding we were failing to
delete the DFun binders from the usage. So I added that.
Practically zero perf change across the board, except that we get more
compiler allocation in T3064 (which is compiled with -O0). There's a
good reason: we get better code. But there are lots of other small
compiler allocation decreases:
Metrics: compile_time/bytes allocated
---------------------
Baseline
Test Metric value New value Change
-----------------------------------------------------------------
PmSeriesG(normal) ghc/alloc 44,260,817 44,184,920 -0.2%
PmSeriesS(normal) ghc/alloc 52,967,392 52,891,632 -0.1%
PmSeriesT(normal) ghc/alloc 75,498,220 75,421,968 -0.1%
PmSeriesV(normal) ghc/alloc 52,341,849 52,265,768 -0.1%
T10421(normal) ghc/alloc 109,702,291 109,626,024 -0.1%
T10421a(normal) ghc/alloc 76,888,308 76,809,896 -0.1%
T10858(normal) ghc/alloc 125,149,038 125,073,648 -0.1%
T11276(normal) ghc/alloc 94,159,364 94,081,640 -0.1%
T11303b(normal) ghc/alloc 40,230,059 40,154,368 -0.2%
T11822(normal) ghc/alloc 107,424,540 107,346,088 -0.1%
T12150(optasm) ghc/alloc 76,486,339 76,426,152 -0.1%
T12234(optasm) ghc/alloc 55,585,046 55,507,352 -0.1%
T12425(optasm) ghc/alloc 88,343,288 88,265,312 -0.1%
T13035(normal) ghc/alloc 98,919,768 98,845,600 -0.1%
T13253-spj(normal) ghc/alloc 121,002,153 120,851,040 -0.1%
T16190(normal) ghc/alloc 290,313,131 290,074,152 -0.1%
T16875(normal) ghc/alloc 34,756,121 34,681,440 -0.2%
T17836b(normal) ghc/alloc 45,198,100 45,120,288 -0.2%
T17977(normal) ghc/alloc 39,479,952 39,404,112 -0.2%
T17977b(normal) ghc/alloc 37,213,035 37,137,728 -0.2%
T18140(normal) ghc/alloc 79,430,588 79,350,680 -0.1%
T18282(normal) ghc/alloc 128,303,182 128,225,384 -0.1%
T18304(normal) ghc/alloc 84,904,713 84,831,952 -0.1%
T18923(normal) ghc/alloc 66,817,241 66,731,984 -0.1%
T20049(normal) ghc/alloc 86,188,024 86,107,920 -0.1%
T5837(normal) ghc/alloc 35,540,598 35,464,568 -0.2%
T6048(optasm) ghc/alloc 99,812,171 99,736,032 -0.1%
T9198(normal) ghc/alloc 46,380,270 46,304,984 -0.2%
geo. mean -0.0%
Metric Increase:
T3064
|
| |
|
|
|
|
|
|
| |
This patch ensures that the pretty printer formats LambdaCase and where
clauses using braces (instead of layout) to remain consistent with the
formatting of other statements (like `do` and `case`)
|
|
|
|
|
|
| |
This patch ensures that the pretty printer formats `case` statements
using braces (instead of layout) to remain consistent with the
formatting of other statements (like `do`)
|
|
|
|
|
|
|
| |
@Bodigrim noticed that the `compareByteArray#` bounds-checking logic had
flipped arguments and an off-by-one. For the sake of clarity I also
refactored occurrences of `cmmOffset` to rather use `cmmOffsetB`. I
suspect the former should be retired.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
StgToCmm: add Config, remove CgInfoDownwards
StgToCmm: runC api change to take StgToCmmConfig
StgToCmm: CgInfoDownad -> StgToCmmConfig
StgToCmm.Monad: update getters/setters/withers
StgToCmm: remove CallOpts in StgToCmm.Closure
StgToCmm: remove dynflag references
StgToCmm: PtrOpts removed
StgToCmm: add TMap to config, Prof - dynflags
StgToCmm: add omit yields to config
StgToCmm.ExtCode: remove redundant import
StgToCmm.Heap: remove references to dynflags
StgToCmm: codeGen api change, DynFlags -> Config
StgToCmm: remove dynflags in Env and StgToCmm
StgToCmm.DataCon: remove dynflags references
StgToCmm: remove dynflag references in DataCon
StgToCmm: add backend avx flags to config
StgToCmm.Prim: remove dynflag references
StgToCmm.Expr: remove dynflag references
StgToCmm.Bind: remove references to dynflags
StgToCmm: move DoAlignSanitisation to Cmm.Type
StgToCmm: remove PtrOpts in Cmm.Parser.y
DynFlags: update ipInitCode api
StgToCmm: Config Module is single source of truth
StgToCmm: Lazy config breaks IORef deadlock
testsuite: bump countdeps threshold
StgToCmm.Config: strictify fields except UpdFrame
Strictifying UpdFrameOffset causes the RTS build with stage1 to
deadlock. Additionally, before the deadlock performance of the RTS
is noticeably slower.
StgToCmm.Config: add field descriptions
StgToCmm: revert strictify on Module in config
testsuite: update CountDeps tests
StgToCmm: update comment, fix exports
Specifically update comment about loopification passed into dynflags
then stored into stgToCmmConfig. And remove getDynFlags from
Monad.hs exports
Types.Name: add pprFullName function
StgToCmm.Ticky: use pprFullname, fixup ExtCode imports
Cmm.Info: revert cmmGetClosureType removal
StgToCmm.Bind: use pprFullName, Config update comments
StgToCmm: update closureDescription api
StgToCmm: SAT altHeapCheck
StgToCmm: default render for Info table, ticky
Use default rendering contexts for info table and ticky ticky, which should be independent of command line input.
testsuite: bump count deps
pprFullName: flag for ticky vs normal style output
convertInfoProvMap: remove unused parameter
StgToCmm.Config: add backend flags to config
StgToCmm.Config: remove Backend from Config
StgToCmm.Prim: refactor Backend call sites
StgToCmm.Prim: remove redundant imports
StgToCmm.Config: refactor vec compatibility check
StgToCmm.Config: add allowQuotRem2 flag
StgToCmm.Ticky: print internal names with parens
StgToCmm.Bind: dispatch ppr based on externality
StgToCmm: Add pprTickyname, Fix ticky naming
Accidently removed the ctx for ticky SDoc output. The only relevant flag
is sdocPprDebug which was accidental set to False due to using
defaultSDocContext without altering the flag.
StgToCmm: remove stateful fields in config
fixup: config: remove redundant imports
StgToCmm: move Sequel type to its own module
StgToCmm: proliferate getCallMethod updated api
StgToCmm.Monad: add FCodeState to Monad Api
StgToCmm: add second reader monad to FCode
fixup: Prim.hs: missed a merge conflict
fixup: Match countDeps tests to HEAD
StgToCmm.Monad: withState -> withCgState
To disambiguate it from mtl withState. This withState shouldn't be
returning the new state as a value. However, fixing this means tackling
the knot tying in CgState and so is very difficult since it changes when
the thunk of the knot is forced which either leads to deadlock or to
compiler panic.
|
|
|
|
| |
A few %s occurrences have snuck in over the past months.
|
|
|
|
|
|
| |
On Windows the `cmd.exe` shell may be used to execute the command, which
will print `ECHO is on.` instead of a newline if you give it no
argument. Avoid this by rather using `printf`.
|
|
|
|
| |
The cost-center numbers are somewhat unstable; normalise them out.
|
|
|
|
|
| |
Otherwise GHC realizes that it's not attached to a proper tty and will
disable caret diagnostics.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The main purpose of this patch is to attach a SkolemInfo directly to
each SkolemTv. This fixes the large number of bugs which have
accumulated over the years where we failed to report errors due to
having "no skolem info" for particular type variables. Now the origin of
each type varible is stored on the type variable we can always report
accurately where it cames from.
Fixes #20969 #20732 #20680 #19482 #20232 #19752 #10946
#19760 #20063 #13499 #14040
The main changes of this patch are:
* SkolemTv now contains a SkolemInfo field which tells us how the
SkolemTv was created. Used when reporting errors.
* Enforce invariants relating the SkolemInfoAnon and level of an implication (ic_info, ic_tclvl)
to the SkolemInfo and level of the type variables in ic_skols.
* All ic_skols are TcTyVars -- Check is currently disabled
* All ic_skols are SkolemTv
* The tv_lvl of the ic_skols agrees with the ic_tclvl
* The ic_info agrees with the SkolInfo of the implication.
These invariants are checked by a debug compiler by
checkImplicationInvariants.
* Completely refactor kcCheckDeclHeader_sig which kept
doing my head in. Plus, it wasn't right because it wasn't skolemising
the binders as it decomposed the kind signature.
The new story is described in Note [kcCheckDeclHeader_sig]. The code
is considerably shorter than before (roughly 240 lines turns into 150
lines).
It still has the same awkward complexity around computing arity as
before, but that is a language design issue.
See Note [Arity inference in kcCheckDeclHeader_sig]
* I added new type synonyms MonoTcTyCon and PolyTcTyCon, and used
them to be clear which TcTyCons have "finished" kinds etc, and
which are monomorphic. See Note [TcTyCon, MonoTcTyCon, and PolyTcTyCon]
* I renamed etaExpandAlgTyCon to splitTyConKind, becuase that's a
better name, and it is very useful in kcCheckDeclHeader_sig, where
eta-expansion isn't an issue.
* Kill off the nasty `ClassScopedTvEnv` entirely.
Co-authored-by: Simon Peyton Jones <simon.peytonjones@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
As #20746 showed, the demand analyser behaved badly in a key I/O
library (`GHC.IO.Handle.Text`), by unnessarily boxing and reboxing.
This patch adjusts the subtle function deferAfterPreciseException;
it's quite easy, just a bit subtle.
See the new Note [deferAfterPreciseException]
And this MR deals only with Problem 2 in #20746.
Problem 1 is still open.
|
|
|
|
|
|
|
| |
Fix a simple omission in GHC.Tc.Solver.Canonical.solveForAll,
where we ended up with the wrong TcLclEnv captured in an implication.
Result: unhelpful error message (#21006)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
David (@treeowl) writes:
> Following @kcsongor, I've used ridiculous data family result kind
> polymorphism in `linear-generics`, and am currently working on getting
> it into `staged-gg`. If it should be removed, I'd appreciate a heads up,
> and I imagine Csongor would too.
>
> What do I need by ridiculous polymorphic result kinds? Currently, data
> families are allowed to have result kinds that end in `Type` (or maybe
> `TYPE r`? I'm not sure), but not in concrete data kinds. However, they
> *are* allowed to have polymorphic result kinds. This leads to things I
> think most of us find at least quite *weird*. For example, I can write
>
> ```haskell
> data family Silly :: k
> data SBool :: Bool -> Type where
> SFalse :: SBool False
> STrue :: SBool True
> SSSilly :: SBool Silly
> type KnownBool b where
> kb :: SBool b
> instance KnownBool False where kb = SFalse
> instance KnownBool True where kb = STrue
> instance KnownBool Silly where kb = Silly
> ```
>
> Basically, every kind now has potentially infinitely many "legit" inhabitants.
>
> As horrible as that is, it's rather useful for GHC's current native
> generics system. It's possible to use these absurdly polymorphic result
> kinds to probe the structure of generic representations in a relatively
> pleasant manner. It's a sort of "formal type application" reminiscent of
> the notion of a formal power series (see the test case below). I suspect
> a system more like `kind-generics` wouldn't need this extra probing
> power, but nothing like that is natively available as yet.
>
> If the ridiculous result kind polymorphism is banished, we'll still be
> able to do what we need as long as we have stuck type families. It's
> just rather less ergonomical: a stuck type family has to be used with a
> concrete marker type argument.
Closes #20996
Co-authored-by: Matthew Pickering <matthewtpickering@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
`markNominal` is repsonsible for setting the roles of type variables
that appear underneath an `AppTy` to be nominal. However, `markNominal`
previously did not expand type synonyms, so in a data type like this:
```hs
data M f a = MkM (f (T a))
type T a = Int
```
The `a` in `M f a` would be marked nominal, even though `T a` would simply
expand to `Int`. The fix is simple: call `coreView` as appropriate in
`markNominal`. This is much like the fix for #14101, but in a different spot.
Fixes #20999.
|
|
|
|
|
|
|
|
|
|
|
| |
As #20921 showed, with partial signatures, it is helpful to use the
same algorithm (namely findInferredDiff) for
* picking the constraints to retain for the /group/
in Solver.decideQuantification
* picking the contraints to retain for the /individual function/
in Bind.chooseInferredQuantifiers
This is still regrettably declicate, but it's a step forward.
|
|
|
|
|
|
|
|
|
| |
* Remove wrong comment about panic in `break003.script`.
* Improve test `break008`.
* Add test `break028` to `all.T`
* Fix wrong comments in `print019.script`, `print026.script` and `result001.script`.
* Remove wrong comments from `print024.script` and `print031.script`.
* Replace old module name with current name in `print035.script`.
|
|
|
|
|
|
|
|
|
|
| |
This patch fixes #19790 by making the rule matcher do on-the-fly
eta reduction. See Note [Eta reduction the target] in GHC.Core.Rules
I found I also had to careful about casts when matching; see
Note [Casts in the target] and Note [Casts in the template]
Lots more comments and Notes in the rule matcher
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The insert_overlapping used in lookupInstEnv used to return different
results depending on the order in which instances were processed.
The problem was that we could end up discarding an overlapping instance
in favour of a more specific non-overlapping instance. This is a
problem because, even though we won't choose the less-specific instance
for matching, it is still useful for pruning away other instances,
because it has the overlapping flag set while the new instance doesn't.
In insert_overlapping, we now keep a list of "guard" instances, which
are instances which are less-specific that one that matches (and hence
which we will discard in the end), but want to keep around solely for
the purpose of eliminating other instances.
Fixes #20946
|
|
|
|
| |
This fixes #20938.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch makes the following types levity-polymorphic in their
last argument:
- Array# a, SmallArray# a, Weak# b, StablePtr# a, StableName# a
- MutableArray# s a, SmallMutableArray# s a,
MutVar# s a, TVar# s a, MVar# s a, IOPort# s a
The corresponding primops are also made levity-polymorphic, e.g.
`newArray#`, `readArray#`, `writeMutVar#`, `writeIOPort#`, etc.
Additionally, exception handling functions such as `catch#`, `raise#`,
`maskAsyncExceptions#`,... are made levity/representation-polymorphic.
Now that Array# and MutableArray# also work with unlifted types,
we can simply re-define ArrayArray# and MutableArrayArray# in terms
of them. This means that ArrayArray# and MutableArrayArray# are no
longer primitive types, but simply unlifted newtypes around Array# and
MutableArrayArray#.
This completes the implementation of the Pointer Rep proposal
https://github.com/ghc-proposals/ghc-proposals/pull/203
Fixes #20911
-------------------------
Metric Increase:
T12545
-------------------------
-------------------------
Metric Decrease:
T12545
-------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This test has been the scourge of contributors for a long time.
It has caused many failed CI runs and wasted hours debugging a test
which barely does anything. The fact is does nothing is the reason for
the flakiness and it's very sensitive to small changes in initialisation costs,
in particular adding wired-in things can cause this test to fluctuate
quite a bit.
Therefore we admit defeat and just bump the threshold up to 10% to catch
very large regressions but otherwise don't care what this test does.
Fixes #19414
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, `DeriveGeneric` would look up the fixity of a data constructor
using `getFixityEnv`, but this is subtly incorrect for data constructors
defined in external modules. This sort of situation can happen with
`StandaloneDeriving`, as noticed in #20994. In fact, the same bug has occurred
in the past in #9830, and while that bug was fixed for `deriving Read` and
`deriving Show`, the fix was never extended to `DeriveGeneric` due to an
oversight. This patch corrects that oversight.
Fixes #20994.
|
| |
|
| |
|
|
|
|
|
|
|
| |
Fixes #15531 by ensuring that we know the corresponding C type for all
marshalling wrappers.
Closes #15531.
|
|
|
|
|
|
|
|
|
|
|
| |
The test reads a 16 bit value from an array of 8 bit values. Naturally,
that leads to different values read on big-endian architectures than
on little-endian. In this case the value read is 0x8081 on big-endian
and 0x8180 on little endian. This patch changes the argument of the `and`
machop to mask bit 7 which is the only bit different. The test still checks
that bit 15 is zero, which was the original issue in #20638.
Fixes #20906.
|
|
|
|
| |
Issue was reported on #13306
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The simplest way to do this seemed to be to persist the whole type in
the extension field from the typechecker so that the few relevant places
* Desugaring can work out the return type by splitting this type rather
than calling `dsExpr` (slightly more efficient).
* hsExprType can just return the correct type.
* Zonking has to now zonk the type as well
The other option we considered was wiring in StaticPtr but that is
actually quite tricky because StaticPtr refers to StaticPtrInfo which
has field selectors (which we can't easily wire in).
Fixes #20150
|