summaryrefslogtreecommitdiff
path: root/cparser/AddCasts.ml
diff options
context:
space:
mode:
authorGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2010-07-08 08:57:32 +0000
committerGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2010-07-08 08:57:32 +0000
commit118c148ec89dc0b53bb377cf637cfdcd800f06e5 (patch)
tree7dd709dee9152e1dd98cc220c221793efedf6107 /cparser/AddCasts.ml
parent0f5acbd9a9fbb0f1bfc1500cf76524d6e7a5e702 (diff)
Bug in cparser/AddCasts.ml.
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1376 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'cparser/AddCasts.ml')
-rw-r--r--cparser/AddCasts.ml7
1 files changed, 4 insertions, 3 deletions
diff --git a/cparser/AddCasts.ml b/cparser/AddCasts.ml
index 9ec128d..eb3fa08 100644
--- a/cparser/AddCasts.ml
+++ b/cparser/AddCasts.ml
@@ -26,7 +26,8 @@ open Transform
(* We have the option of materializing all casts or leave "widening"
casts implicit. Widening casts are:
- from a small integer type to a larger integer type,
-- from a small float type to a larger float type,
+ provided both types have the same signedness;
+- from a small float type to a larger float type;
- from a pointer type to void *.
*)
@@ -35,8 +36,8 @@ let omit_widening_casts = ref false
let widening_cast env tfrom tto =
begin match unroll env tfrom, unroll env tto with
| TInt(k1, _), TInt(k2, _) ->
- let r1 = integer_rank k1 and r2 = integer_rank k2 in
- r1 < r2 || (r1 = r2 && is_signed_ikind k1 = is_signed_ikind k2)
+ integer_rank k1 <= integer_rank k2
+ && is_signed_ikind k1 = is_signed_ikind k2
| TFloat(k1, _), TFloat(k2, _) ->
float_rank k1 <= float_rank k2
| TPtr(ty1, _), TPtr(ty2, _) -> is_void_type env ty2