From 4e1215a74491bf6afb7397c4f47d08a66fed61d3 Mon Sep 17 00:00:00 2001 From: xleroy Date: Tue, 9 Aug 2011 08:23:31 +0000 Subject: More vigorous scrubbing of r-value structs git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1702 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e --- cparser/StructAssign.ml | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) (limited to 'cparser') diff --git a/cparser/StructAssign.ml b/cparser/StructAssign.ml index a35dc5a..a9c5091 100644 --- a/cparser/StructAssign.ml +++ b/cparser/StructAssign.ml @@ -136,27 +136,23 @@ let rec transf_expr env ctx e = | EUnop(Oaddrof, e1) -> addrof (transf_expr env Val e1) | EUnop(Oderef, e1) -> - let e1' = transf_expr env Val e1 in if ctx = Effects && is_composite_type env e.etyp - then e1' - else {edesc = EUnop(Oderef, e1'); etyp = e.etyp} + then transf_expr env Effects e1 + else {edesc = EUnop(Oderef, transf_expr env Val e1); etyp = e.etyp} | EUnop(Odot f, e1) -> - let e1' = transf_expr env Val e1 in if ctx = Effects && is_composite_type env e.etyp - then e1' - else dot f e1' e.etyp + then transf_expr env Effects e1 + else dot f (transf_expr env Val e1) e.etyp | EUnop(Oarrow f, e1) -> - let e1' = transf_expr env Val e1 in if ctx = Effects && is_composite_type env e.etyp - then e1' - else {edesc = EUnop(Oarrow f, e1'); etyp = e.etyp} + then transf_expr env Effects e1 + else {edesc = EUnop(Oarrow f, transf_expr env Val e1); etyp = e.etyp} | EUnop(op, e1) -> {edesc = EUnop(op, transf_expr env Val e1); etyp = e.etyp} | EBinop(Oindex, e1, e2, ty) -> - let e1' = transf_expr env Val e1 and e2' = transf_expr env Val e2 in if ctx = Effects && is_composite_type env e.etyp - then ecomma e1' e2' - else {edesc = EBinop(Oindex, e1', e2', ty); etyp = e.etyp} + then ecomma (transf_expr env Effects e1) (transf_expr env Effects e2) + else {edesc = EBinop(Oindex, transf_expr env Val e1, transf_expr env Val e2, ty); etyp = e.etyp} | EBinop(Ocomma, e1, e2, ty) -> ecomma (transf_expr env Effects e1) (transf_expr env ctx e2) | EBinop(op, e1, e2, ty) -> -- cgit v1.2.3