summaryrefslogtreecommitdiff
path: root/cparser/PackedStructs.ml
diff options
context:
space:
mode:
authorGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2011-08-18 09:24:23 +0000
committerGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2011-08-18 09:24:23 +0000
commit62a07ee96d51c29bab9668d8c41bf5f8bdf9e23d (patch)
treea44ae71bef9021e42a91da1787e7e83e75d18cad /cparser/PackedStructs.ml
parent84cb73abe0f777521ee67cec2405c9593420d3da (diff)
SimplVolatile: new pass to eliminate read-modify-write ops over volatiles
Elsewhere: refactoring, moving common code into Cutil and Transform (to be continued) git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1716 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'cparser/PackedStructs.ml')
-rw-r--r--cparser/PackedStructs.ml41
1 files changed, 4 insertions, 37 deletions
diff --git a/cparser/PackedStructs.ml b/cparser/PackedStructs.ml
index edd45ff..4b5d0e1 100644
--- a/cparser/PackedStructs.ml
+++ b/cparser/PackedStructs.ml
@@ -20,6 +20,7 @@ open C
open Cutil
open Env
open Errors
+open Transform
type field_info = {
fi_offset: int; (* byte offset within struct *)
@@ -177,8 +178,6 @@ let bswap_write loc env lhs rhs ik =
(* Expressions *)
-type context = Val | Effects
-
let transf_expr loc env ctx e =
let is_packed_access ty fieldname =
@@ -284,45 +283,13 @@ let transf_expr loc env ctx e =
(* Statements *)
-let rec transf_stmt env s =
- match s.sdesc with
- | Sskip -> s
- | Sdo e ->
- {sdesc = Sdo(transf_expr s.sloc env Effects e); sloc = s.sloc}
- | Sseq(s1, s2) ->
- {sdesc = Sseq(transf_stmt env s1, transf_stmt env s2); sloc = s.sloc }
- | Sif(e, s1, s2) ->
- {sdesc = Sif(transf_expr s.sloc env Val e,
- transf_stmt env s1, transf_stmt env s2);
- sloc = s.sloc}
- | Swhile(e, s1) ->
- {sdesc = Swhile(transf_expr s.sloc env Val e, transf_stmt env s1);
- sloc = s.sloc}
- | Sdowhile(s1, e) ->
- {sdesc = Sdowhile(transf_stmt env s1, transf_expr s.sloc env Val e);
- sloc = s.sloc}
- | Sfor(s1, e, s2, s3) ->
- {sdesc = Sfor(transf_stmt env s1, transf_expr s.sloc env Val e,
- transf_stmt env s2, transf_stmt env s3);
- sloc = s.sloc}
- | Sbreak -> s
- | Scontinue -> s
- | Sswitch(e, s1) ->
- {sdesc = Sswitch(transf_expr s.sloc env Val e,
- transf_stmt env s1); sloc = s.sloc}
- | Slabeled(lbl, s) ->
- {sdesc = Slabeled(lbl, transf_stmt env s); sloc = s.sloc}
- | Sgoto lbl -> s
- | Sreturn None -> s
- | Sreturn (Some e) ->
- {sdesc = Sreturn(Some(transf_expr s.sloc env Val e)); sloc = s.sloc}
- | Sblock _ | Sdecl _ ->
- assert false (* should not occur in unblocked code *)
+let transf_stmt env s =
+ Transform.stmt transf_expr env s
(* Functions *)
let transf_fundef env f =
- { f with fd_body = transf_stmt env f.fd_body }
+ Transform.fundef transf_stmt env f
(* Initializers *)