tcVarInit True isHavoc scope ty (VariableInitialization l v@(VarName vl n) szs e) = do
    (ty',szs') <- tcTypeSizes l ty szs
    e' <- withExprC PureExpr $ tcDefaultInitExpr l isHavoc ty' szs' e
    -- add the array size to the type
    vn <- addConst scope (True,True) False n
    let v' = VarName (Typed vl ty') vn
    -- add variable to the environment
    isAnn <- getAnn
    newVariable scope True isAnn v' e'
    return (VariableInitialization (notTyped "tcVarInit" l) v' szs' e')
tcVarInit True isHavoc scope ty (VariableInitialization l v@(VarName vl n) szs e) = do
    (ty',szs') <- tcTypeSizes l ty szs
    e' <- withExprC PureExpr $ tcDefaultInitExpr l isHavoc ty' szs' e
    -- add the array size to the type
    vn <- addConst scope (True,True) False n
    let v' = VarName (Typed vl ty') vn
    -- add variable to the environment
    isAnn <- getAnn
    newVariable scope True isAnn v' e'
    return (VariableInitialization (notTyped "tcVarInit" l) v' szs' e')
tcVarInit True isHavoc scope ty (VariableInitialization l v@(VarName vl n) szs e) = do
    (ty',szs') <- tcTypeSizes l ty szs
    e' <- withExprC PureExpr $ tcDefaultInitExpr l isHavoc ty' szs' e
    -- add the array size to the type
    vn <- addConst scope (True,True) False n
    let v' = VarName (Typed vl ty') vn
    -- add variable to the environment
    isAnn <- getAnn
    newVariable scope True isAnn v' e'
    return (VariableInitialization (notTyped "tcVarInit" l) v' szs' e')