From 04236444c91ec8f078488981cb5034edb735e537 Mon Sep 17 00:00:00 2001
From: Simon Peyton Jones <simonpj@microsoft.com>
Date: Mon, 1 Aug 2011 15:23:02 +0100
Subject: [PATCH] Don't run a splice if there are preceding type errors

Fixes Trac #5358.
---
 compiler/typecheck/TcSplice.lhs | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/compiler/typecheck/TcSplice.lhs b/compiler/typecheck/TcSplice.lhs
index 3e9623ce80b1..e8aea52839ac 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
-- 
GitLab