summaryrefslogtreecommitdiff
path: root/cfrontend/Csharpminor.v
diff options
context:
space:
mode:
Diffstat (limited to 'cfrontend/Csharpminor.v')
-rw-r--r--cfrontend/Csharpminor.v13
1 files changed, 12 insertions, 1 deletions
diff --git a/cfrontend/Csharpminor.v b/cfrontend/Csharpminor.v
index ce19f68..1aa536a 100644
--- a/cfrontend/Csharpminor.v
+++ b/cfrontend/Csharpminor.v
@@ -181,7 +181,18 @@ Definition eval_constant (cst: constant) : option val :=
end.
Definition eval_unop := Cminor.eval_unop.
-Definition eval_binop := Cminor.eval_binop.
+
+Definition eval_binop (op: binary_operation)
+ (arg1 arg2: val) (m: mem): option val :=
+ match op, arg1, arg2 with
+ | Cminor.Ocmp c, Vptr b1 n1, Vptr b2 n2 =>
+ if valid_pointer m b1 (Int.signed n1)
+ && valid_pointer m b2 (Int.signed n2)
+ then Cminor.eval_binop op arg1 arg2
+ else None
+ | _, _, _ =>
+ Cminor.eval_binop op arg1 arg2
+ end.
(** Allocation of local variables at function entry. Each variable is
bound to the reference to a fresh block of the appropriate size. *)