summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorSimon Peyton Jones <simonpj@microsoft.com>2011-08-01 15:23:02 +0100
committerSimon Peyton Jones <simonpj@microsoft.com>2011-08-01 15:23:02 +0100
commit0cda0606f53bc6141ac90b00ef814e66795e7da6 (patch)
tree7c84165985113db3b8a05c8cabee80a44b4c1f7f /compiler
parent6059755e045ed8c4a8c3d48cc0ec5733bd950c0f (diff)
downloadhaskell-0cda0606f53bc6141ac90b00ef814e66795e7da6.tar.gz
Don't run a splice if there are preceding type errors
Fixes Trac #5358.
Diffstat (limited to 'compiler')
-rw-r--r--compiler/typecheck/TcSplice.lhs10
1 files changed, 10 insertions, 0 deletions
diff --git a/compiler/typecheck/TcSplice.lhs b/compiler/typecheck/TcSplice.lhs
index 3bf26a6fc4..c9df83fdf3 100644
--- a/compiler/typecheck/TcSplice.lhs
+++ b/compiler/typecheck/TcSplice.lhs
@@ -813,6 +813,16 @@ runMeta show_code run_and_convert expr
; recordThSpliceUse -- seems to be the best place to do this,
-- we catch all kinds of splices and annotations.
+ -- Check that we've had no errors of any sort so far.
+ -- For example, if we found an error in an earlier defn f, but
+ -- recovered giving it type f :: forall a.a, it'd be very dodgy
+ -- to carry ont. Mind you, the staging restrictions mean we won't
+ -- *run* f, but it still seems wrong. And, more concretely,
+ -- see Trac #5358 for an example that fell over when trying to
+ -- reify a function with a "?" kind in it. (These don't occur
+ -- in type-correct programs.
+ ; failIfErrsM
+
-- Desugar
; ds_expr <- initDsTc (dsLExpr expr)
-- Compile and link it; might fail if linking fails