tcProcedureAnn isAxiom (EnsuresAnn l isFree isLeak e) = tcStmtBlock l "ensures annotation" $ tcAddDeps l "pann" $ insideAnnotation $ do
    if (isAxiom && isFree)
        then do
            ppe <- pp e
            genTcError (locpos l) False $ text "ensures annotation must not be free inside axioms:" <+> ppe
        else do
            (isLeak',e') <- checkLeakMb l isLeak $ tcAnnGuard e
            return (Nothing,EnsuresAnn (Typed l $ typed $ loc e') isFree isLeak' e')
tcProcedureAnn isAxiom (EnsuresAnn l isFree isLeak e) = tcStmtBlock l "ensures annotation" $ tcAddDeps l "pann" $ insideAnnotation $ do
    if (isAxiom && isFree)
        then do
            ppe <- pp e
            genTcError (locpos l) False $ text "ensures annotation must not be free inside axioms:" <+> ppe
        else do
            (isLeak',e') <- checkLeakMb l isLeak $ tcAnnGuard e
            return (Nothing,EnsuresAnn (Typed l $ typed $ loc e') isFree isLeak' e')
tcProcedureAnn isAxiom (EnsuresAnn l isFree isLeak e) = tcStmtBlock l "ensures annotation" $ tcAddDeps l "pann" $ insideAnnotation $ do
    if (isAxiom && isFree)
        then do
            ppe <- pp e
            genTcError (locpos l) False $ text "ensures annotation must not be free inside axioms:" <+> ppe
        else do
            (isLeak',e') <- checkLeakMb l isLeak $ tcAnnGuard e
            return (Nothing,EnsuresAnn (Typed l $ typed $ loc e') isFree isLeak' e')