diff options
author | Andreas Klebinger <klebinger.andreas@gmx.at> | 2021-02-21 16:04:20 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-02-26 16:27:26 -0500 |
commit | a9f23793126251844944e00bca8e84370c759aa7 (patch) | |
tree | 29122c4a7ce6aafcc41d3b070f70697289e2db97 /rts | |
parent | 24777bb334a49f6bd6c0df2d5ddb371f98436888 (diff) | |
download | haskell-a9f23793126251844944e00bca8e84370c759aa7.tar.gz |
Move absentError into ghc-prim.
When using -fdicts-strict we generate references to absentError while
compiling ghc-prim. However we always load ghc-prim before base so this
caused linker errors.
We simply solve this by moving absentError into ghc-prim. This does mean
it's now a panic instead of an exception which can no longer be caught.
But given that it should only be thrown if there is a compiler error
that seems acceptable, and in fact we already do this for
absentSumFieldError which has similar constraints.
Diffstat (limited to 'rts')
-rw-r--r-- | rts/Exception.cmm | 6 | ||||
-rw-r--r-- | rts/RtsSymbols.c | 1 | ||||
-rw-r--r-- | rts/linker/PEi386.c | 2 |
3 files changed, 8 insertions, 1 deletions
diff --git a/rts/Exception.cmm b/rts/Exception.cmm index 3216edbcc4..edbd657251 100644 --- a/rts/Exception.cmm +++ b/rts/Exception.cmm @@ -660,3 +660,9 @@ stg_paniczh (W_ str) { ccall barf(str) never returns; } + +// See Note [Compiler error functions] in GHC.Prim.Panic +stg_absentErrorzh (W_ str) +{ + ccall barf("Oops! Entered absent arg %s", str) never returns; +} diff --git a/rts/RtsSymbols.c b/rts/RtsSymbols.c index a3ee8505ae..7ea833ce55 100644 --- a/rts/RtsSymbols.c +++ b/rts/RtsSymbols.c @@ -747,6 +747,7 @@ SymI_HasProto(stg_raiseOverflowzh) \ SymI_HasProto(stg_raiseIOzh) \ SymI_HasProto(stg_paniczh) \ + SymI_HasProto(stg_absentErrorzh) \ SymI_HasProto(stg_readTVarzh) \ SymI_HasProto(stg_readTVarIOzh) \ SymI_HasProto(resumeThread) \ diff --git a/rts/linker/PEi386.c b/rts/linker/PEi386.c index 32efdec471..f39930c8c5 100644 --- a/rts/linker/PEi386.c +++ b/rts/linker/PEi386.c @@ -1836,7 +1836,7 @@ ocResolve_PEi386 ( ObjectCode* oc ) /* ToDo: should be variable-sized? But is at least safe in the sense of buffer-overrun-proof. */ uint8_t symbol[1000]; - /* debugBelch("resolving for %s\n", oc->fileName); */ + /* debugBelch("resolving for %"PATH_FMT "\n", oc->fileName); */ /* Such libraries have been partially freed and can't be resolved. */ if (oc->status == OBJECT_DONT_RESOLVE) |