summaryrefslogtreecommitdiff
path: root/rts
diff options
context:
space:
mode:
authorAndreas Klebinger <klebinger.andreas@gmx.at>2021-02-21 16:04:20 +0100
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-02-26 16:27:26 -0500
commita9f23793126251844944e00bca8e84370c759aa7 (patch)
tree29122c4a7ce6aafcc41d3b070f70697289e2db97 /rts
parent24777bb334a49f6bd6c0df2d5ddb371f98436888 (diff)
downloadhaskell-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.cmm6
-rw-r--r--rts/RtsSymbols.c1
-rw-r--r--rts/linker/PEi386.c2
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)