aboutsummaryrefslogtreecommitdiffstats
path: root/arm/ValueAOp.v
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2015-07-19 09:29:45 +0200
committerXavier Leroy <xavier.leroy@inria.fr>2015-07-19 09:29:45 +0200
commit2932b531ceff2cd4573714aeaeb9b4e537d36af8 (patch)
treeed42351e245c076b8cd360d0e753e8c61090e8e5 /arm/ValueAOp.v
parent74d06cfedc4a57fbb0be8772431033120b553ab2 (diff)
downloadcompcert-kvx-2932b531ceff2cd4573714aeaeb9b4e537d36af8.tar.gz
compcert-kvx-2932b531ceff2cd4573714aeaeb9b4e537d36af8.zip
Value analysis: keep track of pointer values that leak through arithmetic operations with undefined behaviors.
Consider (x ^ 1) ^ 1 where x is a intptr_t containing a pointer value. "x ^ 1" evaluates to Vundef in the CompCert semantics, hence the value analysis, in strict mode, gives abstract result Ifptr Pbot (= any number but not a pointer). In relaxed mode, we now give abstract result Ifptr (poffset p) where p is the abstraction of the pointer, thus keeping track of the actual leak of the pointer value.
Diffstat (limited to 'arm/ValueAOp.v')
-rw-r--r--arm/ValueAOp.v4
1 files changed, 2 insertions, 2 deletions
diff --git a/arm/ValueAOp.v b/arm/ValueAOp.v
index a14d6b98..b388bf12 100644
--- a/arm/ValueAOp.v
+++ b/arm/ValueAOp.v
@@ -64,8 +64,8 @@ Definition eval_static_operation (op: operation) (vl: list aval): aval :=
match op, vl with
| Omove, v1::nil => v1
| Ointconst n, nil => I n
- | Ofloatconst n, nil => if propagate_float_constants tt then F n else ftop
- | Osingleconst n, nil => if propagate_float_constants tt then FS n else ftop
+ | Ofloatconst n, nil => if propagate_float_constants tt then F n else ntop
+ | Osingleconst n, nil => if propagate_float_constants tt then FS n else ntop
| Oaddrsymbol id ofs, nil => Ptr (Gl id ofs)
| Oaddrstack ofs, nil => Ptr (Stk ofs)
| Ocast8signed, v1 :: nil => sign_ext 8 v1