summaryrefslogtreecommitdiff
path: root/cparser
diff options
context:
space:
mode:
authorGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2011-08-09 08:23:31 +0000
committerGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2011-08-09 08:23:31 +0000
commit4e1215a74491bf6afb7397c4f47d08a66fed61d3 (patch)
treec44c3dfae5e18eecb389d05c949d97f747899645 /cparser
parentd0123698e87a33a8579b844fbb1ce685ef3b56e5 (diff)
More vigorous scrubbing of r-value structs
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1702 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'cparser')
-rw-r--r--cparser/StructAssign.ml20
1 files changed, 8 insertions, 12 deletions
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) ->