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