summaryrefslogtreecommitdiff
path: root/compiler/utils/FastString.hs
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2016-11-30 10:54:45 -0500
committerBen Gamari <ben@smart-cactus.org>2016-11-30 10:56:10 -0500
commite2330b6dde805a5507898c3c4ddf38599df969da (patch)
treed52c52b99f510553b2d1733d006747d75be68a6d /compiler/utils/FastString.hs
parent03766cdbd26855e50719bd8ffcaf19898bd33f16 (diff)
downloadhaskell-e2330b6dde805a5507898c3c4ddf38599df969da.tar.gz
Revert "Make globals use sharedCAF"
This reverts commit 6f7ed1e51bf360621a3c2a447045ab3012f68575 due to breakage of the build on Windows.
Diffstat (limited to 'compiler/utils/FastString.hs')
-rw-r--r--compiler/utils/FastString.hs7
1 files changed, 7 insertions, 0 deletions
diff --git a/compiler/utils/FastString.hs b/compiler/utils/FastString.hs
index 8f76584875..1496a8686e 100644
--- a/compiler/utils/FastString.hs
+++ b/compiler/utils/FastString.hs
@@ -285,6 +285,13 @@ originally assigned to those FastStrings. Thus the lookup fails since the
domain of the GlobalRdrEnv is affected by the RdrName's OccName's FastString's
unique.
+The old `reinitializeGlobals` mechanism is enough to provide the plugin with
+read-access to the table, but it insufficient in the general case where the
+plugin may allocate FastStrings. This mutates the supply for the FastStrings'
+unique, and that needs to be propagated back to the compiler's instance of the
+global variable. Such propagation is beyond the `reinitializeGlobals`
+mechanism.
+
Maintaining synchronization of the two instances of this global is rather
difficult because of the uses of `unsafePerformIO` in this module. Not
synchronizing them risks breaking the rather major invariant that two