cmmLint, cmmLintTop
) where
-#include "HsVersions.h"
-
import Cmm
import CLabel
import MachOp
import PprCmm
import Unique
import Constants
+import FastString
import Control.Monad
runCmmLint :: CmmLint a -> Maybe SDoc
runCmmLint l =
case unCL l of
- Left err -> Just (ptext SLIT("Cmm lint error:") $$ nest 2 err)
+ Left err -> Just (ptext (sLit "Cmm lint error:") $$ nest 2 err)
Right _ -> Nothing
lintCmmTop :: (GenCmmTop h i (ListGraph CmmStmt)) -> CmmLint ()
lintCmmExpr r
return ()
lint (CmmCall target _res args _ _) =
- lintTarget target >> mapM_ (lintCmmExpr.fst) args
+ lintTarget target >> mapM_ (lintCmmExpr . hintlessCmm) args
lint (CmmCondBranch e id) = checkTarget id >> lintCmmExpr e >> checkCond e
lint (CmmSwitch e branches) = do
mapM_ checkTarget $ catMaybes branches
if (erep == wordRep)
then return ()
else cmmLintErr (text "switch scrutinee is not a word: " <> ppr e)
- lint (CmmJump e args) = lintCmmExpr e >> mapM_ (lintCmmExpr.fst) args
- lint (CmmReturn ress) = mapM_ (lintCmmExpr.fst) ress
+ lint (CmmJump e args) = lintCmmExpr e >> mapM_ (lintCmmExpr . hintlessCmm) args
+ lint (CmmReturn ress) = mapM_ (lintCmmExpr . hintlessCmm) ress
lint (CmmBranch id) = checkTarget id
checkTarget id = if elemBlockSet id labels then return ()
else cmmLintErr (text "Branch to nonexistent id" <+> ppr id)