Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : ghc-7.6

http://hackage.haskell.org/trac/ghc/changeset/50837615c7e1d1d6b703e99ee7fd8fcf0bfee30c

>---------------------------------------------------------------

commit 50837615c7e1d1d6b703e99ee7fd8fcf0bfee30c
Author: Simon Peyton Jones <simo...@microsoft.com>
Date:   Mon Oct 1 21:52:19 2012 +0100

    Make sure that we check for type errors strictly in a Template Haskell 
splice, even if -fdefer-type-errors is on
    
    We're going to run this code, so there's no point in deferring type
    errors.  Worse, TcSplice uses unsafeCoerce (for vevy good reasons),
    so splicing a type into a place where an expression is expected would
    yield a seg-fault if we plough on regardless.
    
    Fixes Trac #7276

>---------------------------------------------------------------

 compiler/typecheck/TcSplice.lhs |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/compiler/typecheck/TcSplice.lhs b/compiler/typecheck/TcSplice.lhs
index 21d0a1d..3b56873 100644
--- a/compiler/typecheck/TcSplice.lhs
+++ b/compiler/typecheck/TcSplice.lhs
@@ -496,6 +496,12 @@ tcTopSpliceExpr :: TcM (LHsExpr Id) -> TcM (LHsExpr Id)
 tcTopSpliceExpr tc_action
   = checkNoErrs $  -- checkNoErrs: must not try to run the thing
                    -- if the type checker fails!
+    unsetDOptM Opt_DeferTypeErrors $
+                   -- Don't defer type errors.  Not only are we
+                   -- going to run this code, but we do an unsafe
+                   -- coerce, so we get a seg-fault if, say we
+                   -- splice a type into a place where an expression
+                   -- is expected (Trac #7276)
     setStage Splice $
     do {    -- Typecheck the expression
          (expr', lie) <- captureConstraints tc_action



_______________________________________________
Cvs-ghc mailing list
Cvs-ghc@haskell.org
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to