Produce an error message, not a crash, for HsOpApp with non-var operator
authorsimonpj@microsoft.com <unknown>
Wed, 12 Jan 2011 17:07:19 +0000 (17:07 +0000)
committersimonpj@microsoft.com <unknown>
Wed, 12 Jan 2011 17:07:19 +0000 (17:07 +0000)
Fixes Trac #4877.

compiler/rename/RnExpr.lhs

index 4b5071f..6d425d0 100644 (file)
@@ -131,8 +131,8 @@ rnExpr (HsApp fun arg)
     rnLExpr arg                `thenM` \ (arg',fvArg) ->
     return (HsApp fun' arg', fvFun `plusFV` fvArg)
 
-rnExpr (OpApp e1 (L op_loc (HsVar op_rdr)) _ e2) 
-  = do { (e1', fv_e1) <- rnLExpr e1
+rnExpr (OpApp e1 (L op_loc (HsVar op_rdr)) _ e2)
+  = do  { (e1', fv_e1) <- rnLExpr e1
        ; (e2', fv_e2) <- rnLExpr e2
        ; op_name <- setSrcSpan op_loc (lookupOccRn op_rdr)
        ; (op', fv_op) <- finishHsVar op_name
@@ -146,6 +146,10 @@ rnExpr (OpApp e1 (L op_loc (HsVar op_rdr)) _ e2)
        ; fixity <- lookupFixityRn op_name
        ; final_e <- mkOpAppRn e1' (L op_loc op') fixity e2'
        ; return (final_e, fv_e1 `plusFV` fv_op `plusFV` fv_e2) }
+rnExpr (OpApp _ other_op _ _)
+  = failWith (vcat [ hang (ptext (sLit "Operator application with a non-variable operator:"))
+                        2 (ppr other_op)
+                   , ptext (sLit "(Probably resulting from a Template Haskell splice)") ])
 
 rnExpr (NegApp e _)
   = rnLExpr e                  `thenM` \ (e', fv_e) ->