diff --git a/src/kernel_services/ast_data/alarms.ml b/src/kernel_services/ast_data/alarms.ml
index ae9503e76ad6f3103eb254f1c1ef9ada04b085c8..2faab4979f1ef4dc46ae06fff1b2c4bf2fe77d1f 100644
--- a/src/kernel_services/ast_data/alarms.ml
+++ b/src/kernel_services/ast_data/alarms.ml
@@ -23,7 +23,8 @@
 open Cil_types
 open Cil_datatype
 
-type overflow_kind = Signed | Unsigned | Signed_downcast | Unsigned_downcast
+type overflow_kind =
+    Signed | Unsigned | Signed_downcast | Unsigned_downcast | Pointer_downcast
 type access_kind = For_reading | For_writing
 type bound_kind = Lower_bound | Upper_bound
 
@@ -32,6 +33,7 @@ let string_of_overflow_kind = function
   | Unsigned -> "unsigned_overflow"
   | Signed_downcast -> "signed_downcast"
   | Unsigned_downcast -> "unsigned_downcast"
+  | Pointer_downcast -> "pointer_downcast"
 
 type alarm =
   | Division_by_zero of exp
@@ -549,6 +551,9 @@ let create_predicate ?(loc=Location.unknown) alarm =
       (* n <= e or e <= n according to bound *)
       let loc = best_loc ~loc e.eloc in
       let t = match kind with
+        | Pointer_downcast ->
+          let t = Logic_utils.expr_to_term ~cast:true e in
+          Logic_const.tcast ~loc t Cil.theMachine.upointType
         | Signed_downcast | Unsigned_downcast ->
           Logic_utils.expr_to_term ~cast:true e
         | _ ->
diff --git a/src/kernel_services/ast_data/alarms.mli b/src/kernel_services/ast_data/alarms.mli
index c301b2e797c6de7ed2675f805bfb997c7edecf29..a369dc60f2b76309b0ac2fed63a1474550724a4d 100644
--- a/src/kernel_services/ast_data/alarms.mli
+++ b/src/kernel_services/ast_data/alarms.mli
@@ -25,9 +25,10 @@
 
 open Cil_types
 
-(** Only signed overflows int are really RTEs. The other kinds may be
-    meaningful nevertheless. *)
-type overflow_kind = Signed | Unsigned | Signed_downcast | Unsigned_downcast
+(** Only signed overflows and pointer downcasts are really RTEs.
+    The other kinds may be meaningful nevertheless. *)
+type overflow_kind =
+    Signed | Unsigned | Signed_downcast | Unsigned_downcast | Pointer_downcast
 
 type access_kind = For_reading | For_writing
 type bound_kind = Lower_bound | Upper_bound
diff --git a/src/kernel_services/ast_queries/logic_const.ml b/src/kernel_services/ast_queries/logic_const.ml
index 8da10c3cf6910de2ce69ffa4b223bd79679c70ca..e9417dd0256ab638e8fe3f476d30be8edbac6c0f 100644
--- a/src/kernel_services/ast_queries/logic_const.ml
+++ b/src/kernel_services/ast_queries/logic_const.ml
@@ -305,6 +305,9 @@ let tat ?(loc=Cil_datatype.Location.unknown) (t,label) =
 
 let told ?(loc=Cil_datatype.Location.unknown) t = tat ~loc (t,old_label)
 
+let tcast ?(loc=Cil_datatype.Location.unknown) t ct =
+  term ~loc (TCastE (ct, t)) (Ctype ct)
+
 let tlogic_coerce ?(loc=Cil_datatype.Location.unknown) t lt =
   term ~loc (TLogic_coerce (lt, t)) lt
 
diff --git a/src/kernel_services/ast_queries/logic_const.mli b/src/kernel_services/ast_queries/logic_const.mli
index c3be4194f94c20ce9dafc1719ca405b9397f19ca..280661c522f5e0027260323c72bf8ba1eb32da41 100644
--- a/src/kernel_services/ast_queries/logic_const.mli
+++ b/src/kernel_services/ast_queries/logic_const.mli
@@ -321,6 +321,9 @@ val tvar: ?loc:Location.t -> logic_var -> term
 (** \result *)
 val tresult: ?loc:Location.t -> typ -> term
 
+(** cast to the given C type *)
+val tcast: ?loc:Location.t -> term -> typ -> term
+
 (** coercion to the given logic type *)
 val tlogic_coerce: ?loc:Location.t -> term -> logic_type -> term
 
diff --git a/src/kernel_services/plugin_entry_points/db.ml b/src/kernel_services/plugin_entry_points/db.ml
index e5ea4748e6b3950a654a49ab29c868d7d79db2c9..2453bded6360dc01a4109b3724d32b37fb135586 100644
--- a/src/kernel_services/plugin_entry_points/db.ml
+++ b/src/kernel_services/plugin_entry_points/db.ml
@@ -1018,6 +1018,7 @@ module RteGen = struct
   let get_pointerCall_status = mk_fun "RteGen.get_pointerCall_status"
   let get_unsignedOv_status = mk_fun "RteGen.get_unsignedOv_status"
   let get_unsignedDownCast_status = mk_fun "RteGen.get_unsignedDownCast_status"
+  let get_pointer_downcast_status = mk_fun "RteGen.get_pointer_downcast_status"
   let get_float_to_int_status = mk_fun "RteGen.get_float_to_int_status"
   let get_finite_float_status = mk_fun "RteGen.get_finite_float_status"
   let get_bool_value_status = mk_fun "RteGen.get_bool_value_status"
diff --git a/src/kernel_services/plugin_entry_points/db.mli b/src/kernel_services/plugin_entry_points/db.mli
index 565c20806a04f78a636ff9dca8a062f9e6af3b87..a54ae74932d0942ba3df7aa1508675e0dda9c5a8 100644
--- a/src/kernel_services/plugin_entry_points/db.mli
+++ b/src/kernel_services/plugin_entry_points/db.mli
@@ -900,6 +900,7 @@ module RteGen : sig
   val get_signed_downCast_status : (unit -> status_accessor) ref
   val get_unsignedOv_status : (unit -> status_accessor) ref
   val get_unsignedDownCast_status : (unit -> status_accessor) ref
+  val get_pointer_downcast_status : (unit -> status_accessor) ref
   val get_float_to_int_status : (unit -> status_accessor) ref
   val get_finite_float_status : (unit -> status_accessor) ref
   val get_bool_value_status : (unit -> status_accessor) ref
diff --git a/src/kernel_services/plugin_entry_points/kernel.ml b/src/kernel_services/plugin_entry_points/kernel.ml
index 4dca12b991c27963dddde65a1dce642c4c9e3016..a7ffdfeb73030844ef69826fe1814b3bdced74c7 100644
--- a/src/kernel_services/plugin_entry_points/kernel.ml
+++ b/src/kernel_services/plugin_entry_points/kernel.ml
@@ -1440,6 +1440,17 @@ module UnsignedDowncast =
                   destination range"
     end)
 
+(* Pointer downcasts are undefined behaviors. *)
+let () = Parameter_customize.set_group analysis_options
+let () = Parameter_customize.do_not_reset_on_copy ()
+module PointerDowncast =
+  True
+    (struct
+      let module_name = "PointerDowncast"
+      let option_name = "-warn-pointer-downcast"
+      let help = "generate alarms when a pointer is converted into an integer \
+                  but may not be in the range of the destination type."
+    end)
 
 (* Not finite floats are ok, but might not always be a behavior the programmer
    wants. *)
diff --git a/src/kernel_services/plugin_entry_points/kernel.mli b/src/kernel_services/plugin_entry_points/kernel.mli
index 87ffd853c1c5593cfb4b3ae4153ea6f521e000f2..04ef6317f0c2e63a44f15a244e79a31947ae9b1c 100644
--- a/src/kernel_services/plugin_entry_points/kernel.mli
+++ b/src/kernel_services/plugin_entry_points/kernel.mli
@@ -540,6 +540,9 @@ module SignedDowncast: Parameter_sig.Bool
 module UnsignedDowncast: Parameter_sig.Bool
 (** Behavior of option "-warn-unsigned-downcast" *)
 
+module PointerDowncast: Parameter_sig.Bool
+(** Behavior of option "-warn-pointer-downcast" *)
+
 module SpecialFloat: Parameter_sig.String
 (** Behavior of option "-warn-special-float" *)
 
diff --git a/src/plugins/rte/flags.ml b/src/plugins/rte/flags.ml
index 5a5efb9c60c333de0bf18346135e72ea20f3f04d..7d17b15a3a9577579b409c2396f89060023f48a8 100644
--- a/src/plugins/rte/flags.ml
+++ b/src/plugins/rte/flags.ml
@@ -36,6 +36,7 @@ type t = {
   unsigned_overflow: bool;
   signed_downcast: bool;
   unsigned_downcast: bool;
+  pointer_downcast: bool;
   float_to_int: bool;
   finite_float: bool;
   pointer_call: bool;
@@ -54,6 +55,7 @@ let all = {
   unsigned_overflow = true;
   signed_downcast = true;
   unsigned_downcast = true;
+  pointer_downcast = true;
   float_to_int = true;
   finite_float = true;
   pointer_call = true;
@@ -72,6 +74,7 @@ let none = {
   unsigned_overflow = false;
   signed_downcast = false;
   unsigned_downcast = false;
+  pointer_downcast = false;
   float_to_int = false;
   finite_float = false;
   pointer_call = false;
@@ -95,6 +98,7 @@ let default
     ?unsigned_overflow
     ?signed_downcast
     ?unsigned_downcast
+    ?pointer_downcast
     ?float_to_int
     ?finite_float
     ?pointer_call
@@ -112,6 +116,7 @@ let default
     unsigned_overflow = option Kernel.UnsignedOverflow.get unsigned_overflow ;
     signed_downcast = option Kernel.SignedDowncast.get signed_downcast ;
     unsigned_downcast = option Kernel.UnsignedDowncast.get unsigned_downcast ;
+    pointer_downcast = option Kernel.PointerDowncast.get pointer_downcast ;
     float_to_int = option Options.DoFloatToInt.get float_to_int ;
     finite_float = option (fun () -> Kernel.SpecialFloat.get () <> "none") finite_float ;
     pointer_call = option Options.DoPointerCall.get pointer_call ;
diff --git a/src/plugins/rte/flags.mli b/src/plugins/rte/flags.mli
index f90a63a3afa4e02c1b7bb15b94c0a68857ae633a..3ea19d53f367e367c1a0e414871403d5bef54d1b 100644
--- a/src/plugins/rte/flags.mli
+++ b/src/plugins/rte/flags.mli
@@ -38,6 +38,7 @@ type t = {
   unsigned_overflow: bool;
   signed_downcast: bool;
   unsigned_downcast: bool;
+  pointer_downcast: bool;
   float_to_int: bool;
   finite_float: bool;
   pointer_call: bool;
@@ -57,6 +58,7 @@ val default :
   ?unsigned_overflow:bool ->
   ?signed_downcast:bool ->
   ?unsigned_downcast:bool ->
+  ?pointer_downcast:bool ->
   ?float_to_int:bool ->
   ?finite_float:bool ->
   ?pointer_call:bool ->
diff --git a/src/plugins/rte/generator.ml b/src/plugins/rte/generator.ml
index 67214fae804fe5ab58da7821c3507b3f8aebb3cd..8c8e697d4dcf846db06cb7c6062fc9b5fd9847a1 100644
--- a/src/plugins/rte/generator.ml
+++ b/src/plugins/rte/generator.ml
@@ -155,6 +155,14 @@ module Unsigned_downcast =
       let additional_parameters = []
     end)
 
+module Pointer_downcast =
+  Make
+    (struct
+      let name = "pointer_downcast"
+      let parameter = Kernel.PointerDowncast.parameter
+      let additional_parameters = []
+    end)
+
 module Float_to_int =
   Make
     (struct
diff --git a/src/plugins/rte/generator.mli b/src/plugins/rte/generator.mli
index 1e1c61ccd3a87124d5ef785ef2ef72e73f23d123..1518a0acc67f22908320d834bb54b1f99c22eec4 100644
--- a/src/plugins/rte/generator.mli
+++ b/src/plugins/rte/generator.mli
@@ -39,6 +39,7 @@ module Signed_overflow: S
 module Signed_downcast: S
 module Unsigned_overflow: S
 module Unsigned_downcast: S
+module Pointer_downcast: S
 module Float_to_int: S
 module Finite_float: S
 module Bool_value: S
diff --git a/src/plugins/rte/register.ml b/src/plugins/rte/register.ml
index ed9296659abc8dc7463e90a2c1ec372b45cd1c8e..8b5afe27c054f83e273da685237efc10d5899d2d 100644
--- a/src/plugins/rte/register.ml
+++ b/src/plugins/rte/register.ml
@@ -93,6 +93,7 @@ let () =
   nojournal_register get_pointerCall_status Pointer_call.accessor;
   nojournal_register get_unsignedOv_status Unsigned_overflow.accessor;
   nojournal_register get_unsignedDownCast_status Unsigned_downcast.accessor;
+  nojournal_register get_pointer_downcast_status Pointer_downcast.accessor;
   nojournal_register get_float_to_int_status Float_to_int.accessor;
   nojournal_register get_finite_float_status Finite_float.accessor;
   nojournal_register get_bool_value_status Bool_value.accessor ;
diff --git a/src/plugins/rte/rte.ml b/src/plugins/rte/rte.ml
index ad09f17f5533787fd4579322c2bd0d2d88e1560c..467d65f1ffd919d19c5ef4f4784c8cef98e9b490 100644
--- a/src/plugins/rte/rte.ml
+++ b/src/plugins/rte/rte.ml
@@ -357,88 +357,42 @@ let shift_overflow_assertion ~signed ~remove_trivial ~on_alarm (exp, op, lexp, r
     end
     else overflow_alarm ()
 
-(* assertion for downcasting an integer to an unsigned integer type
-   without requiring modification of value to reach target domain
-   (well-defined behavior though) *)
-let unsigned_downcast_assertion ~remove_trivial ~on_alarm (ty, exp) =
-  let e_typ = Cil.unrollType (Cil.typeOf exp) in
-  match e_typ with
-  | TInt (kind,_) ->
-    let szTo = Cil.bitsSizeOfBitfield ty in
-    let szFrom = Cil.bitsSizeOf e_typ in
-    (if szTo < szFrom || Cil.isSigned kind then
-       (* case signed to unsigned:
-          requires signed to be >= 0 and also <= max of unsigned size *)
-       (* cast unsigned to unsigned:
-          ok is same bit size ;
-          if target is <, requires <= max target *)
-       let max_ty = Cil.max_unsigned_number szTo in
-       let alarm ?(invalid=false) bk =
-         let b = match bk with
-           | Lower_bound -> Integer.zero
-           | Upper_bound -> max_ty
-         in
-         let a = Alarms.Overflow (Alarms.Unsigned_downcast, exp, b, bk) in
-         on_alarm ~invalid a;
-       in
-       let alarms () =
-         if Cil.isSigned kind then begin (* signed to unsigned *)
-           alarm Upper_bound;
-           alarm Lower_bound;
-         end else (* unsigned to unsigned; cannot overflow in the negative *)
-           alarm Upper_bound;
-       in
-       if remove_trivial then begin
-         match get_expr_val exp with
-         | None -> alarms ()
-         | Some a64 ->
-           if Integer.lt a64 Integer.zero then
-             alarm ~invalid:true Lower_bound
-           else if Integer.gt a64 max_ty then
-             alarm ~invalid:true Upper_bound
-       end
-       else alarms ())
-  | _ -> ()
-
-(* assertion for downcasting an integer to a signed integer type
-   which can raise an implementation defined behavior *)
-let signed_downcast_assertion ~remove_trivial ~on_alarm (ty, exp) =
-  let e_typ = Cil.unrollType (Cil.typeOf exp) in
-  match e_typ with
-  | TInt (kind,_) ->
-    (let szTo = Cil.bitsSizeOfBitfield ty in
-     let szFrom = Cil.bitsSizeOf e_typ in
-     if szTo < szFrom || (szTo == szFrom && not (Cil.isSigned kind)) then
-       (* downcast: the expression result should fit on szTo bits *)
-       let min_ty = Cil.min_signed_number szTo in
-       let max_ty = Cil.max_signed_number szTo in
-       let alarm ?(invalid=false) bk =
-         let b = match bk with
-           | Lower_bound -> min_ty
-           | Upper_bound -> max_ty
-         in
-         let a = Alarms.Overflow (Alarms.Signed_downcast, exp, b, bk) in
-         on_alarm ~invalid a;
-       in
-       let alarms () =
-         if Cil.isSigned kind then begin
-           (* signed to signed *)
-           alarm Upper_bound;
-           alarm Lower_bound
-         end else (* (unsigned to signed; cannot overflow in the negative *)
-           alarm Upper_bound
-       in
-       if remove_trivial then begin
-         match get_expr_val exp with
-         | None -> alarms ()
-         | Some a64 ->
-           (if Integer.lt a64 min_ty then
-              alarm ~invalid:true Lower_bound
-            else if Integer.gt a64 max_ty then
-              alarm ~invalid:true Upper_bound)
-       end
-       else alarms ())
-  | _ -> ()
+(* Assertion for downcasts. *)
+let downcast_assertion ~remove_trivial ~on_alarm (dst_type, exp) =
+  let src_type = Cil.typeOf exp in
+  let src_signed = Cil.isSignedInteger src_type in
+  let dst_signed = Cil.isSignedInteger dst_type in
+  let src_size = Cil.bitsSizeOf src_type in
+  let dst_size = Cil.bitsSizeOfBitfield dst_type in
+  if dst_size < src_size || dst_size == src_size && dst_signed <> src_signed
+  then
+    let dst_min, dst_max =
+      if dst_signed
+      then Cil.min_signed_number dst_size, Cil.max_signed_number dst_size
+      else Integer.zero, Cil.max_unsigned_number dst_size
+    in
+    let overflow_kind =
+      if Cil.isPointerType src_type
+      then Alarms.Pointer_downcast
+      else if dst_signed
+      then Alarms.Signed_downcast
+      else Alarms.Unsigned_downcast
+    in
+    let alarm ?(invalid=false) bound bound_kind =
+      let a = Alarms.Overflow (overflow_kind, exp, bound, bound_kind) in
+      on_alarm ~invalid a;
+    in
+    let alarms () =
+      alarm dst_max Upper_bound;
+      (* unsigned values cannot overflow in the negative *)
+      if src_signed then alarm dst_min Lower_bound;
+    in
+    match remove_trivial, get_expr_val exp with
+    | true, Some a64 ->
+      let invalid = true in
+      if Integer.lt a64 dst_min then alarm ~invalid dst_min  Lower_bound
+      else if Integer.gt a64 dst_max then alarm ~invalid dst_max Upper_bound
+    | _ -> alarms ()
 
 (* assertion for casting a floating-point value to an integer *)
 let float_to_int_assertion ~remove_trivial ~on_alarm (ty, exp) =
diff --git a/src/plugins/rte/rte.mli b/src/plugins/rte/rte.mli
index 766fa82c8568a3ee0a48717c8664e32fd5f7ac61..7c787c279a81d18e1eae71b1683d411036e8874d 100644
--- a/src/plugins/rte/rte.mli
+++ b/src/plugins/rte/rte.mli
@@ -40,8 +40,7 @@ val shift_negative_assertion: exp alarm_gen
 val shift_overflow_assertion: signed:bool -> (exp * binop * exp * exp) alarm_gen
 val mult_sub_add_assertion: signed:bool -> (exp * binop * exp * exp) alarm_gen
 val uminus_assertion: exp alarm_gen
-val signed_downcast_assertion: (typ * exp) alarm_gen
-val unsigned_downcast_assertion: (typ * exp) alarm_gen
+val downcast_assertion: (typ * exp) alarm_gen
 val float_to_int_assertion: (typ * exp) alarm_gen
 val finite_float_assertion: (fkind * exp) alarm_gen
 val pointer_call: (exp * exp list) alarm_gen
diff --git a/src/plugins/rte/visit.ml b/src/plugins/rte/visit.ml
index 2592651085e9ff2cdbdfb3c001d3190e7503343a..61dafe98471f4ed4f86338f62319019ef54b5c44 100644
--- a/src/plugins/rte/visit.ml
+++ b/src/plugins/rte/visit.ml
@@ -86,6 +86,10 @@ class annot_visitor kf flags on_alarm = object (self)
     flags.Flags.unsigned_downcast
     && not (Generator.Unsigned_downcast.is_computed kf)
 
+  method private do_pointer_downcast () =
+    flags.Flags.pointer_downcast
+    && not (Generator.Pointer_downcast.is_computed kf)
+
   method private do_float_to_int () =
     flags.Flags.float_to_int && not (Generator.Float_to_int.is_computed kf)
 
@@ -307,15 +311,16 @@ class annot_visitor kf flags on_alarm = object (self)
         | CastE (ty, e) ->
           (match Cil.unrollType ty, Cil.unrollType (Cil.typeOf e) with
            (* to , from *)
+           | TInt _, TPtr _ when self#do_pointer_downcast () ->
+             self#generate_assertion Rte.downcast_assertion (ty, e)
+
            | TInt(kind,_), TInt (_, _) ->
-             if Cil.isSigned kind then begin
-               if self#do_signed_downcast () then begin
-                 self#generate_assertion Rte.signed_downcast_assertion (ty, e);
-                 self#mark_to_skip e;
-               end
-             end
-             else if self#do_unsigned_downcast () then
-               self#generate_assertion Rte.unsigned_downcast_assertion (ty, e)
+             let signed = Cil.isSigned kind in
+             if signed && self#do_signed_downcast ()
+             || not signed && self#do_unsigned_downcast ()
+             then self#generate_assertion Rte.downcast_assertion (ty, e);
+             if signed && self#do_signed_downcast ()
+             then self#mark_to_skip e;
 
            | TInt _, TFloat _ ->
              if self#do_float_to_int () then
@@ -455,6 +460,7 @@ let annotate ?flags kf =
        comp Signed_downcast.accessor flags.signed_downcast |||
        comp Unsigned_overflow.accessor flags.unsigned_overflow |||
        comp Unsigned_downcast.accessor flags.unsigned_downcast |||
+       comp Pointer_downcast.accessor flags.pointer_downcast |||
        comp Float_to_int.accessor flags.float_to_int |||
        comp Finite_float.accessor flags.finite_float |||
        comp Bool_value.accessor flags.bool_value
diff --git a/src/plugins/value/alarmset.ml b/src/plugins/value/alarmset.ml
index fa27012f076cd1e98586412b941bcc6c1c9411b8..1738ac4a35a476f78bd46f46e5816d3361d7ef16 100644
--- a/src/plugins/value/alarmset.ml
+++ b/src/plugins/value/alarmset.ml
@@ -309,6 +309,7 @@ let emit_alarm kinstr alarm (status:status) =
       | Alarms.Unsigned -> "unsigned overflow"
       | Alarms.Signed_downcast -> "signed downcast"
       | Alarms.Unsigned_downcast -> "unsigned downcast"
+      | Alarms.Pointer_downcast -> "pointer downcast"
     in
     register_alarm str
 
diff --git a/src/plugins/value/engine/evaluation.ml b/src/plugins/value/engine/evaluation.ml
index 43eb4404fe604f3061b01f4241b9ea65c0f87f37..ab391eb3546aa0c66ad31105fa65c3ab7156fca6 100644
--- a/src/plugins/value/engine/evaluation.ml
+++ b/src/plugins/value/engine/evaluation.ml
@@ -665,7 +665,7 @@ module Make
     in
     cast_integer Alarms.Signed_downcast expr ~src ~dst value
 
-  let cast_int_to_int expr ~src ~dst value =
+  let cast_int_to_int expr ~ptr ~src ~dst value =
     (* Regain some precision in case a transfer function was imprecise.
        This should probably be done in the transfer function, though. *)
     let value =
@@ -675,16 +675,19 @@ module Make
     in
     if Eval_typ.range_inclusion src dst
     then return value (* Upcast, nothing to check. *)
-    else if dst.i_signed then (* Signed downcast. *)
-      if Kernel.SignedDowncast.get ()
-      then cast_integer Alarms.Signed_downcast expr ~src ~dst value
-      else if Value_parameters.WarnSignedConvertedDowncast.get ()
+    else
+      let overflow_kind, warn =
+        if ptr
+        then Alarms.Pointer_downcast, Kernel.PointerDowncast.get
+        else if dst.i_signed
+        then Alarms.Signed_downcast, Kernel.SignedDowncast.get
+        else Alarms.Unsigned_downcast, Kernel.UnsignedDowncast.get
+      in
+      if warn ()
+      then cast_integer overflow_kind expr ~src ~dst value
+      else if dst.i_signed && Value_parameters.WarnSignedConvertedDowncast.get ()
       then relaxed_signed_downcast expr ~src ~dst value
       else return (Value.rewrap_integer dst value)
-    else (* Unsigned downcast. *)
-    if Kernel.UnsignedDowncast.get ()
-    then cast_integer Alarms.Unsigned_downcast expr ~src ~dst value
-    else return (Value.rewrap_integer dst value)
 
   (* Re-export type here *)
   type scalar_typ = Eval_typ.scalar_typ =
@@ -728,15 +731,17 @@ module Make
     | Some src_type, Some dst_type ->
       let value, alarms =
         match src_type, dst_type with
-        | (TSInt src | TSPtr src), (TSInt dst | TSPtr dst) ->
-          cast_int_to_int ~src ~dst expr value
+        | TSPtr src, TSInt dst ->
+          cast_int_to_int ~ptr:true ~src ~dst expr value
+        | TSInt src, (TSInt dst | TSPtr dst) ->
+          cast_int_to_int ~ptr:false ~src ~dst expr value
         | TSFloat src, (TSInt dst | TSPtr dst)  ->
           restrict_float ~reduce:true ~assume_finite:true expr src value >>=
           truncate_float src dst expr
         | (TSInt _ | TSPtr _), TSFloat _ ->
           (* Cannot overflow with 32 bits float. *)
-          `Value value, Alarmset.none
-        | TSFloat _, TSFloat _ -> `Value value, Alarmset.none
+          return value
+        | TSFloat _, TSFloat _ | TSPtr _, TSPtr _ -> return value
       in
       value >>- Value.forward_cast ~src_type ~dst_type, alarms
 
diff --git a/src/plugins/variadic/tests/known/oracle/printf_garbled_mix.res.oracle b/src/plugins/variadic/tests/known/oracle/printf_garbled_mix.res.oracle
index ec9df06d3ed29feb21b4fef6d0321d049ac1d8aa..545c7824113ee498d7e686c7b3111bcb02302b1a 100644
--- a/src/plugins/variadic/tests/known/oracle/printf_garbled_mix.res.oracle
+++ b/src/plugins/variadic/tests/known/oracle/printf_garbled_mix.res.oracle
@@ -25,6 +25,8 @@
   Assigning imprecise value to b.
   The imprecision originates from Arithmetic
   {tests/known/printf_garbled_mix.c:6}
+[eva:alarm] tests/known/printf_garbled_mix.c:7: Warning: 
+  pointer downcast. assert (unsigned int)b ≤ 2147483647;
 [eva] using specification for function printf_va_1
 [eva] tests/known/printf_garbled_mix.c:8: 
   Frama_C_show_each_nb_printed: [-2147483648..2147483647]
@@ -67,6 +69,7 @@ void main(void)
 {
   int a[2] = {1, 2};
   int *b = (int *)((unsigned int)(a) * (unsigned int)2);
+  /*@ assert Eva: pointer_downcast: (unsigned int)b ≤ 2147483647; */
   int nb_printed = printf_va_1("%d",(int)b);
   Frama_C_show_each_nb_printed(nb_printed);
   b = (int *)0;
diff --git a/tests/builtins/oracle/Longinit_sequencer.res.oracle b/tests/builtins/oracle/Longinit_sequencer.res.oracle
index 2a0c3fd82a978552927c8aed7b96e5f48b92d07a..7593544dbd939e453a2870b1e76c873fc147295a 100644
--- a/tests/builtins/oracle/Longinit_sequencer.res.oracle
+++ b/tests/builtins/oracle/Longinit_sequencer.res.oracle
@@ -2,17 +2,14 @@
 [kernel] Parsing tests/builtins/long_init.c (with preprocessing)
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
-[eva] tests/builtins/long_init.c:34: 
-  Assigning imprecise value to garbled_mix.
-  The imprecision originates from Arithmetic {tests/builtins/long_init.c:34}
+[eva:alarm] tests/builtins/long_init.c:34: Warning: 
+  pointer downcast. assert (unsigned int)"abc" ≤ 127;
 [eva] Initial state computed
 [eva:initial-state] Values of globals at initialization
   nondet ∈ [--..--]
   a1[0..9] ∈ {0}
   stuff ∈ {0}
-  garbled_mix ∈
-             {{ garbled mix of &{"abc"}
-              (origin: Arithmetic {tests/builtins/long_init.c:34}) }}
+  garbled_mix ∈ {{ "abc" }}
   s ∈ {{ "abc" }}
   pr ∈ {0}
   pr2 ∈ {0}
@@ -73,6 +70,8 @@
 [eva] tests/builtins/long_init.c:73: 
   Call to builtin Frama_C_malloc_fresh for function malloc
 [eva] tests/builtins/long_init.c:73: allocating variable __malloc_init_inner_l73
+[eva:alarm] tests/builtins/long_init.c:74: Warning: 
+  pointer downcast. assert (unsigned int)alloc1 ≤ 2147483647;
 [eva] tests/builtins/long_init.c:75: 
   Call to builtin Frama_C_malloc_fresh for function malloc
 [eva] tests/builtins/long_init.c:75: allocating variable __malloc_init_inner_l75
@@ -130,9 +129,7 @@
        .d[7] ∈ {21.875}
        .d[8] ∈ {25.}
        .d[9] ∈ {28.125}
-  garbled_mix ∈
-             {{ garbled mix of &{"abc"}
-              (origin: Arithmetic {tests/builtins/long_init.c:34}) }}
+  garbled_mix ∈ {{ "abc" }}
   s ∈ {{ "abc" }}
   pr ∈ ESCAPINGADDR
   pr2 ∈ ESCAPINGADDR
@@ -170,6 +167,8 @@
 [eva] tests/builtins/long_init.c:104: allocating variable __malloc_main_l104
 [eva] Recording results for main
 [eva] done for function main
+[eva] tests/builtins/long_init.c:34: 
+  cannot evaluate ACSL term, unsupported ACSL construct: constant strings
 [eva] Saving globals state after call to function: init_inner
 Values at end of function dmin:
   __retres ∈ [93.9166666667 .. 110.791666667]
@@ -297,17 +296,14 @@ Values at end of function main:
   __retres ∈ {0}[kernel] Parsing tests/builtins/long_init2.c (with preprocessing)
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
-[eva] tests/builtins/long_init2.c:34: 
-  Assigning imprecise value to garbled_mix.
-  The imprecision originates from Arithmetic {tests/builtins/long_init2.c:34}
+[eva:alarm] tests/builtins/long_init2.c:34: Warning: 
+  pointer downcast. assert (unsigned int)"abc" ≤ 127;
 [eva] Initial state computed
 [eva:initial-state] Values of globals at initialization
   nondet ∈ [--..--]
   a1[0..9] ∈ {0}
   stuff ∈ {0}
-  garbled_mix ∈
-             {{ garbled mix of &{"abc"}
-              (origin: Arithmetic {tests/builtins/long_init2.c:34}) }}
+  garbled_mix ∈ {{ "abc" }}
   s ∈ {{ "abc" }}
   another_global ∈ {42}
   pr ∈ {0}
@@ -325,7 +321,6 @@ Values at end of function main:
   Call to builtin Frama_C_load_state for function init_inner
 [eva] Skipping call to init_inner, loading globals state from file:
   tests/builtins/result/Longinit_sequencer.sav
-[eva] Warning: importing garbled mix, locations may have changed
 [eva] Warning: variable `r' is not global, possibly an escaping value; ignoring
 [eva] Warning: variable `r2' is not global, possibly an escaping value; ignoring
 [eva] Warning: variable `r2' is not global, possibly an escaping value; ignoring
@@ -371,9 +366,7 @@ Values at end of function main:
        .d[7] ∈ {21.875}
        .d[8] ∈ {25.}
        .d[9] ∈ {28.125}
-  garbled_mix ∈
-             {{ garbled mix of &{"abc"}
-              (origin: Arithmetic {tests/builtins/long_init.c:34}) }}
+  garbled_mix ∈ {{ "abc" }}
   s ∈ {{ "abc" }}
   another_global ∈ {42}
   pr ∈ ESCAPINGADDR
@@ -446,6 +439,8 @@ Values at end of function main:
 [eva] tests/builtins/long_init2.c:104: allocating variable __malloc_main_l104
 [eva] Recording results for main
 [eva] done for function main
+[eva] tests/builtins/long_init2.c:34: 
+  cannot evaluate ACSL term, unsupported ACSL construct: constant strings
 [eva] Saving globals state after call to function: init_outer
 
 
@@ -539,17 +534,14 @@ Values at end of function main:
   __retres ∈ {0}[kernel] Parsing tests/builtins/long_init3.c (with preprocessing)
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
-[eva] tests/builtins/long_init3.c:34: 
-  Assigning imprecise value to garbled_mix.
-  The imprecision originates from Arithmetic {tests/builtins/long_init3.c:34}
+[eva:alarm] tests/builtins/long_init3.c:34: Warning: 
+  pointer downcast. assert (unsigned int)"abc" ≤ 127;
 [eva] Initial state computed
 [eva:initial-state] Values of globals at initialization
   nondet ∈ [--..--]
   a1[0..9] ∈ {0}
   stuff ∈ {0}
-  garbled_mix ∈
-             {{ garbled mix of &{"abc"}
-              (origin: Arithmetic {tests/builtins/long_init3.c:34}) }}
+  garbled_mix ∈ {{ "abc" }}
   s ∈ {{ "abc" }}
   another_global ∈ {42}
   yet_another_global ∈ {43}
@@ -566,7 +558,6 @@ Values at end of function main:
   Call to builtin Frama_C_load_state for function init_outer
 [eva] Skipping call to init_outer, loading globals state from file:
   tests/builtins/result/Longinit_sequencer.sav
-[eva] Warning: importing garbled mix, locations may have changed
 [eva] Warning: found new global variable `yet_another_global'
 [eva] tests/builtins/long_init3.c:92: 
   Frama_C_dump_each:
@@ -607,9 +598,7 @@ Values at end of function main:
        .d[7] ∈ {21.875}
        .d[8] ∈ {25.}
        .d[9] ∈ {28.125}
-  garbled_mix ∈
-             {{ garbled mix of &{"abc"}
-              (origin: Arithmetic {tests/builtins/long_init.c:34}) }}
+  garbled_mix ∈ {{ "abc" }}
   s ∈ {{ "abc" }}
   another_global ∈ {42}
   yet_another_global ∈ {43}
@@ -683,6 +672,8 @@ Values at end of function main:
 [eva] tests/builtins/long_init3.c:104: allocating variable __malloc_main_l104
 [eva] Recording results for main
 [eva] done for function main
+[eva] tests/builtins/long_init3.c:34: 
+  cannot evaluate ACSL term, unsupported ACSL construct: constant strings
 
 
 Values at end of function dmin:
diff --git a/tests/builtins/oracle/alloc.0.res.oracle b/tests/builtins/oracle/alloc.0.res.oracle
index 257776baaff09cd5091b410914f02fdfcbe6fadc..b124e2220d17a6d8a85d3bb9dc74b91e716d5a75 100644
--- a/tests/builtins/oracle/alloc.0.res.oracle
+++ b/tests/builtins/oracle/alloc.0.res.oracle
@@ -34,6 +34,8 @@
   all target addresses were invalid. This path is assumed to be dead.
 [eva] tests/builtins/alloc.c:25: Call to builtin Frama_C_malloc_fresh
 [eva] tests/builtins/alloc.c:25: allocating variable __malloc_main_l25
+[eva:alarm] tests/builtins/alloc.c:26: Warning: 
+  pointer downcast. assert (unsigned int)q ≤ 2147483647;
 [eva:alarm] tests/builtins/alloc.c:26: Warning: 
   signed overflow. assert -2147483648 ≤ -((int)q);
 [eva:alarm] tests/builtins/alloc.c:26: Warning: 
diff --git a/tests/builtins/oracle/alloc.1.res.oracle b/tests/builtins/oracle/alloc.1.res.oracle
index b4990cc4a79455a5bf971a573423df33d4f1d5fb..48c4356d116b6568051f121123841c9f5b03d047 100644
--- a/tests/builtins/oracle/alloc.1.res.oracle
+++ b/tests/builtins/oracle/alloc.1.res.oracle
@@ -15,6 +15,8 @@
   ch ∈ {44}
 [eva] tests/builtins/alloc.c:50: Call to builtin Frama_C_malloc_fresh
 [eva] tests/builtins/alloc.c:50: allocating variable __malloc_main_abs_l50
+[eva:alarm] tests/builtins/alloc.c:51: Warning: 
+  pointer downcast. assert (unsigned int)q ≤ 2147483647;
 [eva:alarm] tests/builtins/alloc.c:51: Warning: 
   signed overflow. assert -2147483648 ≤ -((int)q);
 [eva:alarm] tests/builtins/alloc.c:51: Warning: 
@@ -24,6 +26,8 @@
   The imprecision originates from Arithmetic {tests/builtins/alloc.c:51}
 [eva:alarm] tests/builtins/alloc.c:54: Warning: 
   out of bounds write. assert \valid(r);
+[eva:alarm] tests/builtins/alloc.c:54: Warning: 
+  pointer downcast. assert (unsigned int)r ≤ 2147483647;
 [eva:alarm] tests/builtins/alloc.c:56: Warning: 
   signed overflow. assert -2147483648 ≤ *q + 1;
 [eva:alarm] tests/builtins/alloc.c:56: Warning: 
diff --git a/tests/builtins/oracle/alloc_weak.res.oracle b/tests/builtins/oracle/alloc_weak.res.oracle
index 5a584e372684c98e4aa9b566bf7ddcda96c4ca45..7705984008d4c08d656c18cda171bb1d1adb99e5 100644
--- a/tests/builtins/oracle/alloc_weak.res.oracle
+++ b/tests/builtins/oracle/alloc_weak.res.oracle
@@ -41,6 +41,10 @@
   Called from tests/builtins/alloc_weak.c:73.
 [eva] tests/builtins/alloc_weak.c:37: Call to builtin malloc
 [eva] tests/builtins/alloc_weak.c:37: allocating variable __malloc_main2_l37
+[eva:alarm] tests/builtins/alloc_weak.c:37: Warning: 
+  pointer downcast.
+  assert (unsigned int)tmp ≤ 2147483647;
+  (tmp from malloc(sizeof(int)))
 [eva] tests/builtins/alloc_weak.c:40: 
   Trace partitioning superposing up to 100 states
 [eva] tests/builtins/alloc_weak.c:40: 
diff --git a/tests/builtins/oracle/imprecise-malloc-free.res.oracle b/tests/builtins/oracle/imprecise-malloc-free.res.oracle
index 82e150fd29421edf85c87ee0fc822d57ea050e75..4d7ac635f76867055ff5101b207043750e18500c 100644
--- a/tests/builtins/oracle/imprecise-malloc-free.res.oracle
+++ b/tests/builtins/oracle/imprecise-malloc-free.res.oracle
@@ -4,6 +4,10 @@
 [eva] Initial state computed
 [eva:initial-state] Values of globals at initialization
   i ∈ [--..--]
+[eva:alarm] tests/builtins/imprecise-malloc-free.c:12: Warning: 
+  pointer downcast. assert (unsigned int)(&size1 + i) ≤ 2147483647;
+[eva:alarm] tests/builtins/imprecise-malloc-free.c:13: Warning: 
+  pointer downcast. assert (unsigned int)(&size2) ≤ 2147483647;
 [eva:alarm] tests/builtins/imprecise-malloc-free.c:13: Warning: 
   signed overflow. assert -2147483648 ≤ i + (int)((int)(&size2) >> 1);
 [eva:alarm] tests/builtins/imprecise-malloc-free.c:13: Warning: 
@@ -12,6 +16,8 @@
   Assigning imprecise value to size2.
   The imprecision originates from Arithmetic
   {tests/builtins/imprecise-malloc-free.c:13}
+[eva:alarm] tests/builtins/imprecise-malloc-free.c:14: Warning: 
+  pointer downcast. assert (unsigned int)(&i) ≤ 2147483647;
 [eva] tests/builtins/imprecise-malloc-free.c:14: Call to builtin malloc
 [eva] tests/builtins/imprecise-malloc-free.c:14: 
   allocating variable __malloc_main_l14
@@ -30,15 +36,25 @@
   (origin: Arithmetic {tests/builtins/imprecise-malloc-free.c:19}) }}
 [eva:alarm] tests/builtins/imprecise-malloc-free.c:21: Warning: 
   out of bounds write. assert \valid(p);
+[eva:alarm] tests/builtins/imprecise-malloc-free.c:21: Warning: 
+  pointer downcast. assert (unsigned int)(p + 1) ≤ 2147483647;
 [eva:alarm] tests/builtins/imprecise-malloc-free.c:22: Warning: 
   out of bounds write. assert \valid(q);
+[eva:alarm] tests/builtins/imprecise-malloc-free.c:22: Warning: 
+  pointer downcast. assert (unsigned int)(q + 2) ≤ 2147483647;
 [eva:alarm] tests/builtins/imprecise-malloc-free.c:23: Warning: 
   out of bounds write. assert \valid(r);
+[eva:alarm] tests/builtins/imprecise-malloc-free.c:23: Warning: 
+  pointer downcast. assert (unsigned int)(r + 3) ≤ 2147483647;
+[eva:alarm] tests/builtins/imprecise-malloc-free.c:25: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 2147483647;
 [eva] tests/builtins/imprecise-malloc-free.c:25: Call to builtin free
 [eva:alarm] tests/builtins/imprecise-malloc-free.c:25: Warning: 
   function free: precondition 'freeable' got status unknown.
 [eva:malloc] tests/builtins/imprecise-malloc-free.c:25: 
   weak free on bases: {__malloc_main_l14}
+[eva:alarm] tests/builtins/imprecise-malloc-free.c:26: Warning: 
+  pointer downcast. assert (unsigned int)r ≤ 2147483647;
 [eva] tests/builtins/imprecise-malloc-free.c:26: Call to builtin free
 [eva:alarm] tests/builtins/imprecise-malloc-free.c:26: Warning: 
   function free: precondition 'freeable' got status unknown.
diff --git a/tests/builtins/oracle/imprecise.res.oracle b/tests/builtins/oracle/imprecise.res.oracle
index 35235461d13ed2ecd8659d12fcde6992bb47ce76..f93b938207e84054d6ecd4daf5c6a9740816884a 100644
--- a/tests/builtins/oracle/imprecise.res.oracle
+++ b/tests/builtins/oracle/imprecise.res.oracle
@@ -48,6 +48,8 @@
 [eva] Done for function invalid_assigns_imprecise
 [eva] computing for function write_garbled <- main.
   Called from tests/builtins/imprecise.c:145.
+[eva:alarm] tests/builtins/imprecise.c:19: Warning: 
+  pointer downcast. assert (unsigned int)(&k) ≤ 2147483647;
 [eva] tests/builtins/imprecise.c:19: 
   Assigning imprecise value to p.
   The imprecision originates from Arithmetic {tests/builtins/imprecise.c:19}
@@ -78,6 +80,8 @@
   s1.[bits 0 to ..] ∈ {0} or UNINITIALIZED
   s2.[bits 0 to ..] ∈ {0} or UNINITIALIZED
   ==END OF DUMP==
+[eva:alarm] tests/builtins/imprecise.c:22: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 2147483647;
 [eva] Recording results for write_garbled
 [from] Computing for function write_garbled
 [from] Done for function write_garbled
@@ -105,6 +109,8 @@
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva:alarm] tests/builtins/imprecise.c:53: Warning: 
   out of bounds write. assert \valid(p2);
+[eva:alarm] tests/builtins/imprecise.c:53: Warning: 
+  pointer downcast. assert (unsigned int)(&addr) ≤ 2147483647;
 [eva:alarm] tests/builtins/imprecise.c:56: Warning: 
   out of bounds write. assert \valid(p4);
 [eva:alarm] tests/builtins/imprecise.c:58: Warning: 
@@ -117,9 +123,8 @@
 [eva] Done for function abstract_structs
 [eva] computing for function cast_address <- main.
   Called from tests/builtins/imprecise.c:147.
-[eva] tests/builtins/imprecise.c:66: 
-  Assigning imprecise value to c1.
-  The imprecision originates from Arithmetic {tests/builtins/imprecise.c:66}
+[eva:alarm] tests/builtins/imprecise.c:66: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 127;
 [eva:alarm] tests/builtins/imprecise.c:68: Warning: 
   signed overflow. assert -2147483648 ≤ (int)*((char *)(&p)) + 0;
 [eva:alarm] tests/builtins/imprecise.c:68: Warning: 
@@ -276,9 +281,7 @@
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function cast_address:
   p ∈ {{ &x }}
-  c1 ∈
-    {{ garbled mix of &{x}
-     (origin: Arithmetic {tests/builtins/imprecise.c:66}) }}
+  c1 ∈ {{ (char)&x }}
   c2# ∈ {{ (? *)&x }}%32, bits 0 to 7 
   c3 ∈
     {{ garbled mix of &{x}
@@ -621,6 +624,8 @@
 [eva] Done for function invalid_assigns_imprecise
 [eva] computing for function write_garbled <- main.
   Called from tests/builtins/imprecise.c:145.
+[eva:alarm] tests/builtins/imprecise.c:19: Warning: 
+  pointer downcast. assert (unsigned int)(&k) ≤ 2147483647;
 [eva:alarm] tests/builtins/imprecise.c:20: Warning: 
   out of bounds write. assert \valid(p);
 [eva] tests/builtins/imprecise.c:21: 
@@ -657,6 +662,8 @@
   S_0_S_p_gm_null[0..1] ∈ [--..--]
   S_1_S_p_gm_null[0..1] ∈ [--..--]
   ==END OF DUMP==
+[eva:alarm] tests/builtins/imprecise.c:22: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 2147483647;
 [eva] Recording results for write_garbled
 [from] Computing for function write_garbled
 [from] Done for function write_garbled
@@ -678,6 +685,8 @@
 [eva] tests/builtins/imprecise.c:51: Call to builtin memset
 [eva:alarm] tests/builtins/imprecise.c:53: Warning: 
   out of bounds write. assert \valid(p2);
+[eva:alarm] tests/builtins/imprecise.c:53: Warning: 
+  pointer downcast. assert (unsigned int)(&addr) ≤ 2147483647;
 [eva:alarm] tests/builtins/imprecise.c:56: Warning: 
   out of bounds write. assert \valid(p4);
 [eva:alarm] tests/builtins/imprecise.c:58: Warning: 
@@ -690,6 +699,8 @@
 [eva] Done for function abstract_structs
 [eva] computing for function cast_address <- main.
   Called from tests/builtins/imprecise.c:147.
+[eva:alarm] tests/builtins/imprecise.c:66: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 127;
 [eva:alarm] tests/builtins/imprecise.c:68: Warning: 
   signed overflow. assert -2147483648 ≤ (int)*((char *)(&p)) + 0;
 [eva:alarm] tests/builtins/imprecise.c:68: Warning: 
@@ -826,9 +837,7 @@
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function cast_address:
   p ∈ {{ &x }}
-  c1 ∈
-    {{ garbled mix of &{x}
-     (origin: Arithmetic {tests/builtins/imprecise.c:66}) }}
+  c1 ∈ {{ (char)&x }}
   c2# ∈ {{ (? *)&x }}%32, bits 0 to 7 
   c3 ∈
     {{ garbled mix of &{x}
diff --git a/tests/builtins/oracle/memchr.res.oracle b/tests/builtins/oracle/memchr.res.oracle
index 228d7406ba2bb1a8b76ab084431e8a9005743923..4fbe20f941e39805a6270ea36816a8f5df791524 100644
--- a/tests/builtins/oracle/memchr.res.oracle
+++ b/tests/builtins/oracle/memchr.res.oracle
@@ -477,6 +477,8 @@
 [eva] Done for function memchr_bitfields2
 [eva] computing for function memchr_escaping <- main.
   Called from tests/builtins/memchr.c:662.
+[eva:alarm] tests/builtins/memchr.c:264: Warning: 
+  pointer downcast. assert (unsigned int)(&x) ≤ 2147483647;
 [eva:locals-escaping] tests/builtins/memchr.c:264: Warning: 
   locals {x} escaping the scope of a block of memchr_escaping through s
 [eva] tests/builtins/memchr.c:267: Call to builtin memchr
diff --git a/tests/builtins/oracle/memcpy.res.oracle b/tests/builtins/oracle/memcpy.res.oracle
index 8e73401933cf18244067ab5c84f7b50c269d724f..68da16922725ebdd4a044ba722aef0cc200d86fe 100644
--- a/tests/builtins/oracle/memcpy.res.oracle
+++ b/tests/builtins/oracle/memcpy.res.oracle
@@ -128,6 +128,8 @@
   function memcpy: precondition 'valid_src' got status valid.
 [eva] tests/builtins/memcpy.c:85: 
   function memcpy: precondition 'separation' got status valid.
+[eva:alarm] tests/builtins/memcpy.c:87: Warning: 
+  pointer downcast. assert (unsigned int)((struct t1 *)t) ≤ 2147483647;
 [eva] tests/builtins/memcpy.c:87: Call to builtin memcpy
 [eva] tests/builtins/memcpy.c:87: 
   function memcpy: precondition 'valid_dest' got status valid.
@@ -135,6 +137,8 @@
   function memcpy: precondition 'valid_src' got status unknown.
 [eva] tests/builtins/memcpy.c:87: 
   function memcpy: precondition 'separation' got status valid.
+[eva:alarm] tests/builtins/memcpy.c:89: Warning: 
+  pointer downcast. assert (unsigned int)(&v4) ≤ 2147483647;
 [eva] tests/builtins/memcpy.c:89: Call to builtin memcpy
 [eva:alarm] tests/builtins/memcpy.c:89: Warning: 
   function memcpy: precondition 'valid_dest' got status unknown.
@@ -145,6 +149,10 @@
 [kernel] tests/builtins/memcpy.c:89: 
   writing somewhere in {NULL; v4} because of Arithmetic
                                  {tests/builtins/memcpy.c:89}.
+[eva:alarm] tests/builtins/memcpy.c:90: Warning: 
+  pointer downcast. assert (unsigned int)((struct t1 *)t) ≤ 2147483647;
+[eva:alarm] tests/builtins/memcpy.c:91: Warning: 
+  pointer downcast. assert (unsigned int)(&v5) ≤ 2147483647;
 [eva] tests/builtins/memcpy.c:91: Call to builtin memcpy
 [eva:alarm] tests/builtins/memcpy.c:91: Warning: 
   function memcpy: precondition 'valid_dest' got status unknown.
@@ -452,6 +460,7 @@
 [from] Non-terminating function main_all (no dependencies)
 [from] Done for function main_all
 [eva] done for function main_all
+[scope:rm_asserts] removing 1 assertion(s)
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function init:
   src[0] ∈ {1}
@@ -1871,6 +1880,15 @@
             tried with Eva.
 [    -    ] Assertion (file tests/builtins/memcpy.c, line 152)
             tried with Eva.
+[    -    ] Assertion 'Eva,pointer_downcast' (file tests/builtins/memcpy.c, line 87)
+            tried with Eva.
+[    -    ] Assertion 'Eva,pointer_downcast' (file tests/builtins/memcpy.c, line 89)
+            tried with Eva.
+[ Partial ] Assertion 'Eva,pointer_downcast' (file tests/builtins/memcpy.c, line 90)
+            By RedundantAlarms, with pending:
+             - Assertion 'Eva,pointer_downcast' (file tests/builtins/memcpy.c, line 87)
+[    -    ] Assertion 'Eva,pointer_downcast' (file tests/builtins/memcpy.c, line 91)
+            tried with Eva.
 [  Valid  ] Instance of 'Pre-condition 'valid_dest'' at call 'memcpy' (file tests/builtins/memcpy.c, line 68)
 
             by Eva.
@@ -2221,8 +2239,9 @@
 --- Status Report Summary
 --------------------------------------------------------------------------------
    162 Completely validated
+     1 Locally validated
    239 Considered valid
-    29 To be validated
+    32 To be validated
      4 Alarms emitted
-   434 Total
+   438 Total
 --------------------------------------------------------------------------------
diff --git a/tests/builtins/oracle/memset.res.oracle b/tests/builtins/oracle/memset.res.oracle
index c53d0987526cc622b257198546a75defbd30cf08..e2c146788658bd30ae5e489e1134b1800830daf9 100644
--- a/tests/builtins/oracle/memset.res.oracle
+++ b/tests/builtins/oracle/memset.res.oracle
@@ -25,6 +25,8 @@
   function memset: precondition 'valid_s' got status valid.
 [eva] share/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
+[eva:alarm] tests/builtins/memset.c:34: Warning: 
+  pointer downcast. assert (unsigned int)((int *)t2) ≤ 2147483647;
 [eva] tests/builtins/memset.c:34: Call to builtin memset
 [eva:alarm] tests/builtins/memset.c:34: Warning: 
   function memset: precondition 'valid_s' got status unknown.
@@ -42,6 +44,8 @@
 [eva] tests/builtins/memset.c:38: Call to builtin memset
 [eva:alarm] tests/builtins/memset.c:38: Warning: 
   function memset: precondition 'valid_s' got status invalid.
+[eva:alarm] tests/builtins/memset.c:41: Warning: 
+  pointer downcast. assert (unsigned int)((int *)t1) ≤ 2147483647;
 [eva] tests/builtins/memset.c:41: Call to builtin memset
 [eva] tests/builtins/memset.c:41: 
   function memset: precondition 'valid_s' got status valid.
diff --git a/tests/builtins/oracle/strchr.res.oracle b/tests/builtins/oracle/strchr.res.oracle
index 8a69adef2398b5bbf8d7160b7d1a3e684b8d0e90..21fd920919affc8afd1710f3d43042b975c924b3 100644
--- a/tests/builtins/oracle/strchr.res.oracle
+++ b/tests/builtins/oracle/strchr.res.oracle
@@ -316,6 +316,8 @@
 [eva] Done for function strchr_bitfields2
 [eva] computing for function strchr_escaping <- main.
   Called from tests/builtins/strchr.c:556.
+[eva:alarm] tests/builtins/strchr.c:258: Warning: 
+  pointer downcast. assert (unsigned int)(&x) ≤ 2147483647;
 [eva:locals-escaping] tests/builtins/strchr.c:258: Warning: 
   locals {x} escaping the scope of a block of strchr_escaping through s
 [eva] tests/builtins/strchr.c:261: Call to builtin strchr
@@ -669,9 +671,13 @@
 [eva] Done for function strchr_invalid
 [eva] computing for function strchr_garbled_mix_in_char <- main.
   Called from tests/builtins/strchr.c:562.
+[eva:alarm] tests/builtins/strchr.c:541: Warning: 
+  pointer downcast. assert (unsigned int)(&x) ≤ 2147483647;
 [eva] tests/builtins/strchr.c:541: 
   Assigning imprecise value to garbled.
   The imprecision originates from Arithmetic {tests/builtins/strchr.c:541}
+[eva:alarm] tests/builtins/strchr.c:542: Warning: 
+  pointer downcast. assert (unsigned int)garbled ≤ 2147483647;
 [eva] tests/builtins/strchr.c:542: Call to builtin strchr
 [eva:alarm] tests/builtins/strchr.c:542: Warning: 
   function strchr: precondition 'valid_string_s' got status invalid.
diff --git a/tests/builtins/oracle/strlen.res.oracle b/tests/builtins/oracle/strlen.res.oracle
index 7d20e2bba7eacaab18db9c9debc5ceeb2f032fbe..dcc09a3de5d1cf947b9d8f050733884324be3c76 100644
--- a/tests/builtins/oracle/strlen.res.oracle
+++ b/tests/builtins/oracle/strlen.res.oracle
@@ -261,6 +261,8 @@
 [eva] Done for function bitfields2
 [eva] computing for function escaping <- main.
   Called from tests/builtins/strlen.c:342.
+[eva:alarm] tests/builtins/strlen.c:222: Warning: 
+  pointer downcast. assert (unsigned int)(&x) ≤ 2147483647;
 [eva:locals-escaping] tests/builtins/strlen.c:222: Warning: 
   locals {x} escaping the scope of a block of escaping through s
 [eva] tests/builtins/strlen.c:225: Call to builtin strlen
diff --git a/tests/builtins/oracle/strnlen2.res.oracle b/tests/builtins/oracle/strnlen2.res.oracle
index 903c30f5d3a4cffb4f6aae6f5439d141e2fed5a3..392940b6cb6e3312cb5941f61892dfa13cb007c0 100644
--- a/tests/builtins/oracle/strnlen2.res.oracle
+++ b/tests/builtins/oracle/strnlen2.res.oracle
@@ -261,6 +261,8 @@
 [eva] Done for function bitfields2
 [eva] computing for function escaping <- main.
   Called from tests/builtins/strnlen2.c:522.
+[eva:alarm] tests/builtins/strnlen2.c:196: Warning: 
+  pointer downcast. assert (unsigned int)(&x) ≤ 2147483647;
 [eva:locals-escaping] tests/builtins/strnlen2.c:196: Warning: 
   locals {x} escaping the scope of a block of escaping through s
 [eva] tests/builtins/strnlen2.c:199: Call to builtin strnlen
diff --git a/tests/builtins/oracle/wcslen.res.oracle b/tests/builtins/oracle/wcslen.res.oracle
index f5a97cc85744af051d76551bd0250596ac7f074f..784bf02c5cf4f24b9aa67db81b8cf442ed7c0e06 100644
--- a/tests/builtins/oracle/wcslen.res.oracle
+++ b/tests/builtins/oracle/wcslen.res.oracle
@@ -261,6 +261,14 @@
 [eva] Done for function bitfields2
 [eva] computing for function escaping <- main.
   Called from tests/builtins/wcslen.c:347.
+[eva:alarm] tests/builtins/wcslen.c:222: Warning: 
+  pointer downcast. assert (unsigned int)(&x) ≤ 2147483647;
+[eva:alarm] tests/builtins/wcslen.c:222: Warning: 
+  pointer downcast. assert (unsigned int)(&x) ≤ 2147483647;
+[eva:alarm] tests/builtins/wcslen.c:222: Warning: 
+  pointer downcast. assert (unsigned int)(&x) ≤ 2147483647;
+[eva:alarm] tests/builtins/wcslen.c:222: Warning: 
+  pointer downcast. assert (unsigned int)(&x) ≤ 2147483647;
 [eva:locals-escaping] tests/builtins/wcslen.c:222: Warning: 
   locals {x} escaping the scope of a block of escaping through s
 [eva] tests/builtins/wcslen.c:225: Call to builtin wcslen
@@ -358,6 +366,7 @@
 [eva] Done for function negative_offsets
 [eva] Recording results for main
 [eva] done for function main
+[scope:rm_asserts] removing 3 assertion(s)
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function init_array_nondet:
   from ∈ {-1}
diff --git a/tests/float/oracle/builtins.res.oracle b/tests/float/oracle/builtins.res.oracle
index 0bfa3b88df28af5763d4da2e18e3a395ffb58887..66f30707d3259e2969df47d8e280f469eb3f74b4 100644
--- a/tests/float/oracle/builtins.res.oracle
+++ b/tests/float/oracle/builtins.res.oracle
@@ -134,6 +134,8 @@
   function exp: precondition 'finite_arg' got status valid.
 [eva] tests/float/builtins.c:104: 
   function exp: precondition 'finite_domain' got status valid.
+[eva:alarm] tests/float/builtins.c:107: Warning: 
+  pointer downcast. assert (unsigned int)(&d) ≤ 2147483647;
 [eva:alarm] tests/float/builtins.c:107: Warning: 
   non-finite double value. assert \is_finite((double)((int)(&d)));
 [eva] tests/float/builtins.c:107: Call to builtin log
diff --git a/tests/float/oracle/nonlin.0.res.oracle b/tests/float/oracle/nonlin.0.res.oracle
index 648a1ae9af5f33b985dcd3411249ebe3e07a77c4..5e60b7a32e5ff2014f7a279f2b314b5969f31798 100644
--- a/tests/float/oracle/nonlin.0.res.oracle
+++ b/tests/float/oracle/nonlin.0.res.oracle
@@ -230,6 +230,10 @@
 [eva] Done for function norm
 [eva] computing for function garbled <- main.
   Called from tests/float/nonlin.c:148.
+[eva:alarm] tests/float/nonlin.c:98: Warning: 
+  pointer downcast. assert (unsigned int)(&x_0) ≤ 2147483647;
+[eva:alarm] tests/float/nonlin.c:98: Warning: 
+  pointer downcast. assert (unsigned int)(&x_0 + (int)(&x_0)) ≤ 2147483647;
 [eva:alarm] tests/float/nonlin.c:98: Warning: 
   non-finite float value.
   assert \is_finite((float)((int)(&x_0 + (int)(&x_0))));
diff --git a/tests/float/oracle/nonlin.1.res.oracle b/tests/float/oracle/nonlin.1.res.oracle
index 3ddef66ef496f7061b9f8444af849b2b4bd1bafb..036f8d26e43e182434e95dcde6ced28107a6d3bb 100644
--- a/tests/float/oracle/nonlin.1.res.oracle
+++ b/tests/float/oracle/nonlin.1.res.oracle
@@ -253,6 +253,10 @@
 [eva] Done for function norm
 [eva] computing for function garbled <- main.
   Called from tests/float/nonlin.c:148.
+[eva:alarm] tests/float/nonlin.c:98: Warning: 
+  pointer downcast. assert (unsigned int)(&x_0) ≤ 2147483647;
+[eva:alarm] tests/float/nonlin.c:98: Warning: 
+  pointer downcast. assert (unsigned int)(&x_0 + (int)(&x_0)) ≤ 2147483647;
 [eva:alarm] tests/float/nonlin.c:98: Warning: 
   non-finite float value.
   assert \is_finite((float)((int)(&x_0 + (int)(&x_0))));
diff --git a/tests/float/oracle/nonlin.2.res.oracle b/tests/float/oracle/nonlin.2.res.oracle
index ba81c19d44c306730614d89d500ccdb7fde507a5..112f643e8810a8acfb5c96421196df65e43d7fe5 100644
--- a/tests/float/oracle/nonlin.2.res.oracle
+++ b/tests/float/oracle/nonlin.2.res.oracle
@@ -240,6 +240,10 @@
 [eva] Done for function norm
 [eva] computing for function garbled <- main.
   Called from tests/float/nonlin.c:148.
+[eva:alarm] tests/float/nonlin.c:98: Warning: 
+  pointer downcast. assert (unsigned int)(&x_0) ≤ 2147483647;
+[eva:alarm] tests/float/nonlin.c:98: Warning: 
+  pointer downcast. assert (unsigned int)(&x_0 + (int)(&x_0)) ≤ 2147483647;
 [eva] tests/float/nonlin.c:98: 
   Assigning imprecise value to a_0.
   The imprecision originates from Arithmetic {tests/float/nonlin.c:98}
diff --git a/tests/float/oracle/nonlin.3.res.oracle b/tests/float/oracle/nonlin.3.res.oracle
index c3e1e9cdb8b72a6f1a433932db7cf78cbfcc82bc..f791b980831bd6f9e0c61b1febfb6e83cba17dda 100644
--- a/tests/float/oracle/nonlin.3.res.oracle
+++ b/tests/float/oracle/nonlin.3.res.oracle
@@ -230,6 +230,10 @@
 [eva] Done for function norm
 [eva] computing for function garbled <- main.
   Called from tests/float/nonlin.c:148.
+[eva:alarm] tests/float/nonlin.c:98: Warning: 
+  pointer downcast. assert (unsigned int)(&x_0) ≤ 2147483647;
+[eva:alarm] tests/float/nonlin.c:98: Warning: 
+  pointer downcast. assert (unsigned int)(&x_0 + (int)(&x_0)) ≤ 2147483647;
 [eva:alarm] tests/float/nonlin.c:98: Warning: 
   non-finite float value.
   assert \is_finite((float)((int)(&x_0 + (int)(&x_0))));
diff --git a/tests/float/oracle/nonlin.4.res.oracle b/tests/float/oracle/nonlin.4.res.oracle
index 2f06c2710cf66d8592b8fdae363e0a41589b4481..ba58150afafceddb7303e4ef4f35b0d438a7b2b4 100644
--- a/tests/float/oracle/nonlin.4.res.oracle
+++ b/tests/float/oracle/nonlin.4.res.oracle
@@ -253,6 +253,10 @@
 [eva] Done for function norm
 [eva] computing for function garbled <- main.
   Called from tests/float/nonlin.c:148.
+[eva:alarm] tests/float/nonlin.c:98: Warning: 
+  pointer downcast. assert (unsigned int)(&x_0) ≤ 2147483647;
+[eva:alarm] tests/float/nonlin.c:98: Warning: 
+  pointer downcast. assert (unsigned int)(&x_0 + (int)(&x_0)) ≤ 2147483647;
 [eva:alarm] tests/float/nonlin.c:98: Warning: 
   non-finite float value.
   assert \is_finite((float)((int)(&x_0 + (int)(&x_0))));
diff --git a/tests/float/oracle/nonlin.5.res.oracle b/tests/float/oracle/nonlin.5.res.oracle
index a26018dc5a7b1e8f6e79c7f951bc2d4b1e746db0..36e1a671ef649728d5f1a3b4b1ba0f00f12488ea 100644
--- a/tests/float/oracle/nonlin.5.res.oracle
+++ b/tests/float/oracle/nonlin.5.res.oracle
@@ -240,6 +240,10 @@
 [eva] Done for function norm
 [eva] computing for function garbled <- main.
   Called from tests/float/nonlin.c:148.
+[eva:alarm] tests/float/nonlin.c:98: Warning: 
+  pointer downcast. assert (unsigned int)(&x_0) ≤ 2147483647;
+[eva:alarm] tests/float/nonlin.c:98: Warning: 
+  pointer downcast. assert (unsigned int)(&x_0 + (int)(&x_0)) ≤ 2147483647;
 [eva] tests/float/nonlin.c:98: 
   Assigning imprecise value to a_0.
   The imprecision originates from Arithmetic {tests/float/nonlin.c:98}
diff --git a/tests/rte/oracle/castoncall.0.res.oracle b/tests/rte/oracle/castoncall.0.res.oracle
index 430827699b37879782d59e6e4e9c4193b0079fc3..5bee127b54a1cdc4bc55cc45abba81fd07275144 100644
--- a/tests/rte/oracle/castoncall.0.res.oracle
+++ b/tests/rte/oracle/castoncall.0.res.oracle
@@ -16,6 +16,8 @@ void *nondet_ptr(void *a, void *b)
 {
   void *__retres;
   int tmp;
+  /*@ assert rte: pointer_downcast: (unsigned int)a ≤ 2147483647; */
+  /*@ assert rte: pointer_downcast: (unsigned int)b ≤ 2147483647; */
   tmp = nondet((int)a,(int)b);
   __retres = (void *)tmp;
   return __retres;
diff --git a/tests/rte/oracle/castoncall.1.res.oracle b/tests/rte/oracle/castoncall.1.res.oracle
index 430827699b37879782d59e6e4e9c4193b0079fc3..5bee127b54a1cdc4bc55cc45abba81fd07275144 100644
--- a/tests/rte/oracle/castoncall.1.res.oracle
+++ b/tests/rte/oracle/castoncall.1.res.oracle
@@ -16,6 +16,8 @@ void *nondet_ptr(void *a, void *b)
 {
   void *__retres;
   int tmp;
+  /*@ assert rte: pointer_downcast: (unsigned int)a ≤ 2147483647; */
+  /*@ assert rte: pointer_downcast: (unsigned int)b ≤ 2147483647; */
   tmp = nondet((int)a,(int)b);
   __retres = (void *)tmp;
   return __retres;
diff --git a/tests/rte/oracle/twofunc.res.oracle b/tests/rte/oracle/twofunc.res.oracle
index 58f6280ce2a0652e9d51261289831067a286bf40..5d0a80d5f3847f4511ec8b4104f59014643e42ae 100644
--- a/tests/rte/oracle/twofunc.res.oracle
+++ b/tests/rte/oracle/twofunc.res.oracle
@@ -133,6 +133,7 @@ int main(void)
 [kernel] - bool_value = true
 [kernel] - finite_float = true
 [kernel] - float_to_int = true
+[kernel] - pointer_downcast = true
 [kernel] - unsigned_downcast = false
 [kernel] - unsigned_overflow = false
 [kernel] - downcast = true
@@ -148,6 +149,7 @@ int main(void)
 [kernel] - bool_value = true
 [kernel] - finite_float = true
 [kernel] - float_to_int = true
+[kernel] - pointer_downcast = true
 [kernel] - unsigned_downcast = false
 [kernel] - unsigned_overflow = false
 [kernel] - downcast = true
@@ -225,6 +227,7 @@ int main(void)
 [kernel] - bool_value = true
 [kernel] - finite_float = true
 [kernel] - float_to_int = true
+[kernel] - pointer_downcast = true
 [kernel] - unsigned_downcast = false
 [kernel] - unsigned_overflow = false
 [kernel] - downcast = true
@@ -240,6 +243,7 @@ int main(void)
 [kernel] - bool_value = true
 [kernel] - finite_float = true
 [kernel] - float_to_int = true
+[kernel] - pointer_downcast = true
 [kernel] - unsigned_downcast = false
 [kernel] - unsigned_overflow = false
 [kernel] - downcast = true
diff --git a/tests/slicing/oracle/slice_no_body.res.oracle b/tests/slicing/oracle/slice_no_body.res.oracle
index 2960de9c498aacd917cb2454c4e52994569f0ced..dcba3c11fcc1a7d1050389ca74ec54aa489549e7 100644
--- a/tests/slicing/oracle/slice_no_body.res.oracle
+++ b/tests/slicing/oracle/slice_no_body.res.oracle
@@ -102,7 +102,6 @@ Print slice = h_slice_1:
 
 /**/int h(void)
 {
-  /* <[---], [---]> */ int __retres;
   /* invisible call */ /* <[---], [---]> */
   /* <[---], [---]> */ int a = f(1);
   /* invisible call */ /* <[---], [---]> */
@@ -117,9 +116,7 @@ Print slice = h_slice_1:
     G = g(c);
   }
   /* <[---], [---]> */
-  __retres = (int)(& g);
-  /* <[---], [---]> */
-  return __retres;
+  return G;
 }
 
 Slicing project worklist [default] =
@@ -223,7 +220,6 @@ Print slice = h_slice_1: (InCtrl: <[---], [ S ]>)
 
 /**/int h(void)
 {
-  /* <[---], [---]> */ int __retres;
   /* sig call:
     (InCtrl: <[---], [ S ]>)
     (In1: <[---], [ S ]>)
@@ -262,9 +258,7 @@ Print slice = h_slice_1: (InCtrl: <[---], [ S ]>)
     G = g(c);
   }
   /* <[---], [---]> */
-  __retres = (int)(& g);
-  /* <[---], [---]> */
-  return __retres;
+  return G;
 }
 
 Slicing project worklist [default] =
diff --git a/tests/slicing/slice_no_body.i b/tests/slicing/slice_no_body.i
index 8e97f4c920a7f4f6972d25a7be69257b90dd1adf..e2be30cc3c617fc32f374986687e8bfa8d4d8f79 100644
--- a/tests/slicing/slice_no_body.i
+++ b/tests/slicing/slice_no_body.i
@@ -24,5 +24,5 @@ int h (void) {
   G = f (4);
   if (G > 0)
     G = g (c);
-  return (int)g;
+  return G;
 }
diff --git a/tests/syntax/oracle/ghost_else_bad.1.err.oracle b/tests/syntax/oracle/ghost_else_bad.1.err.oracle
deleted file mode 100644
index b7f5dc572a00637862d9948bffdcdd1ccea254e5..0000000000000000000000000000000000000000
--- a/tests/syntax/oracle/ghost_else_bad.1.err.oracle
+++ /dev/null
@@ -1 +0,0 @@
-Warning: tests/syntax/ghost_else_bad.c:32: Invalid ghost else ignored
diff --git a/tests/value/downcast.i b/tests/value/downcast.i
index e979236ea122b6149c761eb12b5af28192441efa..6c01c21fd74573af61c929d6257ffaa1f1526bfc 100644
--- a/tests/value/downcast.i
+++ b/tests/value/downcast.i
@@ -1,5 +1,9 @@
 /* run.config*
-   STDOPT: +"-load-module report -report -warn-signed-downcast -lib-entry -print -then -no-warn-signed-downcast -warn-unsigned-downcast -then -no-warn-unsigned-downcast -eva-warn-signed-converted-downcast -then -main main5_wrap_signed -slevel 2 -no-print"
+   STDOPT: +"-lib-entry -no-warn-signed-downcast -no-warn-unsigned-downcast -warn-pointer-downcast -eva-slevel-function main5_wrap_signed:2"
+   STDOPT: +"-lib-entry -warn-signed-downcast    -no-warn-unsigned-downcast -warn-pointer-downcast"
+   STDOPT: +"-lib-entry -no-warn-signed-downcast -warn-unsigned-downcast    -warn-pointer-downcast"
+   STDOPT: +"-lib-entry -no-warn-signed-downcast -no-warn-unsigned-downcast -warn-pointer-downcast -eva-warn-signed-converted-downcast"
+   STDOPT: +"-lib-entry -no-warn-signed-downcast -no-warn-unsigned-downcast -no-warn-pointer-downcast"
 */
 
 signed char sx,sy,sz;
diff --git a/tests/value/oracle/addition.res.oracle b/tests/value/oracle/addition.res.oracle
index f601e53058bff5ba8712b59c7b0ce069bfa7a1b4..1fe41a6755acb70d209f28f6fe3f44444cfd61d9 100644
--- a/tests/value/oracle/addition.res.oracle
+++ b/tests/value/oracle/addition.res.oracle
@@ -59,27 +59,56 @@
 [eva] tests/value/addition.i:34: 
   Assigning imprecise value to p1.
   The imprecision originates from Arithmetic {tests/value/addition.i:34}
+[eva:alarm] tests/value/addition.i:36: Warning: 
+  pointer downcast. assert (unsigned int)(&p1) ≤ 2147483647;
 [eva] tests/value/addition.i:36: 
   Assigning imprecise value to p2.
   The imprecision originates from Arithmetic {tests/value/addition.i:36}
+[eva:alarm] tests/value/addition.i:38: Warning: 
+  pointer downcast. assert (unsigned int)(&p1) ≤ 127;
+[eva:alarm] tests/value/addition.i:38: Warning: 
+  pointer downcast. assert (unsigned int)(&t[(char)(&p1)]) ≤ 2147483647;
 [eva] tests/value/addition.i:38: 
   Assigning imprecise value to p3.
   The imprecision originates from Arithmetic {tests/value/addition.i:38}
+[eva:alarm] tests/value/addition.i:40: Warning: 
+  pointer downcast. assert (unsigned int)(&p1) ≤ 127;
+[eva:alarm] tests/value/addition.i:40: Warning: 
+  pointer downcast. assert (unsigned int)(&tt[(char)(&p1)].a) ≤ 2147483647;
 [eva] tests/value/addition.i:40: 
   Assigning imprecise value to p4.
   The imprecision originates from Arithmetic {tests/value/addition.i:40}
+[eva:alarm] tests/value/addition.i:42: Warning: 
+  pointer downcast. assert (unsigned int)(&p1) ≤ 127;
+[eva:alarm] tests/value/addition.i:42: Warning: 
+  pointer downcast. assert (unsigned int)(&p2) ≤ 127;
+[eva:alarm] tests/value/addition.i:42: Warning: 
+  pointer downcast.
+  assert (unsigned int)(&ttt[(char)(&p1)][(char)(&p2)]) ≤ 2147483647;
 [eva] tests/value/addition.i:42: 
   Assigning imprecise value to p5.
   The imprecision originates from Arithmetic {tests/value/addition.i:42}
+[eva:alarm] tests/value/addition.i:44: Warning: 
+  pointer downcast. assert (unsigned int)(&p1) ≤ 127;
+[eva:alarm] tests/value/addition.i:44: Warning: 
+  pointer downcast.
+  assert (unsigned int)(&ttt[(char)(&p1)][u2]) ≤ 2147483647;
 [eva] tests/value/addition.i:44: 
   Assigning imprecise value to p6.
   The imprecision originates from Arithmetic {tests/value/addition.i:44}
+[eva:alarm] tests/value/addition.i:46: Warning: 
+  pointer downcast. assert (unsigned int)(&p2) ≤ 127;
+[eva:alarm] tests/value/addition.i:46: Warning: 
+  pointer downcast.
+  assert (unsigned int)(&ttt[u2][(char)(&p2)]) ≤ 2147483647;
 [eva] tests/value/addition.i:46: 
   Assigning imprecise value to p7.
   The imprecision originates from Arithmetic {tests/value/addition.i:46}
 [eva:alarm] tests/value/addition.i:48: Warning: 
   pointer comparison.
   assert \pointer_comparable((void *)(&p1 + 1), (void *)(&p2));
+[eva:alarm] tests/value/addition.i:50: Warning: 
+  pointer downcast. assert (unsigned int)(&p1) ≤ 2147483647;
 [eva:alarm] tests/value/addition.i:50: Warning: 
   signed overflow. assert -2147483648 ≤ (int)(&p1) / 2;
 [eva:alarm] tests/value/addition.i:50: Warning: 
@@ -87,9 +116,15 @@
 [eva] tests/value/addition.i:50: 
   Assigning imprecise value to p9.
   The imprecision originates from Arithmetic {tests/value/addition.i:50}
+[eva:alarm] tests/value/addition.i:52: Warning: 
+  pointer downcast. assert (unsigned int)(&p1) ≤ 2147483647;
 [eva] tests/value/addition.i:52: 
   Assigning imprecise value to p10.
   The imprecision originates from Arithmetic {tests/value/addition.i:52}
+[eva:alarm] tests/value/addition.i:56: Warning: 
+  pointer downcast. assert (unsigned int)(&p1) ≤ 2147483647;
+[eva:alarm] tests/value/addition.i:56: Warning: 
+  pointer downcast. assert (unsigned int)(&p2) ≤ 2147483647;
 [eva] tests/value/addition.i:56: 
   Assigning imprecise value to p12.
   The imprecision originates from Arithmetic {tests/value/addition.i:56}
@@ -130,7 +165,7 @@
   {{ garbled mix of &{p1} (origin: Arithmetic {tests/value/addition.i:56}) }}
   {{ garbled mix of &{p1} (origin: Misaligned {tests/value/addition.i:59}) }}
   {{ garbled mix of &{p1} (origin: Misaligned {tests/value/addition.i:61}) }}
-[scope:rm_asserts] removing 2 assertion(s)
+[scope:rm_asserts] removing 9 assertion(s)
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function main:
   t[0] ∈ {0}
@@ -323,13 +358,48 @@
   signed overflow. assert -2147483648 ≤ &p2 - &p3;
 [eva:alarm] tests/value/addition.i:34: Warning: 
   signed overflow. assert &p2 - &p3 ≤ 2147483647;
+[eva:alarm] tests/value/addition.i:36: Warning: 
+  pointer downcast. assert (unsigned int)(&p1) ≤ 2147483647;
+[eva:alarm] tests/value/addition.i:38: Warning: 
+  pointer downcast. assert (unsigned int)(&p1) ≤ 127;
+[eva:alarm] tests/value/addition.i:38: Warning: 
+  pointer downcast. assert (unsigned int)(&t[(char)(&p1)]) ≤ 2147483647;
+[eva:alarm] tests/value/addition.i:40: Warning: 
+  pointer downcast. assert (unsigned int)(&p1) ≤ 127;
+[eva:alarm] tests/value/addition.i:40: Warning: 
+  pointer downcast. assert (unsigned int)(&tt[(char)(&p1)].a) ≤ 2147483647;
+[eva:alarm] tests/value/addition.i:42: Warning: 
+  pointer downcast. assert (unsigned int)(&p1) ≤ 127;
+[eva:alarm] tests/value/addition.i:42: Warning: 
+  pointer downcast. assert (unsigned int)(&p2) ≤ 127;
+[eva:alarm] tests/value/addition.i:42: Warning: 
+  pointer downcast.
+  assert (unsigned int)(&ttt[(char)(&p1)][(char)(&p2)]) ≤ 2147483647;
+[eva:alarm] tests/value/addition.i:44: Warning: 
+  pointer downcast. assert (unsigned int)(&p1) ≤ 127;
+[eva:alarm] tests/value/addition.i:44: Warning: 
+  pointer downcast.
+  assert (unsigned int)(&ttt[(char)(&p1)][u2]) ≤ 2147483647;
+[eva:alarm] tests/value/addition.i:46: Warning: 
+  pointer downcast. assert (unsigned int)(&p2) ≤ 127;
+[eva:alarm] tests/value/addition.i:46: Warning: 
+  pointer downcast.
+  assert (unsigned int)(&ttt[u2][(char)(&p2)]) ≤ 2147483647;
 [eva:alarm] tests/value/addition.i:48: Warning: 
   pointer comparison.
   assert \pointer_comparable((void *)(&p1 + 1), (void *)(&p2));
+[eva:alarm] tests/value/addition.i:50: Warning: 
+  pointer downcast. assert (unsigned int)(&p1) ≤ 2147483647;
 [eva:alarm] tests/value/addition.i:50: Warning: 
   signed overflow. assert -2147483648 ≤ (int)(&p1) / 2;
 [eva:alarm] tests/value/addition.i:50: Warning: 
   signed overflow. assert (int)(&p1) / 2 ≤ 2147483647;
+[eva:alarm] tests/value/addition.i:52: Warning: 
+  pointer downcast. assert (unsigned int)(&p1) ≤ 2147483647;
+[eva:alarm] tests/value/addition.i:56: Warning: 
+  pointer downcast. assert (unsigned int)(&p1) ≤ 2147483647;
+[eva:alarm] tests/value/addition.i:56: Warning: 
+  pointer downcast. assert (unsigned int)(&p2) ≤ 2147483647;
 [eva:alarm] tests/value/addition.i:59: Warning: 
   signed overflow. assert -2147483648 ≤ (int)*((char *)(&q1)) + 2;
 [eva:alarm] tests/value/addition.i:59: Warning: 
@@ -360,7 +430,7 @@
   {{ garbled mix of &{p1} (origin: Arithmetic {tests/value/addition.i:56}) }}
   {{ garbled mix of &{p1} (origin: Misaligned {tests/value/addition.i:59}) }}
   {{ garbled mix of &{p1} (origin: Misaligned {tests/value/addition.i:61}) }}
-[scope:rm_asserts] removing 2 assertion(s)
+[scope:rm_asserts] removing 9 assertion(s)
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function main:
   t[0] ∈ {0}
diff --git a/tests/value/oracle/align_char_array.res.oracle b/tests/value/oracle/align_char_array.res.oracle
index 82c0a105954556053c32fb592300ec24255c11b1..3383a7f5af11c33a0b49deb33113bdbf7543ac0f 100644
--- a/tests/value/oracle/align_char_array.res.oracle
+++ b/tests/value/oracle/align_char_array.res.oracle
@@ -15,25 +15,41 @@
   overlapread2 ∈ {0}
   overlapread3 ∈ {0}
   overlapread4 ∈ {0}
+[eva:alarm] tests/value/align_char_array.c:21: Warning: 
+  pointer downcast. assert (unsigned int)(&S.a) ≤ 2147483647;
+[eva:alarm] tests/value/align_char_array.c:21: Warning: 
+  pointer downcast. assert (unsigned int)(&S.c) ≤ 2147483647;
+[eva:alarm] tests/value/align_char_array.c:23: Warning: 
+  pointer downcast. assert (unsigned int)(&t[2][2]) ≤ 2147483647;
+[eva:alarm] tests/value/align_char_array.c:23: Warning: 
+  pointer downcast. assert (unsigned int)(&t[0][0]) ≤ 2147483647;
+[eva:alarm] tests/value/align_char_array.c:25: Warning: 
+  pointer downcast. assert (unsigned int)((char (*)[10])t) ≤ 2147483647;
 [eva:alarm] tests/value/align_char_array.c:25: Warning: 
   signed overflow. assert -2147483648 ≤ (int)((char (*)[10])t) + 3;
 [eva:alarm] tests/value/align_char_array.c:25: Warning: 
   signed overflow. assert (int)((char (*)[10])t) + 3 ≤ 2147483647;
+[eva:alarm] tests/value/align_char_array.c:26: Warning: 
+  pointer downcast. assert (unsigned int)((char (*)[10])t) ≤ 2147483647;
 [eva:alarm] tests/value/align_char_array.c:26: Warning: 
   signed overflow. assert -2147483648 ≤ (int)((char (*)[10])t) + 3;
 [eva:alarm] tests/value/align_char_array.c:26: Warning: 
   signed overflow. assert (int)((char (*)[10])t) + 3 ≤ 2147483647;
+[eva:alarm] tests/value/align_char_array.c:27: Warning: 
+  pointer downcast. assert (unsigned int)((char (*)[10])t) ≤ 2147483647;
 [eva:alarm] tests/value/align_char_array.c:27: Warning: 
   signed overflow. assert -2147483648 ≤ (int)((char (*)[10])t) + 2;
 [eva:alarm] tests/value/align_char_array.c:27: Warning: 
   signed overflow. assert (int)((char (*)[10])t) + 2 ≤ 2147483647;
+[eva:alarm] tests/value/align_char_array.c:28: Warning: 
+  pointer downcast. assert (unsigned int)((char (*)[10])t) ≤ 2147483647;
 [eva:alarm] tests/value/align_char_array.c:28: Warning: 
   signed overflow. assert -2147483648 ≤ (int)((char (*)[10])t) + 2;
 [eva:alarm] tests/value/align_char_array.c:28: Warning: 
   signed overflow. assert (int)((char (*)[10])t) + 2 ≤ 2147483647;
 [eva] Recording results for main
 [eva] done for function main
-[scope:rm_asserts] removing 4 assertion(s)
+[scope:rm_asserts] removing 7 assertion(s)
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function main:
   d1 ∈ {1}
diff --git a/tests/value/oracle/arith_pointer.res.oracle b/tests/value/oracle/arith_pointer.res.oracle
index 3ec14d1a31c7604387924f3f8ca5d8de5a3c1bad..a09c922b6d3924e3f74da13fa331a48dc6afe907 100644
--- a/tests/value/oracle/arith_pointer.res.oracle
+++ b/tests/value/oracle/arith_pointer.res.oracle
@@ -22,6 +22,8 @@
 [eva:alarm] tests/value/arith_pointer.c:51: Warning: 
   pointer subtraction. assert \base_addr(p2) ≡ \base_addr(p2);
 [eva] tests/value/arith_pointer.c:52: Frama_C_show_each: {0}
+[eva:alarm] tests/value/arith_pointer.c:54: Warning: 
+  pointer downcast. assert (unsigned int)(&x) ≤ 2147483647;
 [eva] tests/value/arith_pointer.c:54: 
   Assigning imprecise value to p1.
   The imprecision originates from Arithmetic {tests/value/arith_pointer.c:54}
@@ -148,6 +150,8 @@
   Frama_C_show_each:
   {{ garbled mix of &{x; y}
   (origin: Arithmetic {tests/value/arith_pointer.c:51}) }}
+[eva:alarm] tests/value/arith_pointer.c:54: Warning: 
+  pointer downcast. assert (unsigned int)(&x) ≤ 2147483647;
 [eva:alarm] tests/value/arith_pointer.c:56: Warning: 
   signed overflow. assert -2147483648 ≤ p2 - p1;
 [eva:alarm] tests/value/arith_pointer.c:56: Warning: 
diff --git a/tests/value/oracle/array_ptr.res.oracle b/tests/value/oracle/array_ptr.res.oracle
index 76ce304e41df77b747b0ad233ff3d1dc8d01b778..8599de4e4af9da144bcf4e997d7be8c9348c5b49 100644
--- a/tests/value/oracle/array_ptr.res.oracle
+++ b/tests/value/oracle/array_ptr.res.oracle
@@ -6,6 +6,8 @@
   G ∈ {1}
   l[0] ∈ {1}
    [1..19] ∈ {0}
+[eva:alarm] tests/value/array_ptr.i:14: Warning: 
+  pointer downcast. assert (unsigned int)(&l) ≤ 2147483647;
 [eva] computing for function f <- main.
   Called from tests/value/array_ptr.i:15.
 [eva] Recording results for f
diff --git a/tests/value/oracle/assigns.res.oracle b/tests/value/oracle/assigns.res.oracle
index 0edee1de714cdb4506cf8068125b5fb063ed94e1..4cfd1aeca7a34e5f4825e3efdf9dade3a7e01e54 100644
--- a/tests/value/oracle/assigns.res.oracle
+++ b/tests/value/oracle/assigns.res.oracle
@@ -44,6 +44,8 @@
 [eva] computing for function f <- main1 <- main.
   Called from tests/value/assigns.i:49.
 [eva] Done for function f
+[eva:alarm] tests/value/assigns.i:51: Warning: 
+  pointer downcast. assert (unsigned int)(&T) ≤ 2147483647;
 [eva:alarm] tests/value/assigns.i:51: Warning: 
   signed overflow. assert -2147483648 ≤ 2 * (int)(&T);
 [eva:alarm] tests/value/assigns.i:51: Warning: 
@@ -52,6 +54,8 @@
   Called from tests/value/assigns.i:51.
 [eva] using specification for function g
 [eva] Done for function g
+[eva:alarm] tests/value/assigns.i:52: Warning: 
+  pointer downcast. assert (unsigned int)(&t3) ≤ 2147483647;
 [eva:alarm] tests/value/assigns.i:52: Warning: 
   signed overflow. assert -2147483648 ≤ 2 * (int)(&t3);
 [eva:alarm] tests/value/assigns.i:52: Warning: 
@@ -931,9 +935,11 @@ void main1(void)
       i ++;
     }
   }
+  /*@ assert Eva: pointer_downcast: (unsigned int)(&T) ≤ 2147483647; */
   /*@ assert Eva: signed_overflow: -2147483648 ≤ 2 * (int)(&T); */
   /*@ assert Eva: signed_overflow: 2 * (int)(&T) ≤ 2147483647; */
   g(2 * (int)(& T));
+  /*@ assert Eva: pointer_downcast: (unsigned int)(&t3) ≤ 2147483647; */
   /*@ assert Eva: signed_overflow: -2147483648 ≤ 2 * (int)(&t3); */
   /*@ assert Eva: signed_overflow: 2 * (int)(&t3) ≤ 2147483647; */
   h((int *)(2 * (int)(& t3)));
diff --git a/tests/value/oracle/bitfield.res.oracle b/tests/value/oracle/bitfield.res.oracle
index 05b0967b0520a71f78f122b82d7b572800408561..0ae5f0394606e216870ff0d5c5f4fe947f103d98 100644
--- a/tests/value/oracle/bitfield.res.oracle
+++ b/tests/value/oracle/bitfield.res.oracle
@@ -28,9 +28,13 @@
   Called from tests/value/bitfield.i:164.
 [eva] tests/value/bitfield.i:113: Frama_C_show_each: {1}
 [eva] tests/value/bitfield.i:117: Frama_C_show_each: {3}
+[eva:alarm] tests/value/bitfield.i:123: Warning: 
+  pointer downcast. assert (unsigned int)(&v) ≤ 2147483647;
 [eva] tests/value/bitfield.i:123: 
   Assigning imprecise value to v.c.
   The imprecision originates from Arithmetic {tests/value/bitfield.i:123}
+[eva:alarm] tests/value/bitfield.i:124: Warning: 
+  pointer downcast. assert (unsigned int)(&v + 1) ≤ 2147483647;
 [eva:alarm] tests/value/bitfield.i:125: Warning: 
   signed overflow. assert -2147483648 ≤ (int)v.d + 1;
 [eva:alarm] tests/value/bitfield.i:125: Warning: 
@@ -77,6 +81,8 @@
   signed overflow. assert -2147483648 ≤ foo + foo;
 [eva:alarm] tests/value/bitfield.i:129: Warning: 
   signed overflow. assert foo + foo ≤ 2147483647;
+[eva:alarm] tests/value/bitfield.i:130: Warning: 
+  pointer downcast. assert (unsigned int)(&v + 1) ≤ 2147483647;
 [eva] tests/value/bitfield.i:130: 
   Assigning imprecise value to h.c.
   The imprecision originates from Arithmetic {tests/value/bitfield.i:130}
@@ -207,6 +213,7 @@
 [eva] done for function main
 [eva] tests/value/bitfield.i:102: 
   assertion 'Eva,initialization' got final status invalid.
+[scope:rm_asserts] removing 1 assertion(s)
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function char_short:
   S.c ∈ {1}
@@ -550,7 +557,9 @@ void main_old(void)
   else Frama_C_show_each(3);
   VV = (unsigned int)h.a;
   h.a = (unsigned int __attribute__((__FRAMA_C_BITFIELD_SIZE__(2))))VV;
+  /*@ assert Eva: pointer_downcast: (unsigned int)(&v) ≤ 2147483647; */
   v.c = (int __attribute__((__FRAMA_C_BITFIELD_SIZE__(22))))((int)(& v));
+  /*@ assert Eva: pointer_downcast: (unsigned int)(&v + 1) ≤ 2147483647; */
   v.d = (int __attribute__((__FRAMA_C_BITFIELD_SIZE__(32))))((int)(& v + 1));
   /*@ assert Eva: signed_overflow: -2147483648 ≤ (int)v.d + 1; */
   /*@ assert Eva: signed_overflow: (int)v.d + 1 ≤ 2147483647; */
@@ -561,6 +570,7 @@ void main_old(void)
   /*@ assert Eva: signed_overflow: -2147483648 ≤ foo + foo; */
   /*@ assert Eva: signed_overflow: foo + foo ≤ 2147483647; */
   h.b = (int __attribute__((__FRAMA_C_BITFIELD_SIZE__(4))))(((foo + foo) + (int)h.a) + (int)h.b);
+  /*@ assert Eva: pointer_downcast: (unsigned int)(&v + 1) ≤ 2147483647; */
   h.c = (int __attribute__((__FRAMA_C_BITFIELD_SIZE__(22))))((int)(& v + 1));
   k8.b = (int __attribute__((__FRAMA_C_BITFIELD_SIZE__(4))))8;
   tmp = return_8();
diff --git a/tests/value/oracle/bitwise_pointer.res.oracle b/tests/value/oracle/bitwise_pointer.res.oracle
index c1a1f86bba18a08385a94aab5c3509196a363c36..878fa04174a2301232dcc5fab79671c8cfad0fe8 100644
--- a/tests/value/oracle/bitwise_pointer.res.oracle
+++ b/tests/value/oracle/bitwise_pointer.res.oracle
@@ -29,11 +29,15 @@
     [10..99] ∈ {0}
   p1 ∈ {0}
   x1 ∈ {0}
+[eva:alarm] tests/value/bitwise_pointer.i:18: Warning: 
+  pointer downcast. assert (unsigned int)(&t[7]) ≤ 2147483647;
 [eva] tests/value/bitwise_pointer.i:18: 
   Assigning imprecise value to p.
   The imprecision originates from Arithmetic {tests/value/bitwise_pointer.i:18}
 [eva:alarm] tests/value/bitwise_pointer.i:19: Warning: 
   out of bounds write. assert \valid(p);
+[eva:alarm] tests/value/bitwise_pointer.i:22: Warning: 
+  pointer downcast. assert (unsigned int)(&t1[mask]) ≤ 2147483647;
 [eva] tests/value/bitwise_pointer.i:22: 
   Assigning imprecise value to p1.
   The imprecision originates from Arithmetic {tests/value/bitwise_pointer.i:22}
diff --git a/tests/value/oracle/call.res.oracle b/tests/value/oracle/call.res.oracle
index bd70d1673837431b24118da8e0c2e213dbcc1357..144373249549a7098517489dc881ab42cdfcef3f 100644
--- a/tests/value/oracle/call.res.oracle
+++ b/tests/value/oracle/call.res.oracle
@@ -10,6 +10,8 @@
   x ∈ {0}
 [eva:alarm] tests/value/call.i:19: Warning: 
   out of bounds read. assert \valid_read(v + 1);
+[eva:alarm] tests/value/call.i:19: Warning: 
+  pointer downcast. assert (unsigned int)*(v + 1) ≤ 2147483647;
 [eva] computing for function leaf_fun_int <- main.
   Called from tests/value/call.i:19.
 [kernel:annot:missing-spec] tests/value/call.i:19: Warning: 
diff --git a/tests/value/oracle/cmp_ptr.0.res.oracle b/tests/value/oracle/cmp_ptr.0.res.oracle
index b3a90b9fbe13a88ea88e78cc4d5f921cb937e06c..47a1035cc56d34fcfaad83bf7bfc5cd2f7b50b2d 100644
--- a/tests/value/oracle/cmp_ptr.0.res.oracle
+++ b/tests/value/oracle/cmp_ptr.0.res.oracle
@@ -45,12 +45,18 @@
   invalid pointer comparison: invalid pointer(s)
 [eva:alarm] tests/value/cmp_ptr.i:22: Warning: 
   pointer comparison. assert \pointer_comparable((void *)0, (void *)(&y + 2));
+[eva:alarm] tests/value/cmp_ptr.i:23: Warning: 
+  pointer downcast. assert (unsigned int)(&y + 2) ≤ 2147483647;
 [eva:pointer-comparison] tests/value/cmp_ptr.i:24: 
   invalid pointer comparison: invalid pointer(s)
 [eva:alarm] tests/value/cmp_ptr.i:24: Warning: 
   non-finite float value. assert \is_finite(ff);
 [eva:pointer-comparison] tests/value/cmp_ptr.i:28: 
   invalid pointer comparison: invalid pointer(s)
+[eva:alarm] tests/value/cmp_ptr.i:28: Warning: 
+  pointer downcast.
+  assert (unsigned int)tmp_0 ≤ 2147483647;
+  (tmp_0 from u?& f:& g)
 [eva:alarm] tests/value/cmp_ptr.i:28: Warning: 
   signed overflow.
   assert -2147483648 ≤ 1 + (int)tmp_0;
diff --git a/tests/value/oracle/cmp_ptr.1.res.oracle b/tests/value/oracle/cmp_ptr.1.res.oracle
index 36b9efb6f4798d3be4013f0f8d40bed54d1f7905..182c5433339e484a9db1a6187096ab716cc325a0 100644
--- a/tests/value/oracle/cmp_ptr.1.res.oracle
+++ b/tests/value/oracle/cmp_ptr.1.res.oracle
@@ -59,12 +59,18 @@
   evaluating condition to {0; 1} instead of {0} because of UPCPA
 [eva:alarm] tests/value/cmp_ptr.i:22: Warning: 
   pointer comparison. assert \pointer_comparable((void *)0, (void *)(&y + 2));
+[eva:alarm] tests/value/cmp_ptr.i:23: Warning: 
+  pointer downcast. assert (unsigned int)(&y + 2) ≤ 2147483647;
 [eva:pointer-comparison] tests/value/cmp_ptr.i:24: 
   invalid pointer comparison: invalid pointer(s)
 [eva:alarm] tests/value/cmp_ptr.i:24: Warning: 
   non-finite float value. assert \is_finite(ff);
 [eva:pointer-comparison] tests/value/cmp_ptr.i:28: 
   invalid pointer comparison: invalid pointer(s)
+[eva:alarm] tests/value/cmp_ptr.i:28: Warning: 
+  pointer downcast.
+  assert (unsigned int)tmp_0 ≤ 2147483647;
+  (tmp_0 from u?& f:& g)
 [eva:alarm] tests/value/cmp_ptr.i:28: Warning: 
   signed overflow.
   assert -2147483648 ≤ 1 + (int)tmp_0;
diff --git a/tests/value/oracle/context_free.res.oracle b/tests/value/oracle/context_free.res.oracle
index b244fecc83c99a27e3be9deb7ff2499573145e64..f1220992e0b2fe33b682cd14e1d308846df0d14a 100644
--- a/tests/value/oracle/context_free.res.oracle
+++ b/tests/value/oracle/context_free.res.oracle
@@ -101,10 +101,8 @@
   The imprecision originates from Well
 [eva:alarm] tests/value/context_free.i:61: Warning: 
   out of bounds write. assert \valid(pvoid);
-[eva] tests/value/context_free.i:61: 
-  Assigning imprecise value to *pvoid
-  (pointing to S_qvoid with offsets [0..34359738360],0%8).
-  The imprecision originates from Arithmetic {tests/value/context_free.i:61}
+[eva:alarm] tests/value/context_free.i:61: Warning: 
+  pointer downcast. assert (unsigned int)(&pvoid) ≤ 127;
 [eva:alarm] tests/value/context_free.i:62: Warning: 
   pointer to function with incompatible type. assert \valid_function(g);
 [eva] Recording results for f
diff --git a/tests/value/oracle/conversion.res.oracle b/tests/value/oracle/conversion.res.oracle
index d9ed842d845c0b9c251ded319a56058f991f54bb..954fdab07b419cf2a12ec881c37860546384ec36 100644
--- a/tests/value/oracle/conversion.res.oracle
+++ b/tests/value/oracle/conversion.res.oracle
@@ -57,6 +57,8 @@
   f ∈ [3. .. 5.]
   l ∈ UNINITIALIZED
   ==END OF DUMP==
+[eva:alarm] tests/value/conversion.i:38: Warning: 
+  pointer downcast. assert (unsigned int)(&x) ≤ 2147483647;
 [eva] tests/value/conversion.i:40: 
   Frama_C_dump_each:
   # Cvalue domain:
@@ -161,6 +163,8 @@
   f ∈ [3. .. 5.]
   l ∈ UNINITIALIZED
   ==END OF DUMP==
+[eva:alarm] tests/value/conversion.i:38: Warning: 
+  pointer downcast. assert (unsigned int)(&x) ≤ 2147483647;
 [eva:alarm] tests/value/conversion.i:39: Warning: 
   non-finite float value. assert \is_finite(*((float *)(&x)));
 [eva] tests/value/conversion.i:39: 
diff --git a/tests/value/oracle/degeneration2.res.oracle b/tests/value/oracle/degeneration2.res.oracle
index feb99e8fb7164d2b46d6f4e6802813eb4265ca6b..8ba6db66b554ace332d5b2673b0ce0b2a7fcec7d 100644
--- a/tests/value/oracle/degeneration2.res.oracle
+++ b/tests/value/oracle/degeneration2.res.oracle
@@ -6,6 +6,8 @@
   v ∈ [--..--]
 [eva:alarm] tests/value/degeneration2.i:14: Warning: 
   accessing uninitialized left-value. assert \initialized(&A);
+[eva:alarm] tests/value/degeneration2.i:14: Warning: 
+  pointer downcast. assert (unsigned int)A ≤ 2147483647;
 [eva:alarm] tests/value/degeneration2.i:14: Warning: 
   signed overflow. assert -2147483648 ≤ -((int)A);
 [eva:alarm] tests/value/degeneration2.i:14: Warning: 
diff --git a/tests/value/oracle/deps_addr.res.oracle b/tests/value/oracle/deps_addr.res.oracle
index 093935ed64325e2002c3ba5be0483f9edff1ea14..59f4ac5f0f9e552e08318ac54231d9674780213f 100644
--- a/tests/value/oracle/deps_addr.res.oracle
+++ b/tests/value/oracle/deps_addr.res.oracle
@@ -6,6 +6,8 @@
   t ∈ {0}
   a ∈ {0}
   tt[0..4][0..4] ∈ {0}
+[eva:alarm] tests/value/deps_addr.i:6: Warning: 
+  pointer downcast. assert (unsigned int)(&a) ≤ 2147483647;
 [eva:alarm] tests/value/deps_addr.i:6: Warning: 
   out of bounds read. assert \valid_read(t + (int)(&a));
 [eva] Recording results for main
diff --git a/tests/value/oracle/deps_mixed.res.oracle b/tests/value/oracle/deps_mixed.res.oracle
index b33c688ba947bc3efb73d0909b92254a462308c1..6631dfe4e46d5233ea557de069df72f64f96bec0 100644
--- a/tests/value/oracle/deps_mixed.res.oracle
+++ b/tests/value/oracle/deps_mixed.res.oracle
@@ -12,6 +12,8 @@
   v ∈ [--..--]
   t[0] ∈ {{ &f }}
    [1] ∈ {{ &g }}
+[eva:alarm] tests/value/deps_mixed.i:20: Warning: 
+  pointer downcast. assert (unsigned int)q ≤ 2147483647;
 [eva:alarm] tests/value/deps_mixed.i:20: Warning: 
   out of bounds read. assert \valid_read(p + (int)q);
 [eva:alarm] tests/value/deps_mixed.i:22: Warning: 
@@ -26,6 +28,10 @@
   Called from tests/value/deps_mixed.i:22.
 [eva] Recording results for f
 [eva] Done for function f
+[eva:alarm] tests/value/deps_mixed.i:24: Warning: 
+  pointer downcast. assert (unsigned int)q ≤ 2147483647;
+[eva:alarm] tests/value/deps_mixed.i:24: Warning: 
+  pointer downcast. assert (unsigned int)(p + (int)q) ≤ 2147483647;
 [eva] tests/value/deps_mixed.i:24: 
   Assigning imprecise value to __retres.
   The imprecision originates from Arithmetic {tests/value/deps_mixed.i:24}
diff --git a/tests/value/oracle/div.0.res.oracle b/tests/value/oracle/div.0.res.oracle
index b0c33659a01a67ad2e5e1db4f15e05217dc9dc2b..2f95483430ee68b9fb2aee65ffad1ccfd202931a 100644
--- a/tests/value/oracle/div.0.res.oracle
+++ b/tests/value/oracle/div.0.res.oracle
@@ -35,6 +35,8 @@
   signed overflow. assert X + 1 ≤ 2147483647;
 [eva:alarm] tests/value/div.i:32: Warning: division by zero. assert Z2 ≢ 0;
 [eva:alarm] tests/value/div.i:33: Warning: division by zero. assert Z2 ≢ 0;
+[eva:alarm] tests/value/div.i:33: Warning: 
+  pointer downcast. assert (unsigned int)(&Z2) ≤ 2147483647;
 [eva:alarm] tests/value/div.i:33: Warning: 
   signed overflow. assert -2147483648 ≤ (int)(&Z2) / Z2;
 [eva:alarm] tests/value/div.i:33: Warning: 
@@ -42,6 +44,8 @@
 [eva] tests/value/div.i:33: 
   Assigning imprecise value to b.
   The imprecision originates from Arithmetic {tests/value/div.i:33}
+[eva:alarm] tests/value/div.i:34: Warning: 
+  pointer downcast. assert (unsigned int)(&X + 2) ≤ 2147483647;
 [eva:alarm] tests/value/div.i:34: Warning: 
   division by zero. assert (int)(&X + 2) ≢ 0;
 [eva:alarm] tests/value/div.i:34: Warning: 
@@ -51,6 +55,8 @@
 [eva] tests/value/div.i:34: 
   Assigning imprecise value to d2.
   The imprecision originates from Arithmetic {tests/value/div.i:34}
+[eva:alarm] tests/value/div.i:35: Warning: 
+  pointer downcast. assert (unsigned int)(&X + 1) ≤ 2147483647;
 [eva:alarm] tests/value/div.i:35: Warning: 
   signed overflow. assert -2147483648 ≤ 100 / (int)(&X + 1);
 [eva:alarm] tests/value/div.i:35: Warning: 
@@ -58,6 +64,8 @@
 [eva] tests/value/div.i:35: 
   Assigning imprecise value to d1.
   The imprecision originates from Arithmetic {tests/value/div.i:35}
+[eva:alarm] tests/value/div.i:36: Warning: 
+  pointer downcast. assert (unsigned int)(&X) ≤ 2147483647;
 [eva:alarm] tests/value/div.i:36: Warning: 
   signed overflow. assert -2147483648 ≤ 100 / (int)(&X);
 [eva:alarm] tests/value/div.i:36: Warning: 
@@ -65,6 +73,8 @@
 [eva] tests/value/div.i:36: 
   Assigning imprecise value to d0.
   The imprecision originates from Arithmetic {tests/value/div.i:36}
+[eva:alarm] tests/value/div.i:37: Warning: 
+  pointer downcast. assert (unsigned int)(&X) ≤ 2147483647;
 [eva:alarm] tests/value/div.i:37: Warning: 
   signed overflow. assert -2147483648 ≤ -((int)(&X));
 [eva:alarm] tests/value/div.i:37: Warning: 
@@ -74,7 +84,7 @@
   The imprecision originates from Arithmetic {tests/value/div.i:37}
 [eva] Recording results for main
 [eva] done for function main
-[scope:rm_asserts] removing 1 assertion(s)
+[scope:rm_asserts] removing 2 assertion(s)
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function main:
   X ∈ [--..--]
diff --git a/tests/value/oracle/div.1.res.oracle b/tests/value/oracle/div.1.res.oracle
index e333aa05c132dd16c43aa7b148d98c22a25f8000..bb2cbef17535dbdbf3cef47f6757b5ac4894ff6c 100644
--- a/tests/value/oracle/div.1.res.oracle
+++ b/tests/value/oracle/div.1.res.oracle
@@ -50,11 +50,15 @@
 [eva:alarm] tests/value/div.i:32: Warning: 
   assertion 'rte,division_by_zero' got status unknown.
 [eva:alarm] tests/value/div.i:32: Warning: division by zero. assert Z2 ≢ 0;
+[eva:alarm] tests/value/div.i:33: Warning: 
+  assertion 'rte,pointer_downcast' got status unknown.
 [eva:alarm] tests/value/div.i:33: Warning: 
   assertion 'rte,division_by_zero' got status unknown.
 [eva:alarm] tests/value/div.i:33: Warning: 
   assertion 'rte,signed_overflow' got status unknown.
 [eva:alarm] tests/value/div.i:33: Warning: division by zero. assert Z2 ≢ 0;
+[eva:alarm] tests/value/div.i:33: Warning: 
+  pointer downcast. assert (unsigned int)(&Z2) ≤ 2147483647;
 [eva:alarm] tests/value/div.i:33: Warning: 
   signed overflow. assert -2147483648 ≤ (int)(&Z2) / Z2;
 [eva:alarm] tests/value/div.i:33: Warning: 
@@ -62,8 +66,12 @@
 [eva] tests/value/div.i:33: 
   Assigning imprecise value to b.
   The imprecision originates from Arithmetic {tests/value/div.i:33}
+[eva:alarm] tests/value/div.i:34: Warning: 
+  assertion 'rte,pointer_downcast' got status unknown.
 [eva:alarm] tests/value/div.i:34: Warning: 
   assertion 'rte,division_by_zero' got status unknown.
+[eva:alarm] tests/value/div.i:34: Warning: 
+  pointer downcast. assert (unsigned int)(&X + 2) ≤ 2147483647;
 [eva:alarm] tests/value/div.i:34: Warning: 
   division by zero. assert (int)(&X + 2) ≢ 0;
 [eva:alarm] tests/value/div.i:34: Warning: 
@@ -73,7 +81,11 @@
 [eva] tests/value/div.i:34: 
   Assigning imprecise value to d2.
   The imprecision originates from Arithmetic {tests/value/div.i:34}
+[eva:alarm] tests/value/div.i:35: Warning: 
+  assertion 'rte,pointer_downcast' got status unknown.
 [eva] tests/value/div.i:35: assertion 'rte,division_by_zero' got status valid.
+[eva:alarm] tests/value/div.i:35: Warning: 
+  pointer downcast. assert (unsigned int)(&X + 1) ≤ 2147483647;
 [eva:alarm] tests/value/div.i:35: Warning: 
   signed overflow. assert -2147483648 ≤ 100 / (int)(&X + 1);
 [eva:alarm] tests/value/div.i:35: Warning: 
@@ -81,7 +93,11 @@
 [eva] tests/value/div.i:35: 
   Assigning imprecise value to d1.
   The imprecision originates from Arithmetic {tests/value/div.i:35}
+[eva:alarm] tests/value/div.i:36: Warning: 
+  assertion 'rte,pointer_downcast' got status unknown.
 [eva] tests/value/div.i:36: assertion 'rte,division_by_zero' got status valid.
+[eva:alarm] tests/value/div.i:36: Warning: 
+  pointer downcast. assert (unsigned int)(&X) ≤ 2147483647;
 [eva:alarm] tests/value/div.i:36: Warning: 
   signed overflow. assert -2147483648 ≤ 100 / (int)(&X);
 [eva:alarm] tests/value/div.i:36: Warning: 
@@ -89,8 +105,12 @@
 [eva] tests/value/div.i:36: 
   Assigning imprecise value to d0.
   The imprecision originates from Arithmetic {tests/value/div.i:36}
+[eva:alarm] tests/value/div.i:37: Warning: 
+  assertion 'rte,pointer_downcast' got status unknown.
 [eva:alarm] tests/value/div.i:37: Warning: 
   assertion 'rte,signed_overflow' got status unknown.
+[eva:alarm] tests/value/div.i:37: Warning: 
+  pointer downcast. assert (unsigned int)(&X) ≤ 2147483647;
 [eva:alarm] tests/value/div.i:37: Warning: 
   signed overflow. assert -2147483648 ≤ -((int)(&X));
 [eva:alarm] tests/value/div.i:37: Warning: 
@@ -110,7 +130,7 @@
   assertion 'rte,division_by_zero' got final status valid.
 [eva] tests/value/div.i:36: 
   assertion 'rte,division_by_zero' got final status valid.
-[scope:rm_asserts] removing 1 assertion(s)
+[scope:rm_asserts] removing 2 assertion(s)
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function main:
   X ∈ [--..--]
diff --git a/tests/value/oracle/downcast.0.res.oracle b/tests/value/oracle/downcast.0.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..c27a3ff663f1e3ba23a8e2cf6cc34c19e724e10e
--- /dev/null
+++ b/tests/value/oracle/downcast.0.res.oracle
@@ -0,0 +1,231 @@
+[kernel] Parsing tests/value/downcast.i (no preprocessing)
+[eva] Analyzing an incomplete application starting at main
+[eva] Computing initial state
+[eva] Initial state computed
+[eva:initial-state] Values of globals at initialization
+  sx ∈ [--..--]
+  sy ∈ [--..--]
+  sz ∈ [--..--]
+  uc ∈ [--..--]
+  x ∈ [--..--]
+  ux ∈ [--..--]
+  uy ∈ [--..--]
+  uz ∈ [--..--]
+  s ∈ [--..--]
+  v ∈ [--..--]
+[eva] computing for function main1 <- main.
+  Called from tests/value/downcast.i:156.
+[eva] Recording results for main1
+[eva] Done for function main1
+[eva] computing for function main2_bitfield <- main.
+  Called from tests/value/downcast.i:157.
+[eva] Recording results for main2_bitfield
+[eva] Done for function main2_bitfield
+[eva] computing for function main3_reduction <- main.
+  Called from tests/value/downcast.i:158.
+[eva] Recording results for main3_reduction
+[eva] Done for function main3_reduction
+[eva] computing for function main4_pointer <- main.
+  Called from tests/value/downcast.i:159.
+[eva:alarm] tests/value/downcast.i:54: Warning: 
+  signed overflow. assert -9223372036854775808 ≤ p + (long long)100;
+[eva:alarm] tests/value/downcast.i:54: Warning: 
+  signed overflow. assert p + (long long)100 ≤ 9223372036854775807;
+[eva] Recording results for main4_pointer
+[eva] Done for function main4_pointer
+[eva] computing for function main5_wrap_signed <- main.
+  Called from tests/value/downcast.i:160.
+[eva:alarm] tests/value/downcast.i:62: Warning: 
+  assertion 'ASSUME' got status unknown.
+[eva] tests/value/downcast.i:63: assertion got status valid.
+[eva] tests/value/downcast.i:67: 
+  Frama_C_show_each:
+  [2147483503..2147483647],
+  [2147483648..2147483792],
+  [-2147483648..-2147483504]
+[eva] tests/value/downcast.i:67: 
+  Frama_C_show_each:
+  [100000..2147483502], [100145..2147483647], [100145..2147483647]
+[eva] tests/value/downcast.i:68: assertion got status valid.
+[eva] Recording results for main5_wrap_signed
+[eva] Done for function main5_wrap_signed
+[eva] computing for function main6_val_warn_converted_signed <- main.
+  Called from tests/value/downcast.i:161.
+[eva:alarm] tests/value/downcast.i:95: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 2147483647;
+[eva:alarm] tests/value/downcast.i:96: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 32767;
+[eva:alarm] tests/value/downcast.i:97: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 65535;
+[eva] Recording results for main6_val_warn_converted_signed
+[eva] Done for function main6_val_warn_converted_signed
+[eva] computing for function main7_signed_upcast <- main.
+  Called from tests/value/downcast.i:162.
+[eva] Recording results for main7_signed_upcast
+[eva] Done for function main7_signed_upcast
+[eva] computing for function main8_bitfields <- main.
+  Called from tests/value/downcast.i:163.
+[eva] Recording results for main8_bitfields
+[eva] Done for function main8_bitfields
+[eva] computing for function main9_bitfield <- main.
+  Called from tests/value/downcast.i:164.
+[eva] tests/value/downcast.i:138: assertion got status valid.
+[eva] Recording results for main9_bitfield
+[eva] Done for function main9_bitfield
+[eva] computing for function main10_loop <- main.
+  Called from tests/value/downcast.i:165.
+[eva] tests/value/downcast.i:149: starting to merge loop iterations
+[eva] Recording results for main10_loop
+[eva] Done for function main10_loop
+[eva] Recording results for main
+[eva] done for function main
+[eva] ====== VALUES COMPUTED ======
+[eva:final-states] Values at end of function main1:
+  sz ∈ [--..--]
+  uc ∈ [--..--]
+  x ∈ [--..--]
+  ux ∈ [--..--]
+  s ∈ [--..--]
+[eva:final-states] Values at end of function main10_loop:
+  c ∈ [--..--] or UNINITIALIZED
+  bf.b ∈ [--..--] or UNINITIALIZED
+    .[bits 10 to 31] ∈ UNINITIALIZED
+  k ∈ {10}
+[eva:final-states] Values at end of function main2_bitfield:
+  i ∈ {117}
+  j ∈ {254}
+  ss.i ∈ {-11} or UNINITIALIZED
+    .j ∈ {30} or UNINITIALIZED
+    .[bits 10 to 31] ∈ UNINITIALIZED
+[eva:final-states] Values at end of function main3_reduction:
+  x_0 ∈ [--..--]
+  c ∈ [--..--]
+  y ∈ [--..--]
+  d ∈ [--..--]
+[eva:final-states] Values at end of function main4_pointer:
+  p ∈ {{ &x_0 + {100} }}
+  q ∈ {{ &x_0 + {100} }}
+  r ∈ {{ &x_0 + {100} }}
+[eva:final-states] Values at end of function main5_wrap_signed:
+  x_0 ∈ [100000..2147483647]
+  y ∈ [100145..2147483792]
+  z ∈ [--..--]
+[eva:final-states] Values at end of function main6_val_warn_converted_signed:
+  
+[eva:final-states] Values at end of function main7_signed_upcast:
+  c ∈ {240}
+  i ∈ {240}
+[eva:final-states] Values at end of function main8_bitfields:
+  S.i1 ∈ {65}
+   .i2 ∈ {-1; 1} or UNINITIALIZED
+   .[bits 24 to 31] ∈ UNINITIALIZED
+  c ∈ {-1; 1; 65} or UNINITIALIZED
+[eva:final-states] Values at end of function main9_bitfield:
+  bf.a ∈ {1648}
+    .[bits 11 to 31] ∈ UNINITIALIZED
+  c ∈ {112} or UNINITIALIZED
+[eva:final-states] Values at end of function main:
+  sz ∈ [--..--]
+  uc ∈ [--..--]
+  x ∈ [--..--]
+  ux ∈ [--..--]
+  s ∈ [--..--]
+[from] Computing for function main1
+[from] Done for function main1
+[from] Computing for function main10_loop
+[from] Done for function main10_loop
+[from] Computing for function main2_bitfield
+[from] Done for function main2_bitfield
+[from] Computing for function main3_reduction
+[from] Done for function main3_reduction
+[from] Computing for function main4_pointer
+[from] Done for function main4_pointer
+[from] Computing for function main5_wrap_signed
+[from] Done for function main5_wrap_signed
+[from] Computing for function main6_val_warn_converted_signed
+[from] Done for function main6_val_warn_converted_signed
+[from] Computing for function main7_signed_upcast
+[from] Done for function main7_signed_upcast
+[from] Computing for function main8_bitfields
+[from] Done for function main8_bitfields
+[from] Computing for function main9_bitfield
+[from] Done for function main9_bitfield
+[from] Computing for function main
+[from] Done for function main
+[from] ====== DEPENDENCIES COMPUTED ======
+  These dependencies hold at termination for the executions that terminate:
+[from] Function main1:
+  sz FROM sx; sy
+  uc FROM x
+  x FROM uy; uz
+  ux FROM uy; uz
+  s FROM uy; uz
+[from] Function main10_loop:
+  NO EFFECTS
+[from] Function main2_bitfield:
+  NO EFFECTS
+[from] Function main3_reduction:
+  NO EFFECTS
+[from] Function main4_pointer:
+  NO EFFECTS
+[from] Function main5_wrap_signed:
+  NO EFFECTS
+[from] Function main6_val_warn_converted_signed:
+  NO EFFECTS
+[from] Function main7_signed_upcast:
+  NO EFFECTS
+[from] Function main8_bitfields:
+  NO EFFECTS
+[from] Function main9_bitfield:
+  NO EFFECTS
+[from] Function main:
+  sz FROM sx; sy
+  uc FROM x
+  x FROM uy; uz
+  ux FROM uy; uz
+  s FROM uy; uz
+[from] ====== END OF DEPENDENCIES ======
+[inout] Out (internal) for function main1:
+    sz; uc; x; ux; s
+[inout] Inputs for function main1:
+    sx; sy; x; uy; uz
+[inout] Out (internal) for function main10_loop:
+    c; bf.b; k
+[inout] Inputs for function main10_loop:
+    v
+[inout] Out (internal) for function main2_bitfield:
+    i; j; ss{.i; .j}
+[inout] Inputs for function main2_bitfield:
+    v
+[inout] Out (internal) for function main3_reduction:
+    x_0; c; y; d
+[inout] Inputs for function main3_reduction:
+    v
+[inout] Out (internal) for function main4_pointer:
+    p; q; r
+[inout] Inputs for function main4_pointer:
+    \nothing
+[inout] Out (internal) for function main5_wrap_signed:
+    x_0; y; z
+[inout] Inputs for function main5_wrap_signed:
+    v
+[inout] Out (internal) for function main6_val_warn_converted_signed:
+    s_0; u; e; b; e_0; b_0; e_1; b_1; p; x_0; y; z
+[inout] Inputs for function main6_val_warn_converted_signed:
+    v
+[inout] Out (internal) for function main7_signed_upcast:
+    c; i
+[inout] Inputs for function main7_signed_upcast:
+    \nothing
+[inout] Out (internal) for function main8_bitfields:
+    S{.i1; .i2}; c
+[inout] Inputs for function main8_bitfields:
+    v
+[inout] Out (internal) for function main9_bitfield:
+    bf.a; signed_a; c
+[inout] Inputs for function main9_bitfield:
+    v
+[inout] Out (internal) for function main:
+    sz; uc; x; ux; s
+[inout] Inputs for function main:
+    sx; sy; x; uy; uz; v
diff --git a/tests/value/oracle/downcast.1.res.oracle b/tests/value/oracle/downcast.1.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..4430fdae7754b7ca73df1a85b6314fffe75916ad
--- /dev/null
+++ b/tests/value/oracle/downcast.1.res.oracle
@@ -0,0 +1,286 @@
+[kernel] Parsing tests/value/downcast.i (no preprocessing)
+[eva] Analyzing an incomplete application starting at main
+[eva] Computing initial state
+[eva] Initial state computed
+[eva:initial-state] Values of globals at initialization
+  sx ∈ [--..--]
+  sy ∈ [--..--]
+  sz ∈ [--..--]
+  uc ∈ [--..--]
+  x ∈ [--..--]
+  ux ∈ [--..--]
+  uy ∈ [--..--]
+  uz ∈ [--..--]
+  s ∈ [--..--]
+  v ∈ [--..--]
+[eva] computing for function main1 <- main.
+  Called from tests/value/downcast.i:156.
+[eva:alarm] tests/value/downcast.i:23: Warning: 
+  signed downcast. assert -128 ≤ (int)((int)sx + (int)sy);
+[eva:alarm] tests/value/downcast.i:23: Warning: 
+  signed downcast. assert (int)((int)sx + (int)sy) ≤ 127;
+[eva:alarm] tests/value/downcast.i:26: Warning: 
+  signed downcast. assert (unsigned int)(uy + uz) ≤ 2147483647;
+[eva] Recording results for main1
+[eva] Done for function main1
+[eva] computing for function main2_bitfield <- main.
+  Called from tests/value/downcast.i:157.
+[eva:alarm] tests/value/downcast.i:36: Warning: 
+  signed downcast. assert i ≤ 15;
+[eva] Recording results for main2_bitfield
+[eva] Done for function main2_bitfield
+[eva] computing for function main3_reduction <- main.
+  Called from tests/value/downcast.i:158.
+[eva:alarm] tests/value/downcast.i:42: Warning: 
+  signed downcast. assert -128 ≤ x_0;
+[eva:alarm] tests/value/downcast.i:42: Warning: 
+  signed downcast. assert x_0 ≤ 127;
+[eva] Recording results for main3_reduction
+[eva] Done for function main3_reduction
+[eva] computing for function main4_pointer <- main.
+  Called from tests/value/downcast.i:159.
+[eva:alarm] tests/value/downcast.i:54: Warning: 
+  signed overflow. assert -9223372036854775808 ≤ p + (long long)100;
+[eva:alarm] tests/value/downcast.i:54: Warning: 
+  signed overflow. assert p + (long long)100 ≤ 9223372036854775807;
+[eva:alarm] tests/value/downcast.i:56: Warning: 
+  signed downcast. assert -2147483648 ≤ p;
+[eva:alarm] tests/value/downcast.i:56: Warning: 
+  signed downcast. assert p ≤ 2147483647;
+[eva] Recording results for main4_pointer
+[eva] Done for function main4_pointer
+[eva] computing for function main5_wrap_signed <- main.
+  Called from tests/value/downcast.i:160.
+[eva:alarm] tests/value/downcast.i:62: Warning: 
+  assertion 'ASSUME' got status unknown.
+[eva] tests/value/downcast.i:63: assertion got status valid.
+[eva:alarm] tests/value/downcast.i:66: Warning: 
+  signed downcast. assert y ≤ 2147483647;
+[eva] tests/value/downcast.i:67: 
+  Frama_C_show_each:
+  [100000..2147483647], [100145..2147483647], [100145..2147483647]
+[eva] tests/value/downcast.i:68: assertion got status valid.
+[eva] Recording results for main5_wrap_signed
+[eva] Done for function main5_wrap_signed
+[eva] computing for function main6_val_warn_converted_signed <- main.
+  Called from tests/value/downcast.i:161.
+[eva:alarm] tests/value/downcast.i:75: Warning: 
+  signed downcast. assert 65300u ≤ 32767;
+[eva:alarm] tests/value/downcast.i:86: Warning: 
+  signed downcast. assert e_0 ≤ 32767;
+[eva:alarm] tests/value/downcast.i:91: Warning: 
+  signed downcast. assert e_1 ≤ 32767;
+[eva:alarm] tests/value/downcast.i:95: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 2147483647;
+[eva:alarm] tests/value/downcast.i:96: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 32767;
+[eva:alarm] tests/value/downcast.i:97: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 65535;
+[eva] Recording results for main6_val_warn_converted_signed
+[eva] Done for function main6_val_warn_converted_signed
+[eva] computing for function main7_signed_upcast <- main.
+  Called from tests/value/downcast.i:162.
+[eva] Recording results for main7_signed_upcast
+[eva] Done for function main7_signed_upcast
+[eva] computing for function main8_bitfields <- main.
+  Called from tests/value/downcast.i:163.
+[eva:alarm] tests/value/downcast.i:118: Warning: 
+  signed downcast. assert S.i1 ≤ 31;
+[eva:alarm] tests/value/downcast.i:119: Warning: 
+  signed downcast. assert S.i1 ≤ 127;
+[eva:alarm] tests/value/downcast.i:123: Warning: 
+  signed downcast. assert S.i1 ≤ 31;
+[eva:alarm] tests/value/downcast.i:124: Warning: 
+  signed downcast. assert S.i1 ≤ 127;
+[eva:alarm] tests/value/downcast.i:128: Warning: 
+  signed downcast. assert S.i1 ≤ 31;
+[eva] Recording results for main8_bitfields
+[eva] Done for function main8_bitfields
+[eva] computing for function main9_bitfield <- main.
+  Called from tests/value/downcast.i:164.
+[eva:alarm] tests/value/downcast.i:137: Warning: 
+  signed downcast. assert bf.a ≤ 1023;
+[eva:alarm] tests/value/downcast.i:141: Warning: 
+  signed downcast. assert bf.a ≤ 127;
+[eva] Recording results for main9_bitfield
+[eva] Done for function main9_bitfield
+[eva] computing for function main10_loop <- main.
+  Called from tests/value/downcast.i:165.
+[eva:alarm] tests/value/downcast.i:151: Warning: 
+  signed downcast. assert bf.b ≤ 127;
+[eva] tests/value/downcast.i:149: starting to merge loop iterations
+[eva] Recording results for main10_loop
+[eva] Done for function main10_loop
+[eva] Recording results for main
+[eva] done for function main
+[eva] tests/value/downcast.i:36: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] tests/value/downcast.i:75: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] tests/value/downcast.i:86: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] tests/value/downcast.i:91: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] tests/value/downcast.i:118: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] tests/value/downcast.i:119: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] tests/value/downcast.i:123: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] tests/value/downcast.i:124: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] tests/value/downcast.i:128: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] tests/value/downcast.i:137: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] tests/value/downcast.i:141: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] ====== VALUES COMPUTED ======
+[eva:final-states] Values at end of function main1:
+  sz ∈ [--..--]
+  uc ∈ [--..--]
+  x ∈ [0..2147483647]
+  ux ∈ [--..--]
+  s ∈ [--..--]
+[eva:final-states] Values at end of function main10_loop:
+  c ∈ [0..127] or UNINITIALIZED
+  bf.b ∈ [--..--] or UNINITIALIZED
+    .[bits 10 to 31] ∈ UNINITIALIZED
+  k ∈ {10}
+[eva:final-states] Values at end of function main2_bitfield:
+  i ∈ {117}
+  j ∈ {254}
+  ss.i ∈ UNINITIALIZED
+    .j ∈ {30} or UNINITIALIZED
+    .[bits 10 to 31] ∈ UNINITIALIZED
+[eva:final-states] Values at end of function main3_reduction:
+  x_0 ∈ [-128..127]
+  c ∈ [--..--]
+  y ∈ [--..--]
+  d ∈ [--..--]
+[eva:final-states] Values at end of function main4_pointer:
+  p ∈ {{ &x_0 + {100} }}
+  q ∈ {{ &x_0 + {100} }}
+  r ∈ {{ &x_0 + {100} }}
+[eva:final-states] Values at end of function main5_wrap_signed:
+  x_0 ∈ [100000..2147483647]
+  y ∈ [100145..2147483647]
+  z ∈ [100145..2147483647]
+[eva:final-states] Values at end of function main6_val_warn_converted_signed:
+  
+[eva:final-states] Values at end of function main7_signed_upcast:
+  c ∈ {240}
+  i ∈ {240}
+[eva:final-states] Values at end of function main8_bitfields:
+  S.i1 ∈ {65}
+   {.i2; .[bits 24 to 31]} ∈ UNINITIALIZED
+  c ∈ {65} or UNINITIALIZED
+[eva:final-states] Values at end of function main9_bitfield:
+  bf.a ∈ {1648}
+    .[bits 11 to 31] ∈ UNINITIALIZED
+  c ∈ UNINITIALIZED
+[eva:final-states] Values at end of function main:
+  sz ∈ [--..--]
+  uc ∈ [--..--]
+  x ∈ [0..2147483647]
+  ux ∈ [--..--]
+  s ∈ [--..--]
+[from] Computing for function main1
+[from] Done for function main1
+[from] Computing for function main10_loop
+[from] Done for function main10_loop
+[from] Computing for function main2_bitfield
+[from] Done for function main2_bitfield
+[from] Computing for function main3_reduction
+[from] Done for function main3_reduction
+[from] Computing for function main4_pointer
+[from] Done for function main4_pointer
+[from] Computing for function main5_wrap_signed
+[from] Done for function main5_wrap_signed
+[from] Computing for function main6_val_warn_converted_signed
+[from] Done for function main6_val_warn_converted_signed
+[from] Computing for function main7_signed_upcast
+[from] Done for function main7_signed_upcast
+[from] Computing for function main8_bitfields
+[from] Done for function main8_bitfields
+[from] Computing for function main9_bitfield
+[from] Done for function main9_bitfield
+[from] Computing for function main
+[from] Done for function main
+[from] ====== DEPENDENCIES COMPUTED ======
+  These dependencies hold at termination for the executions that terminate:
+[from] Function main1:
+  sz FROM sx; sy
+  uc FROM x
+  x FROM uy; uz
+  ux FROM uy; uz
+  s FROM uy; uz
+[from] Function main10_loop:
+  NO EFFECTS
+[from] Function main2_bitfield:
+  NO EFFECTS
+[from] Function main3_reduction:
+  NO EFFECTS
+[from] Function main4_pointer:
+  NO EFFECTS
+[from] Function main5_wrap_signed:
+  NO EFFECTS
+[from] Function main6_val_warn_converted_signed:
+  NO EFFECTS
+[from] Function main7_signed_upcast:
+  NO EFFECTS
+[from] Function main8_bitfields:
+  NO EFFECTS
+[from] Function main9_bitfield:
+  NO EFFECTS
+[from] Function main:
+  sz FROM sx; sy
+  uc FROM x
+  x FROM uy; uz
+  ux FROM uy; uz
+  s FROM uy; uz
+[from] ====== END OF DEPENDENCIES ======
+[inout] Out (internal) for function main1:
+    sz; uc; x; ux; s
+[inout] Inputs for function main1:
+    sx; sy; x; uy; uz
+[inout] Out (internal) for function main10_loop:
+    c; bf.b; k
+[inout] Inputs for function main10_loop:
+    v
+[inout] Out (internal) for function main2_bitfield:
+    i; j; ss{.i; .j}
+[inout] Inputs for function main2_bitfield:
+    v
+[inout] Out (internal) for function main3_reduction:
+    x_0; c; y; d
+[inout] Inputs for function main3_reduction:
+    v
+[inout] Out (internal) for function main4_pointer:
+    p; q; r
+[inout] Inputs for function main4_pointer:
+    \nothing
+[inout] Out (internal) for function main5_wrap_signed:
+    x_0; y; z
+[inout] Inputs for function main5_wrap_signed:
+    v
+[inout] Out (internal) for function main6_val_warn_converted_signed:
+    s_0; u; e; b; e_0; b_0; e_1; b_1; p; x_0; y; z
+[inout] Inputs for function main6_val_warn_converted_signed:
+    v
+[inout] Out (internal) for function main7_signed_upcast:
+    c; i
+[inout] Inputs for function main7_signed_upcast:
+    \nothing
+[inout] Out (internal) for function main8_bitfields:
+    S{.i1; .i2}; c
+[inout] Inputs for function main8_bitfields:
+    v
+[inout] Out (internal) for function main9_bitfield:
+    bf.a; signed_a; c
+[inout] Inputs for function main9_bitfield:
+    v
+[inout] Out (internal) for function main:
+    sz; uc; x; ux; s
+[inout] Inputs for function main:
+    sx; sy; x; uy; uz; v
diff --git a/tests/value/oracle/downcast.2.res.oracle b/tests/value/oracle/downcast.2.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..0c43f9fb2f787dbfc9aa221ef2c9387f3ed6f8c6
--- /dev/null
+++ b/tests/value/oracle/downcast.2.res.oracle
@@ -0,0 +1,257 @@
+[kernel] Parsing tests/value/downcast.i (no preprocessing)
+[eva] Analyzing an incomplete application starting at main
+[eva] Computing initial state
+[eva] Initial state computed
+[eva:initial-state] Values of globals at initialization
+  sx ∈ [--..--]
+  sy ∈ [--..--]
+  sz ∈ [--..--]
+  uc ∈ [--..--]
+  x ∈ [--..--]
+  ux ∈ [--..--]
+  uy ∈ [--..--]
+  uz ∈ [--..--]
+  s ∈ [--..--]
+  v ∈ [--..--]
+[eva] computing for function main1 <- main.
+  Called from tests/value/downcast.i:156.
+[eva:alarm] tests/value/downcast.i:24: Warning: 
+  unsigned downcast. assert 0 ≤ (int)((int)sx + (int)sy);
+[eva:alarm] tests/value/downcast.i:25: Warning: 
+  unsigned downcast. assert 0 ≤ x;
+[eva:alarm] tests/value/downcast.i:25: Warning: 
+  unsigned downcast. assert x ≤ 255;
+[eva:alarm] tests/value/downcast.i:28: Warning: 
+  unsigned downcast. assert (unsigned int)(uy + uz) ≤ 65535;
+[eva] Recording results for main1
+[eva] Done for function main1
+[eva] computing for function main2_bitfield <- main.
+  Called from tests/value/downcast.i:157.
+[eva:alarm] tests/value/downcast.i:37: Warning: 
+  unsigned downcast. assert j ≤ 31;
+[eva] Recording results for main2_bitfield
+[eva] Done for function main2_bitfield
+[eva] computing for function main3_reduction <- main.
+  Called from tests/value/downcast.i:158.
+[eva:alarm] tests/value/downcast.i:44: Warning: 
+  unsigned downcast. assert 0 ≤ v;
+[eva:alarm] tests/value/downcast.i:45: Warning: 
+  unsigned downcast. assert y ≤ 255;
+[eva] Recording results for main3_reduction
+[eva] Done for function main3_reduction
+[eva] computing for function main4_pointer <- main.
+  Called from tests/value/downcast.i:159.
+[eva:alarm] tests/value/downcast.i:54: Warning: 
+  signed overflow. assert -9223372036854775808 ≤ p + (long long)100;
+[eva:alarm] tests/value/downcast.i:54: Warning: 
+  signed overflow. assert p + (long long)100 ≤ 9223372036854775807;
+[eva:alarm] tests/value/downcast.i:55: Warning: 
+  unsigned downcast. assert 0 ≤ p;
+[eva:alarm] tests/value/downcast.i:55: Warning: 
+  unsigned downcast. assert p ≤ 4294967295;
+[eva] Recording results for main4_pointer
+[eva] Done for function main4_pointer
+[eva] computing for function main5_wrap_signed <- main.
+  Called from tests/value/downcast.i:160.
+[eva:alarm] tests/value/downcast.i:62: Warning: 
+  assertion 'ASSUME' got status unknown.
+[eva] tests/value/downcast.i:63: assertion got status valid.
+[eva] tests/value/downcast.i:67: 
+  Frama_C_show_each:
+  [100000..2147483647], [100145..2147483792], [-2147483648..2147483647]
+[eva:alarm] tests/value/downcast.i:68: Warning: assertion got status unknown.
+[eva] Recording results for main5_wrap_signed
+[eva] Done for function main5_wrap_signed
+[eva] computing for function main6_val_warn_converted_signed <- main.
+  Called from tests/value/downcast.i:161.
+[eva:alarm] tests/value/downcast.i:85: Warning: 
+  unsigned downcast. assert 0 ≤ (int)(-12);
+[eva:alarm] tests/value/downcast.i:90: Warning: 
+  unsigned downcast. assert 0 ≤ (int)(-64000);
+[eva:alarm] tests/value/downcast.i:95: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 2147483647;
+[eva:alarm] tests/value/downcast.i:96: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 32767;
+[eva:alarm] tests/value/downcast.i:97: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 65535;
+[eva] Recording results for main6_val_warn_converted_signed
+[eva] Done for function main6_val_warn_converted_signed
+[eva] computing for function main7_signed_upcast <- main.
+  Called from tests/value/downcast.i:162.
+[eva] Recording results for main7_signed_upcast
+[eva] Done for function main7_signed_upcast
+[eva] computing for function main8_bitfields <- main.
+  Called from tests/value/downcast.i:163.
+[eva] Recording results for main8_bitfields
+[eva] Done for function main8_bitfields
+[eva] computing for function main9_bitfield <- main.
+  Called from tests/value/downcast.i:164.
+[eva] tests/value/downcast.i:138: assertion got status valid.
+[eva] Recording results for main9_bitfield
+[eva] Done for function main9_bitfield
+[eva] computing for function main10_loop <- main.
+  Called from tests/value/downcast.i:165.
+[eva:alarm] tests/value/downcast.i:150: Warning: 
+  unsigned downcast. assert 0 ≤ v;
+[eva:alarm] tests/value/downcast.i:150: Warning: 
+  unsigned downcast. assert v ≤ 1023;
+[eva] tests/value/downcast.i:149: starting to merge loop iterations
+[eva] Recording results for main10_loop
+[eva] Done for function main10_loop
+[eva] Recording results for main
+[eva] done for function main
+[eva] tests/value/downcast.i:37: 
+  assertion 'Eva,unsigned_downcast' got final status invalid.
+[eva] tests/value/downcast.i:85: 
+  assertion 'Eva,unsigned_downcast' got final status invalid.
+[eva] tests/value/downcast.i:90: 
+  assertion 'Eva,unsigned_downcast' got final status invalid.
+[eva] ====== VALUES COMPUTED ======
+[eva:final-states] Values at end of function main1:
+  sz ∈ [--..--]
+  uc ∈ [--..--]
+  x ∈ [--..--]
+  ux ∈ [--..--]
+  s ∈ [--..--]
+[eva:final-states] Values at end of function main10_loop:
+  c ∈ [--..--] or UNINITIALIZED
+  bf.b ∈ [--..--] or UNINITIALIZED
+    .[bits 10 to 31] ∈ UNINITIALIZED
+  k ∈ {10}
+[eva:final-states] Values at end of function main2_bitfield:
+  i ∈ {117}
+  j ∈ {254}
+  ss.i ∈ {-11} or UNINITIALIZED
+    {.j; .[bits 10 to 31]} ∈ UNINITIALIZED
+[eva:final-states] Values at end of function main3_reduction:
+  x_0 ∈ [--..--]
+  c ∈ [--..--]
+  y ∈ [0..255]
+  d ∈ [--..--]
+[eva:final-states] Values at end of function main4_pointer:
+  p ∈ {{ &x_0 + {100} }}
+  q ∈ {{ &x_0 + {100} }}
+  r ∈ {{ &x_0 + {100} }}
+[eva:final-states] Values at end of function main5_wrap_signed:
+  x_0 ∈ [100000..2147483647]
+  y ∈ [100145..2147483792]
+  z ∈ [--..--]
+[eva:final-states] Values at end of function main6_val_warn_converted_signed:
+  
+[eva:final-states] Values at end of function main7_signed_upcast:
+  c ∈ {240}
+  i ∈ {240}
+[eva:final-states] Values at end of function main8_bitfields:
+  S.i1 ∈ {65}
+   .i2 ∈ {-1; 1} or UNINITIALIZED
+   .[bits 24 to 31] ∈ UNINITIALIZED
+  c ∈ {-1; 1; 65} or UNINITIALIZED
+[eva:final-states] Values at end of function main9_bitfield:
+  bf.a ∈ {1648}
+    .[bits 11 to 31] ∈ UNINITIALIZED
+  c ∈ {112} or UNINITIALIZED
+[eva:final-states] Values at end of function main:
+  sz ∈ [--..--]
+  uc ∈ [--..--]
+  x ∈ [--..--]
+  ux ∈ [--..--]
+  s ∈ [--..--]
+[from] Computing for function main1
+[from] Done for function main1
+[from] Computing for function main10_loop
+[from] Done for function main10_loop
+[from] Computing for function main2_bitfield
+[from] Done for function main2_bitfield
+[from] Computing for function main3_reduction
+[from] Done for function main3_reduction
+[from] Computing for function main4_pointer
+[from] Done for function main4_pointer
+[from] Computing for function main5_wrap_signed
+[from] Done for function main5_wrap_signed
+[from] Computing for function main6_val_warn_converted_signed
+[from] Done for function main6_val_warn_converted_signed
+[from] Computing for function main7_signed_upcast
+[from] Done for function main7_signed_upcast
+[from] Computing for function main8_bitfields
+[from] Done for function main8_bitfields
+[from] Computing for function main9_bitfield
+[from] Done for function main9_bitfield
+[from] Computing for function main
+[from] Done for function main
+[from] ====== DEPENDENCIES COMPUTED ======
+  These dependencies hold at termination for the executions that terminate:
+[from] Function main1:
+  sz FROM sx; sy
+  uc FROM x
+  x FROM uy; uz
+  ux FROM uy; uz
+  s FROM uy; uz
+[from] Function main10_loop:
+  NO EFFECTS
+[from] Function main2_bitfield:
+  NO EFFECTS
+[from] Function main3_reduction:
+  NO EFFECTS
+[from] Function main4_pointer:
+  NO EFFECTS
+[from] Function main5_wrap_signed:
+  NO EFFECTS
+[from] Function main6_val_warn_converted_signed:
+  NO EFFECTS
+[from] Function main7_signed_upcast:
+  NO EFFECTS
+[from] Function main8_bitfields:
+  NO EFFECTS
+[from] Function main9_bitfield:
+  NO EFFECTS
+[from] Function main:
+  sz FROM sx; sy
+  uc FROM x
+  x FROM uy; uz
+  ux FROM uy; uz
+  s FROM uy; uz
+[from] ====== END OF DEPENDENCIES ======
+[inout] Out (internal) for function main1:
+    sz; uc; x; ux; s
+[inout] Inputs for function main1:
+    sx; sy; x; uy; uz
+[inout] Out (internal) for function main10_loop:
+    c; bf.b; k
+[inout] Inputs for function main10_loop:
+    v
+[inout] Out (internal) for function main2_bitfield:
+    i; j; ss{.i; .j}
+[inout] Inputs for function main2_bitfield:
+    v
+[inout] Out (internal) for function main3_reduction:
+    x_0; c; y; d
+[inout] Inputs for function main3_reduction:
+    v
+[inout] Out (internal) for function main4_pointer:
+    p; q; r
+[inout] Inputs for function main4_pointer:
+    \nothing
+[inout] Out (internal) for function main5_wrap_signed:
+    x_0; y; z
+[inout] Inputs for function main5_wrap_signed:
+    v
+[inout] Out (internal) for function main6_val_warn_converted_signed:
+    s_0; u; e; b; e_0; e_1; p; x_0; y; z
+[inout] Inputs for function main6_val_warn_converted_signed:
+    v
+[inout] Out (internal) for function main7_signed_upcast:
+    c; i
+[inout] Inputs for function main7_signed_upcast:
+    \nothing
+[inout] Out (internal) for function main8_bitfields:
+    S{.i1; .i2}; c
+[inout] Inputs for function main8_bitfields:
+    v
+[inout] Out (internal) for function main9_bitfield:
+    bf.a; signed_a; c
+[inout] Inputs for function main9_bitfield:
+    v
+[inout] Out (internal) for function main:
+    sz; uc; x; ux; s
+[inout] Inputs for function main:
+    sx; sy; x; uy; uz; v
diff --git a/tests/value/oracle/downcast.3.res.oracle b/tests/value/oracle/downcast.3.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..d25d52f4759afa0aabbfca5eb6c5cd47d4312a86
--- /dev/null
+++ b/tests/value/oracle/downcast.3.res.oracle
@@ -0,0 +1,270 @@
+[kernel] Parsing tests/value/downcast.i (no preprocessing)
+[eva] Analyzing an incomplete application starting at main
+[eva] Computing initial state
+[eva] Initial state computed
+[eva:initial-state] Values of globals at initialization
+  sx ∈ [--..--]
+  sy ∈ [--..--]
+  sz ∈ [--..--]
+  uc ∈ [--..--]
+  x ∈ [--..--]
+  ux ∈ [--..--]
+  uy ∈ [--..--]
+  uz ∈ [--..--]
+  s ∈ [--..--]
+  v ∈ [--..--]
+[eva] computing for function main1 <- main.
+  Called from tests/value/downcast.i:156.
+[eva:alarm] tests/value/downcast.i:23: Warning: 
+  signed downcast. assert -128 ≤ (int)((int)sx + (int)sy);
+[eva:alarm] tests/value/downcast.i:23: Warning: 
+  signed downcast. assert (int)((int)sx + (int)sy) ≤ 127;
+[eva] Recording results for main1
+[eva] Done for function main1
+[eva] computing for function main2_bitfield <- main.
+  Called from tests/value/downcast.i:157.
+[eva:alarm] tests/value/downcast.i:36: Warning: 
+  signed downcast. assert i ≤ 15;
+[eva] Recording results for main2_bitfield
+[eva] Done for function main2_bitfield
+[eva] computing for function main3_reduction <- main.
+  Called from tests/value/downcast.i:158.
+[eva:alarm] tests/value/downcast.i:42: Warning: 
+  signed downcast. assert -128 ≤ x_0;
+[eva:alarm] tests/value/downcast.i:42: Warning: 
+  signed downcast. assert x_0 ≤ 127;
+[eva] Recording results for main3_reduction
+[eva] Done for function main3_reduction
+[eva] computing for function main4_pointer <- main.
+  Called from tests/value/downcast.i:159.
+[eva:alarm] tests/value/downcast.i:54: Warning: 
+  signed overflow. assert -9223372036854775808 ≤ p + (long long)100;
+[eva:alarm] tests/value/downcast.i:54: Warning: 
+  signed overflow. assert p + (long long)100 ≤ 9223372036854775807;
+[eva:alarm] tests/value/downcast.i:56: Warning: 
+  signed downcast. assert -2147483648 ≤ p;
+[eva:alarm] tests/value/downcast.i:56: Warning: 
+  signed downcast. assert p ≤ 2147483647;
+[eva] Recording results for main4_pointer
+[eva] Done for function main4_pointer
+[eva] computing for function main5_wrap_signed <- main.
+  Called from tests/value/downcast.i:160.
+[eva:alarm] tests/value/downcast.i:62: Warning: 
+  assertion 'ASSUME' got status unknown.
+[eva] tests/value/downcast.i:63: assertion got status valid.
+[eva] tests/value/downcast.i:67: 
+  Frama_C_show_each:
+  [100000..2147483647], [100145..2147483792], [-2147483648..2147483647]
+[eva:alarm] tests/value/downcast.i:68: Warning: assertion got status unknown.
+[eva] Recording results for main5_wrap_signed
+[eva] Done for function main5_wrap_signed
+[eva] computing for function main6_val_warn_converted_signed <- main.
+  Called from tests/value/downcast.i:161.
+[eva:alarm] tests/value/downcast.i:75: Warning: 
+  signed downcast. assert (int)65300u ≤ 32767;
+[eva:alarm] tests/value/downcast.i:91: Warning: 
+  signed downcast. assert -32768 ≤ (int)e_1;
+[eva:alarm] tests/value/downcast.i:95: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 2147483647;
+[eva:alarm] tests/value/downcast.i:96: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 32767;
+[eva:alarm] tests/value/downcast.i:97: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 65535;
+[eva] Recording results for main6_val_warn_converted_signed
+[eva] Done for function main6_val_warn_converted_signed
+[eva] computing for function main7_signed_upcast <- main.
+  Called from tests/value/downcast.i:162.
+[eva] Recording results for main7_signed_upcast
+[eva] Done for function main7_signed_upcast
+[eva] computing for function main8_bitfields <- main.
+  Called from tests/value/downcast.i:163.
+[eva:alarm] tests/value/downcast.i:123: Warning: 
+  signed downcast. assert (int)S.i1 ≤ 31;
+[eva:alarm] tests/value/downcast.i:124: Warning: 
+  signed downcast. assert (int)S.i1 ≤ 127;
+[eva:alarm] tests/value/downcast.i:128: Warning: 
+  signed downcast. assert (int)S.i1 ≤ 31;
+[eva] Recording results for main8_bitfields
+[eva] Done for function main8_bitfields
+[eva] computing for function main9_bitfield <- main.
+  Called from tests/value/downcast.i:164.
+[eva] tests/value/downcast.i:138: assertion got status valid.
+[eva:alarm] tests/value/downcast.i:141: Warning: 
+  signed downcast. assert -128 ≤ (int)bf.a;
+[eva] Recording results for main9_bitfield
+[eva] Done for function main9_bitfield
+[eva] computing for function main10_loop <- main.
+  Called from tests/value/downcast.i:165.
+[eva:alarm] tests/value/downcast.i:151: Warning: 
+  signed downcast. assert -128 ≤ (int)bf.b;
+[eva:alarm] tests/value/downcast.i:151: Warning: 
+  signed downcast. assert (int)bf.b ≤ 127;
+[eva] tests/value/downcast.i:149: starting to merge loop iterations
+[eva] Recording results for main10_loop
+[eva] Done for function main10_loop
+[eva] Recording results for main
+[eva] done for function main
+[eva] tests/value/downcast.i:36: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] tests/value/downcast.i:75: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] tests/value/downcast.i:91: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] tests/value/downcast.i:123: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] tests/value/downcast.i:124: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] tests/value/downcast.i:128: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] tests/value/downcast.i:141: 
+  assertion 'Eva,signed_downcast' got final status invalid.
+[eva] ====== VALUES COMPUTED ======
+[eva:final-states] Values at end of function main1:
+  sz ∈ [--..--]
+  uc ∈ [--..--]
+  x ∈ [--..--]
+  ux ∈ [--..--]
+  s ∈ [--..--]
+[eva:final-states] Values at end of function main10_loop:
+  c ∈ [--..--] or UNINITIALIZED
+  bf.b ∈ [--..--] or UNINITIALIZED
+    .[bits 10 to 31] ∈ UNINITIALIZED
+  k ∈ {10}
+[eva:final-states] Values at end of function main2_bitfield:
+  i ∈ {117}
+  j ∈ {254}
+  ss.i ∈ UNINITIALIZED
+    .j ∈ {30} or UNINITIALIZED
+    .[bits 10 to 31] ∈ UNINITIALIZED
+[eva:final-states] Values at end of function main3_reduction:
+  x_0 ∈ [-128..127]
+  c ∈ [--..--]
+  y ∈ [--..--]
+  d ∈ [--..--]
+[eva:final-states] Values at end of function main4_pointer:
+  p ∈ {{ &x_0 + {100} }}
+  q ∈ {{ &x_0 + {100} }}
+  r ∈ {{ &x_0 + {100} }}
+[eva:final-states] Values at end of function main5_wrap_signed:
+  x_0 ∈ [100000..2147483647]
+  y ∈ [100145..2147483792]
+  z ∈ [--..--]
+[eva:final-states] Values at end of function main6_val_warn_converted_signed:
+  
+[eva:final-states] Values at end of function main7_signed_upcast:
+  c ∈ {240}
+  i ∈ {240}
+[eva:final-states] Values at end of function main8_bitfields:
+  S.i1 ∈ {65}
+   .i2 ∈ {-1} or UNINITIALIZED
+   .[bits 24 to 31] ∈ UNINITIALIZED
+  c ∈ {-1; 65} or UNINITIALIZED
+[eva:final-states] Values at end of function main9_bitfield:
+  bf.a ∈ {1648}
+    .[bits 11 to 31] ∈ UNINITIALIZED
+  c ∈ UNINITIALIZED
+[eva:final-states] Values at end of function main:
+  sz ∈ [--..--]
+  uc ∈ [--..--]
+  x ∈ [--..--]
+  ux ∈ [--..--]
+  s ∈ [--..--]
+[from] Computing for function main1
+[from] Done for function main1
+[from] Computing for function main10_loop
+[from] Done for function main10_loop
+[from] Computing for function main2_bitfield
+[from] Done for function main2_bitfield
+[from] Computing for function main3_reduction
+[from] Done for function main3_reduction
+[from] Computing for function main4_pointer
+[from] Done for function main4_pointer
+[from] Computing for function main5_wrap_signed
+[from] Done for function main5_wrap_signed
+[from] Computing for function main6_val_warn_converted_signed
+[from] Done for function main6_val_warn_converted_signed
+[from] Computing for function main7_signed_upcast
+[from] Done for function main7_signed_upcast
+[from] Computing for function main8_bitfields
+[from] Done for function main8_bitfields
+[from] Computing for function main9_bitfield
+[from] Done for function main9_bitfield
+[from] Computing for function main
+[from] Done for function main
+[from] ====== DEPENDENCIES COMPUTED ======
+  These dependencies hold at termination for the executions that terminate:
+[from] Function main1:
+  sz FROM sx; sy
+  uc FROM x
+  x FROM uy; uz
+  ux FROM uy; uz
+  s FROM uy; uz
+[from] Function main10_loop:
+  NO EFFECTS
+[from] Function main2_bitfield:
+  NO EFFECTS
+[from] Function main3_reduction:
+  NO EFFECTS
+[from] Function main4_pointer:
+  NO EFFECTS
+[from] Function main5_wrap_signed:
+  NO EFFECTS
+[from] Function main6_val_warn_converted_signed:
+  NO EFFECTS
+[from] Function main7_signed_upcast:
+  NO EFFECTS
+[from] Function main8_bitfields:
+  NO EFFECTS
+[from] Function main9_bitfield:
+  NO EFFECTS
+[from] Function main:
+  sz FROM sx; sy
+  uc FROM x
+  x FROM uy; uz
+  ux FROM uy; uz
+  s FROM uy; uz
+[from] ====== END OF DEPENDENCIES ======
+[inout] Out (internal) for function main1:
+    sz; uc; x; ux; s
+[inout] Inputs for function main1:
+    sx; sy; x; uy; uz
+[inout] Out (internal) for function main10_loop:
+    c; bf.b; k
+[inout] Inputs for function main10_loop:
+    v
+[inout] Out (internal) for function main2_bitfield:
+    i; j; ss{.i; .j}
+[inout] Inputs for function main2_bitfield:
+    v
+[inout] Out (internal) for function main3_reduction:
+    x_0; c; y; d
+[inout] Inputs for function main3_reduction:
+    v
+[inout] Out (internal) for function main4_pointer:
+    p; q; r
+[inout] Inputs for function main4_pointer:
+    \nothing
+[inout] Out (internal) for function main5_wrap_signed:
+    x_0; y; z
+[inout] Inputs for function main5_wrap_signed:
+    v
+[inout] Out (internal) for function main6_val_warn_converted_signed:
+    s_0; u; e; b; e_0; b_0; e_1; b_1; p; x_0; y; z
+[inout] Inputs for function main6_val_warn_converted_signed:
+    v
+[inout] Out (internal) for function main7_signed_upcast:
+    c; i
+[inout] Inputs for function main7_signed_upcast:
+    \nothing
+[inout] Out (internal) for function main8_bitfields:
+    S{.i1; .i2}; c
+[inout] Inputs for function main8_bitfields:
+    v
+[inout] Out (internal) for function main9_bitfield:
+    bf.a; signed_a; c
+[inout] Inputs for function main9_bitfield:
+    v
+[inout] Out (internal) for function main:
+    sz; uc; x; ux; s
+[inout] Inputs for function main:
+    sx; sy; x; uy; uz; v
diff --git a/tests/value/oracle/downcast.4.res.oracle b/tests/value/oracle/downcast.4.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..d691ffe3fe111924fcefe788f39991a23f6f2f9b
--- /dev/null
+++ b/tests/value/oracle/downcast.4.res.oracle
@@ -0,0 +1,226 @@
+[kernel] Parsing tests/value/downcast.i (no preprocessing)
+[eva] Analyzing an incomplete application starting at main
+[eva] Computing initial state
+[eva] Initial state computed
+[eva:initial-state] Values of globals at initialization
+  sx ∈ [--..--]
+  sy ∈ [--..--]
+  sz ∈ [--..--]
+  uc ∈ [--..--]
+  x ∈ [--..--]
+  ux ∈ [--..--]
+  uy ∈ [--..--]
+  uz ∈ [--..--]
+  s ∈ [--..--]
+  v ∈ [--..--]
+[eva] computing for function main1 <- main.
+  Called from tests/value/downcast.i:156.
+[eva] Recording results for main1
+[eva] Done for function main1
+[eva] computing for function main2_bitfield <- main.
+  Called from tests/value/downcast.i:157.
+[eva] Recording results for main2_bitfield
+[eva] Done for function main2_bitfield
+[eva] computing for function main3_reduction <- main.
+  Called from tests/value/downcast.i:158.
+[eva] Recording results for main3_reduction
+[eva] Done for function main3_reduction
+[eva] computing for function main4_pointer <- main.
+  Called from tests/value/downcast.i:159.
+[eva:alarm] tests/value/downcast.i:54: Warning: 
+  signed overflow. assert -9223372036854775808 ≤ p + (long long)100;
+[eva:alarm] tests/value/downcast.i:54: Warning: 
+  signed overflow. assert p + (long long)100 ≤ 9223372036854775807;
+[eva] Recording results for main4_pointer
+[eva] Done for function main4_pointer
+[eva] computing for function main5_wrap_signed <- main.
+  Called from tests/value/downcast.i:160.
+[eva:alarm] tests/value/downcast.i:62: Warning: 
+  assertion 'ASSUME' got status unknown.
+[eva] tests/value/downcast.i:63: assertion got status valid.
+[eva] tests/value/downcast.i:67: 
+  Frama_C_show_each:
+  [100000..2147483647], [100145..2147483792], [-2147483648..2147483647]
+[eva:alarm] tests/value/downcast.i:68: Warning: assertion got status unknown.
+[eva] Recording results for main5_wrap_signed
+[eva] Done for function main5_wrap_signed
+[eva] computing for function main6_val_warn_converted_signed <- main.
+  Called from tests/value/downcast.i:161.
+[eva] tests/value/downcast.i:96: 
+  Assigning imprecise value to y.
+  The imprecision originates from Arithmetic {tests/value/downcast.i:96}
+[eva] tests/value/downcast.i:97: 
+  Assigning imprecise value to z.
+  The imprecision originates from Arithmetic {tests/value/downcast.i:97}
+[eva] Recording results for main6_val_warn_converted_signed
+[eva] Done for function main6_val_warn_converted_signed
+[eva] computing for function main7_signed_upcast <- main.
+  Called from tests/value/downcast.i:162.
+[eva] Recording results for main7_signed_upcast
+[eva] Done for function main7_signed_upcast
+[eva] computing for function main8_bitfields <- main.
+  Called from tests/value/downcast.i:163.
+[eva] Recording results for main8_bitfields
+[eva] Done for function main8_bitfields
+[eva] computing for function main9_bitfield <- main.
+  Called from tests/value/downcast.i:164.
+[eva] tests/value/downcast.i:138: assertion got status valid.
+[eva] Recording results for main9_bitfield
+[eva] Done for function main9_bitfield
+[eva] computing for function main10_loop <- main.
+  Called from tests/value/downcast.i:165.
+[eva] tests/value/downcast.i:149: starting to merge loop iterations
+[eva] Recording results for main10_loop
+[eva] Done for function main10_loop
+[eva] Recording results for main
+[eva] done for function main
+[eva] ====== VALUES COMPUTED ======
+[eva:final-states] Values at end of function main1:
+  sz ∈ [--..--]
+  uc ∈ [--..--]
+  x ∈ [--..--]
+  ux ∈ [--..--]
+  s ∈ [--..--]
+[eva:final-states] Values at end of function main10_loop:
+  c ∈ [--..--] or UNINITIALIZED
+  bf.b ∈ [--..--] or UNINITIALIZED
+    .[bits 10 to 31] ∈ UNINITIALIZED
+  k ∈ {10}
+[eva:final-states] Values at end of function main2_bitfield:
+  i ∈ {117}
+  j ∈ {254}
+  ss.i ∈ {-11} or UNINITIALIZED
+    .j ∈ {30} or UNINITIALIZED
+    .[bits 10 to 31] ∈ UNINITIALIZED
+[eva:final-states] Values at end of function main3_reduction:
+  x_0 ∈ [--..--]
+  c ∈ [--..--]
+  y ∈ [--..--]
+  d ∈ [--..--]
+[eva:final-states] Values at end of function main4_pointer:
+  p ∈ {{ &x_0 + {100} }}
+  q ∈ {{ &x_0 + {100} }}
+  r ∈ {{ &x_0 + {100} }}
+[eva:final-states] Values at end of function main5_wrap_signed:
+  x_0 ∈ [100000..2147483647]
+  y ∈ [100145..2147483792]
+  z ∈ [--..--]
+[eva:final-states] Values at end of function main6_val_warn_converted_signed:
+  
+[eva:final-states] Values at end of function main7_signed_upcast:
+  c ∈ {240}
+  i ∈ {240}
+[eva:final-states] Values at end of function main8_bitfields:
+  S.i1 ∈ {65}
+   .i2 ∈ {-1; 1} or UNINITIALIZED
+   .[bits 24 to 31] ∈ UNINITIALIZED
+  c ∈ {-1; 1; 65} or UNINITIALIZED
+[eva:final-states] Values at end of function main9_bitfield:
+  bf.a ∈ {1648}
+    .[bits 11 to 31] ∈ UNINITIALIZED
+  c ∈ {112} or UNINITIALIZED
+[eva:final-states] Values at end of function main:
+  sz ∈ [--..--]
+  uc ∈ [--..--]
+  x ∈ [--..--]
+  ux ∈ [--..--]
+  s ∈ [--..--]
+[from] Computing for function main1
+[from] Done for function main1
+[from] Computing for function main10_loop
+[from] Done for function main10_loop
+[from] Computing for function main2_bitfield
+[from] Done for function main2_bitfield
+[from] Computing for function main3_reduction
+[from] Done for function main3_reduction
+[from] Computing for function main4_pointer
+[from] Done for function main4_pointer
+[from] Computing for function main5_wrap_signed
+[from] Done for function main5_wrap_signed
+[from] Computing for function main6_val_warn_converted_signed
+[from] Done for function main6_val_warn_converted_signed
+[from] Computing for function main7_signed_upcast
+[from] Done for function main7_signed_upcast
+[from] Computing for function main8_bitfields
+[from] Done for function main8_bitfields
+[from] Computing for function main9_bitfield
+[from] Done for function main9_bitfield
+[from] Computing for function main
+[from] Done for function main
+[from] ====== DEPENDENCIES COMPUTED ======
+  These dependencies hold at termination for the executions that terminate:
+[from] Function main1:
+  sz FROM sx; sy
+  uc FROM x
+  x FROM uy; uz
+  ux FROM uy; uz
+  s FROM uy; uz
+[from] Function main10_loop:
+  NO EFFECTS
+[from] Function main2_bitfield:
+  NO EFFECTS
+[from] Function main3_reduction:
+  NO EFFECTS
+[from] Function main4_pointer:
+  NO EFFECTS
+[from] Function main5_wrap_signed:
+  NO EFFECTS
+[from] Function main6_val_warn_converted_signed:
+  NO EFFECTS
+[from] Function main7_signed_upcast:
+  NO EFFECTS
+[from] Function main8_bitfields:
+  NO EFFECTS
+[from] Function main9_bitfield:
+  NO EFFECTS
+[from] Function main:
+  sz FROM sx; sy
+  uc FROM x
+  x FROM uy; uz
+  ux FROM uy; uz
+  s FROM uy; uz
+[from] ====== END OF DEPENDENCIES ======
+[inout] Out (internal) for function main1:
+    sz; uc; x; ux; s
+[inout] Inputs for function main1:
+    sx; sy; x; uy; uz
+[inout] Out (internal) for function main10_loop:
+    c; bf.b; k
+[inout] Inputs for function main10_loop:
+    v
+[inout] Out (internal) for function main2_bitfield:
+    i; j; ss{.i; .j}
+[inout] Inputs for function main2_bitfield:
+    v
+[inout] Out (internal) for function main3_reduction:
+    x_0; c; y; d
+[inout] Inputs for function main3_reduction:
+    v
+[inout] Out (internal) for function main4_pointer:
+    p; q; r
+[inout] Inputs for function main4_pointer:
+    \nothing
+[inout] Out (internal) for function main5_wrap_signed:
+    x_0; y; z
+[inout] Inputs for function main5_wrap_signed:
+    v
+[inout] Out (internal) for function main6_val_warn_converted_signed:
+    s_0; u; e; b; e_0; b_0; e_1; b_1; p; x_0; y; z
+[inout] Inputs for function main6_val_warn_converted_signed:
+    v
+[inout] Out (internal) for function main7_signed_upcast:
+    c; i
+[inout] Inputs for function main7_signed_upcast:
+    \nothing
+[inout] Out (internal) for function main8_bitfields:
+    S{.i1; .i2}; c
+[inout] Inputs for function main8_bitfields:
+    v
+[inout] Out (internal) for function main9_bitfield:
+    bf.a; signed_a; c
+[inout] Inputs for function main9_bitfield:
+    v
+[inout] Out (internal) for function main:
+    sz; uc; x; ux; s
+[inout] Inputs for function main:
+    sx; sy; x; uy; uz; v
diff --git a/tests/value/oracle/downcast.res.oracle b/tests/value/oracle/downcast.res.oracle
deleted file mode 100644
index 18b563a5f18a5c227a7f0f3e1f69a537e4b39aad..0000000000000000000000000000000000000000
--- a/tests/value/oracle/downcast.res.oracle
+++ /dev/null
@@ -1,1812 +0,0 @@
-[kernel] Parsing tests/value/downcast.i (no preprocessing)
-[eva] Analyzing an incomplete application starting at main
-[eva] Computing initial state
-[eva] Initial state computed
-[eva:initial-state] Values of globals at initialization
-  sx ∈ [--..--]
-  sy ∈ [--..--]
-  sz ∈ [--..--]
-  uc ∈ [--..--]
-  x ∈ [--..--]
-  ux ∈ [--..--]
-  uy ∈ [--..--]
-  uz ∈ [--..--]
-  s ∈ [--..--]
-  v ∈ [--..--]
-[eva] computing for function main1 <- main.
-  Called from tests/value/downcast.i:152.
-[eva:alarm] tests/value/downcast.i:19: Warning: 
-  signed downcast. assert -128 ≤ (int)((int)sx + (int)sy);
-[eva:alarm] tests/value/downcast.i:19: Warning: 
-  signed downcast. assert (int)((int)sx + (int)sy) ≤ 127;
-[eva:alarm] tests/value/downcast.i:22: Warning: 
-  signed downcast. assert (unsigned int)(uy + uz) ≤ 2147483647;
-[eva] Recording results for main1
-[eva] Done for function main1
-[eva] computing for function main2_bitfield <- main.
-  Called from tests/value/downcast.i:153.
-[eva:alarm] tests/value/downcast.i:32: Warning: 
-  signed downcast. assert i ≤ 15;
-[eva] Recording results for main2_bitfield
-[eva] Done for function main2_bitfield
-[eva] computing for function main3_reduction <- main.
-  Called from tests/value/downcast.i:154.
-[eva:alarm] tests/value/downcast.i:38: Warning: 
-  signed downcast. assert -128 ≤ x_0;
-[eva:alarm] tests/value/downcast.i:38: Warning: 
-  signed downcast. assert x_0 ≤ 127;
-[eva] Recording results for main3_reduction
-[eva] Done for function main3_reduction
-[eva] computing for function main4_pointer <- main.
-  Called from tests/value/downcast.i:155.
-[eva:alarm] tests/value/downcast.i:50: Warning: 
-  signed overflow. assert -9223372036854775808 ≤ p + (long long)100;
-[eva:alarm] tests/value/downcast.i:50: Warning: 
-  signed overflow. assert p + (long long)100 ≤ 9223372036854775807;
-[eva:alarm] tests/value/downcast.i:52: Warning: 
-  signed downcast. assert -2147483648 ≤ p;
-[eva:alarm] tests/value/downcast.i:52: Warning: 
-  signed downcast. assert p ≤ 2147483647;
-[eva] Recording results for main4_pointer
-[eva] Done for function main4_pointer
-[eva] computing for function main5_wrap_signed <- main.
-  Called from tests/value/downcast.i:156.
-[eva:alarm] tests/value/downcast.i:58: Warning: 
-  assertion 'ASSUME' got status unknown.
-[eva] tests/value/downcast.i:59: assertion got status valid.
-[eva:alarm] tests/value/downcast.i:62: Warning: 
-  signed downcast. assert y ≤ 2147483647;
-[eva] tests/value/downcast.i:63: 
-  Frama_C_show_each:
-  [100000..2147483647], [100145..2147483647], [100145..2147483647]
-[eva] tests/value/downcast.i:64: assertion got status valid.
-[eva] Recording results for main5_wrap_signed
-[eva] Done for function main5_wrap_signed
-[eva] computing for function main6_val_warn_converted_signed <- main.
-  Called from tests/value/downcast.i:157.
-[eva:alarm] tests/value/downcast.i:71: Warning: 
-  signed downcast. assert 65300u ≤ 32767;
-[eva:alarm] tests/value/downcast.i:82: Warning: 
-  signed downcast. assert e_0 ≤ 32767;
-[eva:alarm] tests/value/downcast.i:87: Warning: 
-  signed downcast. assert e_1 ≤ 32767;
-[eva:alarm] tests/value/downcast.i:91: Warning: 
-  signed downcast. assert p ≤ 2147483647;
-[eva:alarm] tests/value/downcast.i:92: Warning: 
-  signed downcast. assert p ≤ 32767;
-[eva] tests/value/downcast.i:93: 
-  Assigning imprecise value to z.
-  The imprecision originates from Arithmetic {tests/value/downcast.i:93}
-[eva] Recording results for main6_val_warn_converted_signed
-[eva] Done for function main6_val_warn_converted_signed
-[eva] computing for function main7_signed_upcast <- main.
-  Called from tests/value/downcast.i:158.
-[eva] Recording results for main7_signed_upcast
-[eva] Done for function main7_signed_upcast
-[eva] computing for function main8_bitfields <- main.
-  Called from tests/value/downcast.i:159.
-[eva:alarm] tests/value/downcast.i:114: Warning: 
-  signed downcast. assert S.i1 ≤ 31;
-[eva:alarm] tests/value/downcast.i:115: Warning: 
-  signed downcast. assert S.i1 ≤ 127;
-[eva:alarm] tests/value/downcast.i:119: Warning: 
-  signed downcast. assert S.i1 ≤ 31;
-[eva:alarm] tests/value/downcast.i:120: Warning: 
-  signed downcast. assert S.i1 ≤ 127;
-[eva:alarm] tests/value/downcast.i:124: Warning: 
-  signed downcast. assert S.i1 ≤ 31;
-[eva] Recording results for main8_bitfields
-[eva] Done for function main8_bitfields
-[eva] computing for function main9_bitfield <- main.
-  Called from tests/value/downcast.i:160.
-[eva:alarm] tests/value/downcast.i:133: Warning: 
-  signed downcast. assert bf.a ≤ 1023;
-[eva:alarm] tests/value/downcast.i:137: Warning: 
-  signed downcast. assert bf.a ≤ 127;
-[eva] Recording results for main9_bitfield
-[eva] Done for function main9_bitfield
-[eva] computing for function main10_loop <- main.
-  Called from tests/value/downcast.i:161.
-[eva:alarm] tests/value/downcast.i:147: Warning: 
-  signed downcast. assert bf.b ≤ 127;
-[eva] tests/value/downcast.i:145: starting to merge loop iterations
-[eva] Recording results for main10_loop
-[eva] Done for function main10_loop
-[eva] Recording results for main
-[eva] done for function main
-[eva] tests/value/downcast.i:32: 
-  assertion 'Eva,signed_downcast' got final status invalid.
-[eva] tests/value/downcast.i:71: 
-  assertion 'Eva,signed_downcast' got final status invalid.
-[eva] tests/value/downcast.i:82: 
-  assertion 'Eva,signed_downcast' got final status invalid.
-[eva] tests/value/downcast.i:87: 
-  assertion 'Eva,signed_downcast' got final status invalid.
-[eva] tests/value/downcast.i:114: 
-  assertion 'Eva,signed_downcast' got final status invalid.
-[eva] tests/value/downcast.i:115: 
-  assertion 'Eva,signed_downcast' got final status invalid.
-[eva] tests/value/downcast.i:119: 
-  assertion 'Eva,signed_downcast' got final status invalid.
-[eva] tests/value/downcast.i:120: 
-  assertion 'Eva,signed_downcast' got final status invalid.
-[eva] tests/value/downcast.i:124: 
-  assertion 'Eva,signed_downcast' got final status invalid.
-[eva] tests/value/downcast.i:133: 
-  assertion 'Eva,signed_downcast' got final status invalid.
-[eva] tests/value/downcast.i:137: 
-  assertion 'Eva,signed_downcast' got final status invalid.
-[eva] ====== VALUES COMPUTED ======
-[eva:final-states] Values at end of function main1:
-  sz ∈ [--..--]
-  uc ∈ [--..--]
-  x ∈ [0..2147483647]
-  ux ∈ [--..--]
-  s ∈ [--..--]
-[eva:final-states] Values at end of function main10_loop:
-  c ∈ [0..127] or UNINITIALIZED
-  bf.b ∈ [--..--] or UNINITIALIZED
-    .[bits 10 to 31] ∈ UNINITIALIZED
-  k ∈ {10}
-[eva:final-states] Values at end of function main2_bitfield:
-  i ∈ {117}
-  j ∈ {254}
-  ss.i ∈ UNINITIALIZED
-    .j ∈ {30} or UNINITIALIZED
-    .[bits 10 to 31] ∈ UNINITIALIZED
-[eva:final-states] Values at end of function main3_reduction:
-  x_0 ∈ [-128..127]
-  c ∈ [--..--]
-  y ∈ [--..--]
-  d ∈ [--..--]
-[eva:final-states] Values at end of function main4_pointer:
-  p ∈ {{ &x_0 + {100} }}
-  q ∈ {{ &x_0 + {100} }}
-  r ∈ {{ &x_0 + {100} }}
-[eva:final-states] Values at end of function main5_wrap_signed:
-  x_0 ∈ [100000..2147483647]
-  y ∈ [100145..2147483647]
-  z ∈ [100145..2147483647]
-[eva:final-states] Values at end of function main6_val_warn_converted_signed:
-  
-[eva:final-states] Values at end of function main7_signed_upcast:
-  c ∈ {240}
-  i ∈ {240}
-[eva:final-states] Values at end of function main8_bitfields:
-  S.i1 ∈ {65}
-   {.i2; .[bits 24 to 31]} ∈ UNINITIALIZED
-  c ∈ {65} or UNINITIALIZED
-[eva:final-states] Values at end of function main9_bitfield:
-  bf.a ∈ {1648}
-    .[bits 11 to 31] ∈ UNINITIALIZED
-  c ∈ UNINITIALIZED
-[eva:final-states] Values at end of function main:
-  sz ∈ [--..--]
-  uc ∈ [--..--]
-  x ∈ [0..2147483647]
-  ux ∈ [--..--]
-  s ∈ [--..--]
-[from] Computing for function main1
-[from] Done for function main1
-[from] Computing for function main10_loop
-[from] Done for function main10_loop
-[from] Computing for function main2_bitfield
-[from] Done for function main2_bitfield
-[from] Computing for function main3_reduction
-[from] Done for function main3_reduction
-[from] Computing for function main4_pointer
-[from] Done for function main4_pointer
-[from] Computing for function main5_wrap_signed
-[from] Done for function main5_wrap_signed
-[from] Computing for function main6_val_warn_converted_signed
-[from] Done for function main6_val_warn_converted_signed
-[from] Computing for function main7_signed_upcast
-[from] Done for function main7_signed_upcast
-[from] Computing for function main8_bitfields
-[from] Done for function main8_bitfields
-[from] Computing for function main9_bitfield
-[from] Done for function main9_bitfield
-[from] Computing for function main
-[from] Done for function main
-[from] ====== DEPENDENCIES COMPUTED ======
-  These dependencies hold at termination for the executions that terminate:
-[from] Function main1:
-  sz FROM sx; sy
-  uc FROM x
-  x FROM uy; uz
-  ux FROM uy; uz
-  s FROM uy; uz
-[from] Function main10_loop:
-  NO EFFECTS
-[from] Function main2_bitfield:
-  NO EFFECTS
-[from] Function main3_reduction:
-  NO EFFECTS
-[from] Function main4_pointer:
-  NO EFFECTS
-[from] Function main5_wrap_signed:
-  NO EFFECTS
-[from] Function main6_val_warn_converted_signed:
-  NO EFFECTS
-[from] Function main7_signed_upcast:
-  NO EFFECTS
-[from] Function main8_bitfields:
-  NO EFFECTS
-[from] Function main9_bitfield:
-  NO EFFECTS
-[from] Function main:
-  sz FROM sx; sy
-  uc FROM x
-  x FROM uy; uz
-  ux FROM uy; uz
-  s FROM uy; uz
-[from] ====== END OF DEPENDENCIES ======
-[inout] Out (internal) for function main1:
-    sz; uc; x; ux; s
-[inout] Inputs for function main1:
-    sx; sy; x; uy; uz
-[inout] Out (internal) for function main10_loop:
-    c; bf.b; k
-[inout] Inputs for function main10_loop:
-    v
-[inout] Out (internal) for function main2_bitfield:
-    i; j; ss{.i; .j}
-[inout] Inputs for function main2_bitfield:
-    v
-[inout] Out (internal) for function main3_reduction:
-    x_0; c; y; d
-[inout] Inputs for function main3_reduction:
-    v
-[inout] Out (internal) for function main4_pointer:
-    p; q; r
-[inout] Inputs for function main4_pointer:
-    \nothing
-[inout] Out (internal) for function main5_wrap_signed:
-    x_0; y; z
-[inout] Inputs for function main5_wrap_signed:
-    v
-[inout] Out (internal) for function main6_val_warn_converted_signed:
-    s_0; u; e; b; e_0; b_0; e_1; b_1; p; x_0; y; z
-[inout] Inputs for function main6_val_warn_converted_signed:
-    v
-[inout] Out (internal) for function main7_signed_upcast:
-    c; i
-[inout] Inputs for function main7_signed_upcast:
-    \nothing
-[inout] Out (internal) for function main8_bitfields:
-    S{.i1; .i2}; c
-[inout] Inputs for function main8_bitfields:
-    v
-[inout] Out (internal) for function main9_bitfield:
-    bf.a; signed_a; c
-[inout] Inputs for function main9_bitfield:
-    v
-[inout] Out (internal) for function main:
-    sz; uc; x; ux; s
-[inout] Inputs for function main:
-    sx; sy; x; uy; uz; v
-[report] Computing properties status...
-
---------------------------------------------------------------------------------
---- Properties of Function 'main1'
---------------------------------------------------------------------------------
-
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 19)
-            tried with Eva.
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 19)
-            tried with Eva.
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 22)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main2_bitfield'
---------------------------------------------------------------------------------
-
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 32)
-            By Eva, with pending:
-             - Unreachable instruction (file tests/value/downcast.i, line 32)
-
---------------------------------------------------------------------------------
---- Properties of Function 'main3_reduction'
---------------------------------------------------------------------------------
-
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 38)
-            tried with Eva.
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 38)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main4_pointer'
---------------------------------------------------------------------------------
-
-[    -    ] Assertion 'Eva,signed_overflow' (file tests/value/downcast.i, line 50)
-            tried with Eva.
-[    -    ] Assertion 'Eva,signed_overflow' (file tests/value/downcast.i, line 50)
-            tried with Eva.
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 52)
-            tried with Eva.
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 52)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main5_wrap_signed'
---------------------------------------------------------------------------------
-
-[    -    ] Assertion 'ASSUME' (file tests/value/downcast.i, line 58)
-            tried with Eva.
-[  Valid  ] Assertion (file tests/value/downcast.i, line 59)
-            by Eva.
-[  Valid  ] Assertion (file tests/value/downcast.i, line 64)
-            by Eva.
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 62)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main6_val_warn_converted_signed'
---------------------------------------------------------------------------------
-
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 71)
-            By Eva, with pending:
-             - Unreachable initialization of 's_0' (file tests/value/downcast.i, line 71)
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 82)
-            By Eva, with pending:
-             - Unreachable initialization of 'b_0' (file tests/value/downcast.i, line 82)
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 87)
-            By Eva, with pending:
-             - Unreachable initialization of 'b_1' (file tests/value/downcast.i, line 87)
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 91)
-            tried with Eva.
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 92)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main8_bitfields'
---------------------------------------------------------------------------------
-
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 114)
-            By Eva, with pending:
-             - Unreachable instruction (file tests/value/downcast.i, line 114)
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 115)
-            By Eva, with pending:
-             - Unreachable instruction (file tests/value/downcast.i, line 115)
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 119)
-            By Eva, with pending:
-             - Unreachable instruction (file tests/value/downcast.i, line 119)
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 120)
-            By Eva, with pending:
-             - Unreachable instruction (file tests/value/downcast.i, line 120)
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 124)
-            By Eva, with pending:
-             - Unreachable instruction (file tests/value/downcast.i, line 124)
-
---------------------------------------------------------------------------------
---- Properties of Function 'main9_bitfield'
---------------------------------------------------------------------------------
-
-[  Dead   ] Assertion (file tests/value/downcast.i, line 134)
-            Locally valid, but unreachable.
-            By Eva because:
-             - Unreachable program point (file tests/value/downcast.i, line 134)
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 133)
-            By Eva, with pending:
-             - Unreachable initialization of 'signed_a' (file tests/value/downcast.i, line 133)
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 137)
-            By Eva, with pending:
-             - Unreachable instruction (file tests/value/downcast.i, line 137)
-[Unreachable] Unreachable program point (file tests/value/downcast.i, line 134)
-            by Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main10_loop'
---------------------------------------------------------------------------------
-
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 147)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Status Report Summary
---------------------------------------------------------------------------------
-     2 Completely validated
-    14 To be validated
-    11 Alarms emitted
-     1 Dead property
-     1 Unreachable
-    29 Total
---------------------------------------------------------------------------------
-/* Generated by Frama-C */
-struct s {
-   int i : 5 ;
-   unsigned int j : 5 ;
-};
-struct bitf {
-   unsigned int i1 : 18 ;
-   int i2 : 6 ;
-};
-struct __anonstruct_bf_1 {
-   unsigned int a : 11 ;
-};
-struct __anonstruct_bf_2 {
-   unsigned int b : 10 ;
-};
-signed char sx;
-signed char sy;
-signed char sz;
-unsigned char uc;
-int x;
-unsigned int ux;
-unsigned int uy;
-unsigned int uz;
-unsigned short s;
-int volatile v;
-void main1(void)
-{
-  /*@ assert Eva: signed_downcast: -128 ≤ (int)((int)sx + (int)sy); */
-  /*@ assert Eva: signed_downcast: (int)((int)sx + (int)sy) ≤ 127; */
-  sz = (signed char)((int)sx + (int)sy);
-  uc = (unsigned char)((int)sx + (int)sy);
-  uc = (unsigned char)x;
-  /*@ assert Eva: signed_downcast: (unsigned int)(uy + uz) ≤ 2147483647; */
-  x = (int)(uy + uz);
-  ux = uy + uz;
-  s = (unsigned short)(uy + uz);
-  return;
-}
-
-void main2_bitfield(void)
-{
-  struct s ss;
-  int i = 117;
-  unsigned int j = (unsigned int)254;
-  if (v) 
-    /*@ assert Eva: signed_downcast: i ≤ 15; */
-    ss.i = (int)i;
-  if (v) ss.j = (unsigned int)j;
-  return;
-}
-
-void main3_reduction(void)
-{
-  int x_0 = v;
-  /*@ assert Eva: signed_downcast: -128 ≤ x_0; */
-  /*@ assert Eva: signed_downcast: x_0 ≤ 127; */
-  char c = (char)x_0;
-  unsigned int y = (unsigned int)v;
-  unsigned char d = (unsigned char)y;
-  return;
-}
-
-void main4_pointer(void)
-{
-  int x_0;
-  long long p = (long long)(& x_0);
-  /*@ assert
-      Eva: signed_overflow: -9223372036854775808 ≤ p + (long long)100;
-  */
-  /*@ assert
-      Eva: signed_overflow: p + (long long)100 ≤ 9223372036854775807;
-  */
-  p += (long long)100;
-  unsigned int q = (unsigned int)p;
-  /*@ assert Eva: signed_downcast: -2147483648 ≤ p; */
-  /*@ assert Eva: signed_downcast: p ≤ 2147483647; */
-  int r = (int)p;
-  return;
-}
-
-/*@ assigns \result;
-    assigns \result \from \nothing; */
-extern int ( /* missing proto */ Frama_C_show_each)();
-
-void main5_wrap_signed(void)
-{
-  int x_0 = v;
-  /*@ assert ASSUME: x_0 ≥ 100000; */ ;
-  /*@ assert x_0 > 0x7FFFFFFF - 145 ∨ x_0 ≤ 0x7FFFFFFF - 145; */ ;
-  unsigned int y = (unsigned int)x_0;
-  y += (unsigned int)145;
-  /*@ assert Eva: signed_downcast: y ≤ 2147483647; */
-  int z = (int)y;
-  Frama_C_show_each(x_0,y,z);
-  /*@ assert z ≥ 100000 + 145 ∨ z ≤ (int)(0x7FFFFFFF + 145); */ ;
-  return;
-}
-
-void main6_val_warn_converted_signed(void)
-{
-  if (v) {
-    /*@ assert Eva: signed_downcast: 65300u ≤ 32767; */
-    short s_0 = (short)65300u;
-  }
-  if (v) {
-    unsigned short u = (unsigned short)65300u;
-  }
-  if (v) {
-    unsigned long e = (unsigned long)17;
-    short b = (short)e;
-  }
-  if (v) {
-    unsigned long e_0 = (unsigned long)(-12);
-    /*@ assert Eva: signed_downcast: e_0 ≤ 32767; */
-    short b_0 = (short)e_0;
-  }
-  if (v) {
-    unsigned int e_1 = (unsigned int)(-64000);
-    /*@ assert Eva: signed_downcast: e_1 ≤ 32767; */
-    short b_1 = (short)e_1;
-  }
-  if (v) {
-    int *p = (int *)(& v);
-    /*@ assert Eva: signed_downcast: p ≤ 2147483647; */
-    int x_0 = (int)p;
-    /*@ assert Eva: signed_downcast: p ≤ 32767; */
-    short y = (short)p;
-    unsigned short z = (unsigned short)p;
-  }
-  return;
-}
-
-void main7_signed_upcast(void)
-{
-  unsigned char c = (unsigned char)240;
-  int i = (int)c;
-  return;
-}
-
-void main8_bitfields(void)
-{
-  struct bitf S;
-  signed char c;
-  S.i1 = (unsigned int)0x3FFFF;
-  if (v) 
-    /*@ assert Eva: signed_downcast: S.i1 ≤ 31; */
-    S.i2 = (int)S.i1;
-  if (v) 
-    /*@ assert Eva: signed_downcast: S.i1 ≤ 127; */
-    c = (signed char)S.i1;
-  S.i1 = (unsigned int)257u;
-  if (v) 
-    /*@ assert Eva: signed_downcast: S.i1 ≤ 31; */
-    S.i2 = (int)S.i1;
-  if (v) 
-    /*@ assert Eva: signed_downcast: S.i1 ≤ 127; */
-    c = (signed char)S.i1;
-  S.i1 = (unsigned int)65u;
-  if (v) 
-    /*@ assert Eva: signed_downcast: S.i1 ≤ 31; */
-    S.i2 = (int)S.i1;
-  if (v) c = (signed char)S.i1;
-  return;
-}
-
-void main9_bitfield(void)
-{
-  struct __anonstruct_bf_1 bf;
-  signed char c;
-  bf.a = (unsigned int)1648;
-  if (v) {
-    /*@ assert Eva: signed_downcast: bf.a ≤ 1023; */
-    int signed_a = (int)((int)bf.a);
-    /*@ assert signed_a ≡ -400; */ ;
-  }
-  if (v) 
-    /*@ assert Eva: signed_downcast: bf.a ≤ 127; */
-    c = (signed char)bf.a;
-  return;
-}
-
-void main10_loop(void)
-{
-  signed char c;
-  struct __anonstruct_bf_2 bf;
-  int k = 0;
-  while (k < 10) {
-    bf.b = (unsigned int)v;
-    if (v) 
-      /*@ assert Eva: signed_downcast: bf.b ≤ 127; */
-      c = (signed char)bf.b;
-    k ++;
-  }
-  return;
-}
-
-void main(void)
-{
-  main1();
-  main2_bitfield();
-  main3_reduction();
-  main4_pointer();
-  main5_wrap_signed();
-  main6_val_warn_converted_signed();
-  main7_signed_upcast();
-  main8_bitfields();
-  main9_bitfield();
-  main10_loop();
-  return;
-}
-
-
-[eva] Analyzing an incomplete application starting at main
-[eva] Computing initial state
-[eva] Initial state computed
-[eva:initial-state] Values of globals at initialization
-  sx ∈ [--..--]
-  sy ∈ [--..--]
-  sz ∈ [--..--]
-  uc ∈ [--..--]
-  x ∈ [--..--]
-  ux ∈ [--..--]
-  uy ∈ [--..--]
-  uz ∈ [--..--]
-  s ∈ [--..--]
-  v ∈ [--..--]
-[eva] computing for function main1 <- main.
-  Called from tests/value/downcast.i:152.
-[eva:alarm] tests/value/downcast.i:20: Warning: 
-  unsigned downcast. assert 0 ≤ (int)((int)sx + (int)sy);
-[eva:alarm] tests/value/downcast.i:21: Warning: 
-  unsigned downcast. assert 0 ≤ x;
-[eva:alarm] tests/value/downcast.i:21: Warning: 
-  unsigned downcast. assert x ≤ 255;
-[eva:alarm] tests/value/downcast.i:24: Warning: 
-  unsigned downcast. assert (unsigned int)(uy + uz) ≤ 65535;
-[eva] Recording results for main1
-[eva] Done for function main1
-[eva] computing for function main2_bitfield <- main.
-  Called from tests/value/downcast.i:153.
-[eva:alarm] tests/value/downcast.i:33: Warning: 
-  unsigned downcast. assert j ≤ 31;
-[eva] Recording results for main2_bitfield
-[eva] Done for function main2_bitfield
-[eva] computing for function main3_reduction <- main.
-  Called from tests/value/downcast.i:154.
-[eva:alarm] tests/value/downcast.i:40: Warning: 
-  unsigned downcast. assert 0 ≤ v;
-[eva:alarm] tests/value/downcast.i:41: Warning: 
-  unsigned downcast. assert y ≤ 255;
-[eva] Recording results for main3_reduction
-[eva] Done for function main3_reduction
-[eva] computing for function main4_pointer <- main.
-  Called from tests/value/downcast.i:155.
-[eva:alarm] tests/value/downcast.i:50: Warning: 
-  signed overflow. assert -9223372036854775808 ≤ p + (long long)100;
-[eva:alarm] tests/value/downcast.i:50: Warning: 
-  signed overflow. assert p + (long long)100 ≤ 9223372036854775807;
-[eva:alarm] tests/value/downcast.i:51: Warning: 
-  unsigned downcast. assert 0 ≤ p;
-[eva:alarm] tests/value/downcast.i:51: Warning: 
-  unsigned downcast. assert p ≤ 4294967295;
-[eva] Recording results for main4_pointer
-[eva] Done for function main4_pointer
-[eva] computing for function main5_wrap_signed <- main.
-  Called from tests/value/downcast.i:156.
-[eva] tests/value/downcast.i:63: 
-  Frama_C_show_each:
-  [100000..2147483647], [100145..2147483792], [-2147483648..2147483647]
-[eva:alarm] tests/value/downcast.i:64: Warning: assertion got status unknown.
-[eva] Recording results for main5_wrap_signed
-[eva] Done for function main5_wrap_signed
-[eva] computing for function main6_val_warn_converted_signed <- main.
-  Called from tests/value/downcast.i:157.
-[eva:alarm] tests/value/downcast.i:81: Warning: 
-  unsigned downcast. assert 0 ≤ (int)(-12);
-[eva:alarm] tests/value/downcast.i:86: Warning: 
-  unsigned downcast. assert 0 ≤ (int)(-64000);
-[eva] tests/value/downcast.i:92: 
-  Assigning imprecise value to y.
-  The imprecision originates from Arithmetic {tests/value/downcast.i:92}
-[eva:alarm] tests/value/downcast.i:93: Warning: 
-  unsigned downcast. assert p ≤ 65535;
-[eva] Recording results for main6_val_warn_converted_signed
-[eva] Done for function main6_val_warn_converted_signed
-[eva] computing for function main7_signed_upcast <- main.
-  Called from tests/value/downcast.i:158.
-[eva] Recording results for main7_signed_upcast
-[eva] Done for function main7_signed_upcast
-[eva] computing for function main8_bitfields <- main.
-  Called from tests/value/downcast.i:159.
-[eva] Recording results for main8_bitfields
-[eva] Done for function main8_bitfields
-[eva] computing for function main9_bitfield <- main.
-  Called from tests/value/downcast.i:160.
-[eva] tests/value/downcast.i:134: assertion got status valid.
-[eva] Recording results for main9_bitfield
-[eva] Done for function main9_bitfield
-[eva] computing for function main10_loop <- main.
-  Called from tests/value/downcast.i:161.
-[eva:alarm] tests/value/downcast.i:146: Warning: 
-  unsigned downcast. assert 0 ≤ v;
-[eva:alarm] tests/value/downcast.i:146: Warning: 
-  unsigned downcast. assert v ≤ 1023;
-[eva] Recording results for main10_loop
-[eva] Done for function main10_loop
-[eva] Recording results for main
-[eva] done for function main
-[eva] tests/value/downcast.i:33: 
-  assertion 'Eva,unsigned_downcast' got final status invalid.
-[eva] tests/value/downcast.i:81: 
-  assertion 'Eva,unsigned_downcast' got final status invalid.
-[eva] tests/value/downcast.i:86: 
-  assertion 'Eva,unsigned_downcast' got final status invalid.
-[eva] ====== VALUES COMPUTED ======
-[eva:final-states] Values at end of function main1:
-  sz ∈ [--..--]
-  uc ∈ [--..--]
-  x ∈ [--..--]
-  ux ∈ [--..--]
-  s ∈ [--..--]
-[eva:final-states] Values at end of function main10_loop:
-  c ∈ [--..--] or UNINITIALIZED
-  bf.b ∈ [--..--] or UNINITIALIZED
-    .[bits 10 to 31] ∈ UNINITIALIZED
-  k ∈ {10}
-[eva:final-states] Values at end of function main2_bitfield:
-  i ∈ {117}
-  j ∈ {254}
-  ss.i ∈ {-11} or UNINITIALIZED
-    {.j; .[bits 10 to 31]} ∈ UNINITIALIZED
-[eva:final-states] Values at end of function main3_reduction:
-  x_0 ∈ [--..--]
-  c ∈ [--..--]
-  y ∈ [0..255]
-  d ∈ [--..--]
-[eva:final-states] Values at end of function main4_pointer:
-  p ∈ {{ &x_0 + {100} }}
-  q ∈ {{ &x_0 + {100} }}
-  r ∈ {{ &x_0 + {100} }}
-[eva:final-states] Values at end of function main5_wrap_signed:
-  x_0 ∈ [100000..2147483647]
-  y ∈ [100145..2147483792]
-  z ∈ [--..--]
-[eva:final-states] Values at end of function main6_val_warn_converted_signed:
-  
-[eva:final-states] Values at end of function main7_signed_upcast:
-  c ∈ {240}
-  i ∈ {240}
-[eva:final-states] Values at end of function main8_bitfields:
-  S.i1 ∈ {65}
-   .i2 ∈ {-1; 1} or UNINITIALIZED
-   .[bits 24 to 31] ∈ UNINITIALIZED
-  c ∈ {-1; 1; 65} or UNINITIALIZED
-[eva:final-states] Values at end of function main9_bitfield:
-  bf.a ∈ {1648}
-    .[bits 11 to 31] ∈ UNINITIALIZED
-  c ∈ {112} or UNINITIALIZED
-[eva:final-states] Values at end of function main:
-  sz ∈ [--..--]
-  uc ∈ [--..--]
-  x ∈ [--..--]
-  ux ∈ [--..--]
-  s ∈ [--..--]
-[from] Computing for function main1
-[from] Done for function main1
-[from] Computing for function main10_loop
-[from] Done for function main10_loop
-[from] Computing for function main2_bitfield
-[from] Done for function main2_bitfield
-[from] Computing for function main3_reduction
-[from] Done for function main3_reduction
-[from] Computing for function main4_pointer
-[from] Done for function main4_pointer
-[from] Computing for function main5_wrap_signed
-[from] Done for function main5_wrap_signed
-[from] Computing for function main6_val_warn_converted_signed
-[from] Done for function main6_val_warn_converted_signed
-[from] Computing for function main7_signed_upcast
-[from] Done for function main7_signed_upcast
-[from] Computing for function main8_bitfields
-[from] Done for function main8_bitfields
-[from] Computing for function main9_bitfield
-[from] Done for function main9_bitfield
-[from] Computing for function main
-[from] Done for function main
-[from] ====== DEPENDENCIES COMPUTED ======
-  These dependencies hold at termination for the executions that terminate:
-[from] Function main1:
-  sz FROM sx; sy
-  uc FROM x
-  x FROM uy; uz
-  ux FROM uy; uz
-  s FROM uy; uz
-[from] Function main10_loop:
-  NO EFFECTS
-[from] Function main2_bitfield:
-  NO EFFECTS
-[from] Function main3_reduction:
-  NO EFFECTS
-[from] Function main4_pointer:
-  NO EFFECTS
-[from] Function main5_wrap_signed:
-  NO EFFECTS
-[from] Function main6_val_warn_converted_signed:
-  NO EFFECTS
-[from] Function main7_signed_upcast:
-  NO EFFECTS
-[from] Function main8_bitfields:
-  NO EFFECTS
-[from] Function main9_bitfield:
-  NO EFFECTS
-[from] Function main:
-  sz FROM sx; sy
-  uc FROM x
-  x FROM uy; uz
-  ux FROM uy; uz
-  s FROM uy; uz
-[from] ====== END OF DEPENDENCIES ======
-[inout] Out (internal) for function main1:
-    sz; uc; x; ux; s
-[inout] Inputs for function main1:
-    sx; sy; x; uy; uz
-[inout] Out (internal) for function main10_loop:
-    c; bf.b; k
-[inout] Inputs for function main10_loop:
-    v
-[inout] Out (internal) for function main2_bitfield:
-    i; j; ss{.i; .j}
-[inout] Inputs for function main2_bitfield:
-    v
-[inout] Out (internal) for function main3_reduction:
-    x_0; c; y; d
-[inout] Inputs for function main3_reduction:
-    v
-[inout] Out (internal) for function main4_pointer:
-    p; q; r
-[inout] Inputs for function main4_pointer:
-    \nothing
-[inout] Out (internal) for function main5_wrap_signed:
-    x_0; y; z
-[inout] Inputs for function main5_wrap_signed:
-    v
-[inout] Out (internal) for function main6_val_warn_converted_signed:
-    s_0; u; e; b; e_0; e_1; p; x_0; y; z
-[inout] Inputs for function main6_val_warn_converted_signed:
-    v
-[inout] Out (internal) for function main7_signed_upcast:
-    c; i
-[inout] Inputs for function main7_signed_upcast:
-    \nothing
-[inout] Out (internal) for function main8_bitfields:
-    S{.i1; .i2}; c
-[inout] Inputs for function main8_bitfields:
-    v
-[inout] Out (internal) for function main9_bitfield:
-    bf.a; signed_a; c
-[inout] Inputs for function main9_bitfield:
-    v
-[inout] Out (internal) for function main:
-    sz; uc; x; ux; s
-[inout] Inputs for function main:
-    sx; sy; x; uy; uz; v
-[report] Computing properties status...
-
---------------------------------------------------------------------------------
---- Properties of Function 'main1'
---------------------------------------------------------------------------------
-
-[    -    ] Assertion 'Eva,unsigned_downcast' (file tests/value/downcast.i, line 20)
-            tried with Eva.
-[    -    ] Assertion 'Eva,unsigned_downcast' (file tests/value/downcast.i, line 21)
-            tried with Eva.
-[    -    ] Assertion 'Eva,unsigned_downcast' (file tests/value/downcast.i, line 21)
-            tried with Eva.
-[    -    ] Assertion 'Eva,unsigned_downcast' (file tests/value/downcast.i, line 24)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main2_bitfield'
---------------------------------------------------------------------------------
-
-[  Alarm  ] Assertion 'Eva,unsigned_downcast' (file tests/value/downcast.i, line 33)
-            By Eva, with pending:
-             - Unreachable instruction (file tests/value/downcast.i, line 33)
-
---------------------------------------------------------------------------------
---- Properties of Function 'main3_reduction'
---------------------------------------------------------------------------------
-
-[    -    ] Assertion 'Eva,unsigned_downcast' (file tests/value/downcast.i, line 40)
-            tried with Eva.
-[    -    ] Assertion 'Eva,unsigned_downcast' (file tests/value/downcast.i, line 41)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main4_pointer'
---------------------------------------------------------------------------------
-
-[    -    ] Assertion 'Eva,signed_overflow' (file tests/value/downcast.i, line 50)
-            tried with Eva.
-[    -    ] Assertion 'Eva,signed_overflow' (file tests/value/downcast.i, line 50)
-            tried with Eva.
-[    -    ] Assertion 'Eva,unsigned_downcast' (file tests/value/downcast.i, line 51)
-            tried with Eva.
-[    -    ] Assertion 'Eva,unsigned_downcast' (file tests/value/downcast.i, line 51)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main5_wrap_signed'
---------------------------------------------------------------------------------
-
-[    -    ] Assertion 'ASSUME' (file tests/value/downcast.i, line 58)
-            tried with Eva.
-[  Valid  ] Assertion (file tests/value/downcast.i, line 59)
-            by Eva.
-[    -    ] Assertion (file tests/value/downcast.i, line 64)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main6_val_warn_converted_signed'
---------------------------------------------------------------------------------
-
-[  Alarm  ] Assertion 'Eva,unsigned_downcast' (file tests/value/downcast.i, line 81)
-            By Eva, with pending:
-             - Unreachable initialization of 'e_0' (file tests/value/downcast.i, line 81)
-[  Alarm  ] Assertion 'Eva,unsigned_downcast' (file tests/value/downcast.i, line 86)
-            By Eva, with pending:
-             - Unreachable initialization of 'e_1' (file tests/value/downcast.i, line 86)
-[    -    ] Assertion 'Eva,unsigned_downcast' (file tests/value/downcast.i, line 93)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main9_bitfield'
---------------------------------------------------------------------------------
-
-[  Valid  ] Assertion (file tests/value/downcast.i, line 134)
-            by Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main10_loop'
---------------------------------------------------------------------------------
-
-[    -    ] Assertion 'Eva,unsigned_downcast' (file tests/value/downcast.i, line 146)
-            tried with Eva.
-[    -    ] Assertion 'Eva,unsigned_downcast' (file tests/value/downcast.i, line 146)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Status Report Summary
---------------------------------------------------------------------------------
-     2 Completely validated
-    15 To be validated
-     3 Alarms emitted
-    20 Total
---------------------------------------------------------------------------------
-/* Generated by Frama-C */
-struct s {
-   int i : 5 ;
-   unsigned int j : 5 ;
-};
-struct bitf {
-   unsigned int i1 : 18 ;
-   int i2 : 6 ;
-};
-struct __anonstruct_bf_1 {
-   unsigned int a : 11 ;
-};
-struct __anonstruct_bf_2 {
-   unsigned int b : 10 ;
-};
-signed char sx;
-signed char sy;
-signed char sz;
-unsigned char uc;
-int x;
-unsigned int ux;
-unsigned int uy;
-unsigned int uz;
-unsigned short s;
-int volatile v;
-void main1(void)
-{
-  sz = (signed char)((int)sx + (int)sy);
-  /*@ assert Eva: unsigned_downcast: 0 ≤ (int)((int)sx + (int)sy); */
-  uc = (unsigned char)((int)sx + (int)sy);
-  /*@ assert Eva: unsigned_downcast: 0 ≤ x; */
-  /*@ assert Eva: unsigned_downcast: x ≤ 255; */
-  uc = (unsigned char)x;
-  x = (int)(uy + uz);
-  ux = uy + uz;
-  /*@ assert Eva: unsigned_downcast: (unsigned int)(uy + uz) ≤ 65535; */
-  s = (unsigned short)(uy + uz);
-  return;
-}
-
-void main2_bitfield(void)
-{
-  struct s ss;
-  int i = 117;
-  unsigned int j = (unsigned int)254;
-  if (v) 
-    ss.i = (int)i;
-  if (v) 
-    /*@ assert Eva: unsigned_downcast: j ≤ 31; */
-    ss.j = (unsigned int)j;
-  return;
-}
-
-void main3_reduction(void)
-{
-  int x_0 = v;
-  char c = (char)x_0;
-  /*@ assert Eva: unsigned_downcast: 0 ≤ v; */
-  unsigned int y = (unsigned int)v;
-  /*@ assert Eva: unsigned_downcast: y ≤ 255; */
-  unsigned char d = (unsigned char)y;
-  return;
-}
-
-void main4_pointer(void)
-{
-  int x_0;
-  long long p = (long long)(& x_0);
-  /*@ assert
-      Eva: signed_overflow: -9223372036854775808 ≤ p + (long long)100;
-  */
-  /*@ assert
-      Eva: signed_overflow: p + (long long)100 ≤ 9223372036854775807;
-  */
-  p += (long long)100;
-  /*@ assert Eva: unsigned_downcast: 0 ≤ p; */
-  /*@ assert Eva: unsigned_downcast: p ≤ 4294967295; */
-  unsigned int q = (unsigned int)p;
-  int r = (int)p;
-  return;
-}
-
-/*@ assigns \result;
-    assigns \result \from \nothing; */
-extern int ( /* missing proto */ Frama_C_show_each)();
-
-void main5_wrap_signed(void)
-{
-  int x_0 = v;
-  /*@ assert ASSUME: x_0 ≥ 100000; */ ;
-  /*@ assert x_0 > 0x7FFFFFFF - 145 ∨ x_0 ≤ 0x7FFFFFFF - 145; */ ;
-  unsigned int y = (unsigned int)x_0;
-  y += (unsigned int)145;
-  int z = (int)y;
-  Frama_C_show_each(x_0,y,z);
-  /*@ assert z ≥ 100000 + 145 ∨ z ≤ (int)(0x7FFFFFFF + 145); */ ;
-  return;
-}
-
-void main6_val_warn_converted_signed(void)
-{
-  if (v) {
-    short s_0 = (short)65300u;
-  }
-  if (v) {
-    unsigned short u = (unsigned short)65300u;
-  }
-  if (v) {
-    unsigned long e = (unsigned long)17;
-    short b = (short)e;
-  }
-  if (v) {
-    /*@ assert Eva: unsigned_downcast: 0 ≤ (int)(-12); */
-    unsigned long e_0 = (unsigned long)(-12);
-    short b_0 = (short)e_0;
-  }
-  if (v) {
-    /*@ assert Eva: unsigned_downcast: 0 ≤ (int)(-64000); */
-    unsigned int e_1 = (unsigned int)(-64000);
-    short b_1 = (short)e_1;
-  }
-  if (v) {
-    int *p = (int *)(& v);
-    int x_0 = (int)p;
-    short y = (short)p;
-    /*@ assert Eva: unsigned_downcast: p ≤ 65535; */
-    unsigned short z = (unsigned short)p;
-  }
-  return;
-}
-
-void main7_signed_upcast(void)
-{
-  unsigned char c = (unsigned char)240;
-  int i = (int)c;
-  return;
-}
-
-void main8_bitfields(void)
-{
-  struct bitf S;
-  signed char c;
-  S.i1 = (unsigned int)0x3FFFF;
-  if (v) 
-    S.i2 = (int)S.i1;
-  if (v) 
-    c = (signed char)S.i1;
-  S.i1 = (unsigned int)257u;
-  if (v) 
-    S.i2 = (int)S.i1;
-  if (v) 
-    c = (signed char)S.i1;
-  S.i1 = (unsigned int)65u;
-  if (v) 
-    S.i2 = (int)S.i1;
-  if (v) c = (signed char)S.i1;
-  return;
-}
-
-void main9_bitfield(void)
-{
-  struct __anonstruct_bf_1 bf;
-  signed char c;
-  bf.a = (unsigned int)1648;
-  if (v) {
-    int signed_a = (int)((int)bf.a);
-    /*@ assert signed_a ≡ -400; */ ;
-  }
-  if (v) 
-    c = (signed char)bf.a;
-  return;
-}
-
-void main10_loop(void)
-{
-  signed char c;
-  struct __anonstruct_bf_2 bf;
-  int k = 0;
-  while (k < 10) {
-    /*@ assert Eva: unsigned_downcast: 0 ≤ v; */
-    /*@ assert Eva: unsigned_downcast: v ≤ 1023; */
-    bf.b = (unsigned int)v;
-    if (v) 
-      c = (signed char)bf.b;
-    k ++;
-  }
-  return;
-}
-
-void main(void)
-{
-  main1();
-  main2_bitfield();
-  main3_reduction();
-  main4_pointer();
-  main5_wrap_signed();
-  main6_val_warn_converted_signed();
-  main7_signed_upcast();
-  main8_bitfields();
-  main9_bitfield();
-  main10_loop();
-  return;
-}
-
-
-[eva] Analyzing an incomplete application starting at main
-[eva] Computing initial state
-[eva] Initial state computed
-[eva:initial-state] Values of globals at initialization
-  sx ∈ [--..--]
-  sy ∈ [--..--]
-  sz ∈ [--..--]
-  uc ∈ [--..--]
-  x ∈ [--..--]
-  ux ∈ [--..--]
-  uy ∈ [--..--]
-  uz ∈ [--..--]
-  s ∈ [--..--]
-  v ∈ [--..--]
-[eva] computing for function main1 <- main.
-  Called from tests/value/downcast.i:152.
-[eva:alarm] tests/value/downcast.i:19: Warning: 
-  signed downcast. assert -128 ≤ (int)((int)sx + (int)sy);
-[eva:alarm] tests/value/downcast.i:19: Warning: 
-  signed downcast. assert (int)((int)sx + (int)sy) ≤ 127;
-[eva] Recording results for main1
-[eva] Done for function main1
-[eva] computing for function main2_bitfield <- main.
-  Called from tests/value/downcast.i:153.
-[eva:alarm] tests/value/downcast.i:32: Warning: 
-  signed downcast. assert i ≤ 15;
-[eva] Recording results for main2_bitfield
-[eva] Done for function main2_bitfield
-[eva] computing for function main3_reduction <- main.
-  Called from tests/value/downcast.i:154.
-[eva:alarm] tests/value/downcast.i:38: Warning: 
-  signed downcast. assert -128 ≤ x_0;
-[eva:alarm] tests/value/downcast.i:38: Warning: 
-  signed downcast. assert x_0 ≤ 127;
-[eva] Recording results for main3_reduction
-[eva] Done for function main3_reduction
-[eva] computing for function main4_pointer <- main.
-  Called from tests/value/downcast.i:155.
-[eva:alarm] tests/value/downcast.i:50: Warning: 
-  signed overflow. assert -9223372036854775808 ≤ p + (long long)100;
-[eva:alarm] tests/value/downcast.i:50: Warning: 
-  signed overflow. assert p + (long long)100 ≤ 9223372036854775807;
-[eva:alarm] tests/value/downcast.i:52: Warning: 
-  signed downcast. assert -2147483648 ≤ p;
-[eva:alarm] tests/value/downcast.i:52: Warning: 
-  signed downcast. assert p ≤ 2147483647;
-[eva] Recording results for main4_pointer
-[eva] Done for function main4_pointer
-[eva] computing for function main5_wrap_signed <- main.
-  Called from tests/value/downcast.i:156.
-[eva] tests/value/downcast.i:63: 
-  Frama_C_show_each:
-  [100000..2147483647], [100145..2147483792], [-2147483648..2147483647]
-[eva] Recording results for main5_wrap_signed
-[eva] Done for function main5_wrap_signed
-[eva] computing for function main6_val_warn_converted_signed <- main.
-  Called from tests/value/downcast.i:157.
-[eva:alarm] tests/value/downcast.i:71: Warning: 
-  signed downcast. assert (int)65300u ≤ 32767;
-[eva:alarm] tests/value/downcast.i:87: Warning: 
-  signed downcast. assert -32768 ≤ (int)e_1;
-[eva:alarm] tests/value/downcast.i:92: Warning: 
-  signed downcast. assert -32768 ≤ (int)p;
-[eva:alarm] tests/value/downcast.i:92: Warning: 
-  signed downcast. assert (int)p ≤ 32767;
-[eva] Recording results for main6_val_warn_converted_signed
-[eva] Done for function main6_val_warn_converted_signed
-[eva] computing for function main7_signed_upcast <- main.
-  Called from tests/value/downcast.i:158.
-[eva] Recording results for main7_signed_upcast
-[eva] Done for function main7_signed_upcast
-[eva] computing for function main8_bitfields <- main.
-  Called from tests/value/downcast.i:159.
-[eva:alarm] tests/value/downcast.i:119: Warning: 
-  signed downcast. assert (int)S.i1 ≤ 31;
-[eva:alarm] tests/value/downcast.i:120: Warning: 
-  signed downcast. assert (int)S.i1 ≤ 127;
-[eva:alarm] tests/value/downcast.i:124: Warning: 
-  signed downcast. assert (int)S.i1 ≤ 31;
-[eva] Recording results for main8_bitfields
-[eva] Done for function main8_bitfields
-[eva] computing for function main9_bitfield <- main.
-  Called from tests/value/downcast.i:160.
-[eva:alarm] tests/value/downcast.i:137: Warning: 
-  signed downcast. assert -128 ≤ (int)bf.a;
-[eva] Recording results for main9_bitfield
-[eva] Done for function main9_bitfield
-[eva] computing for function main10_loop <- main.
-  Called from tests/value/downcast.i:161.
-[eva:alarm] tests/value/downcast.i:147: Warning: 
-  signed downcast. assert -128 ≤ (int)bf.b;
-[eva:alarm] tests/value/downcast.i:147: Warning: 
-  signed downcast. assert (int)bf.b ≤ 127;
-[eva] Recording results for main10_loop
-[eva] Done for function main10_loop
-[eva] Recording results for main
-[eva] done for function main
-[eva] ====== VALUES COMPUTED ======
-[eva:final-states] Values at end of function main1:
-  sz ∈ [--..--]
-  uc ∈ [--..--]
-  x ∈ [--..--]
-  ux ∈ [--..--]
-  s ∈ [--..--]
-[eva:final-states] Values at end of function main10_loop:
-  c ∈ [--..--] or UNINITIALIZED
-  bf.b ∈ [--..--] or UNINITIALIZED
-    .[bits 10 to 31] ∈ UNINITIALIZED
-  k ∈ {10}
-[eva:final-states] Values at end of function main2_bitfield:
-  i ∈ {117}
-  j ∈ {254}
-  ss.i ∈ UNINITIALIZED
-    .j ∈ {30} or UNINITIALIZED
-    .[bits 10 to 31] ∈ UNINITIALIZED
-[eva:final-states] Values at end of function main3_reduction:
-  x_0 ∈ [-128..127]
-  c ∈ [--..--]
-  y ∈ [--..--]
-  d ∈ [--..--]
-[eva:final-states] Values at end of function main4_pointer:
-  p ∈ {{ &x_0 + {100} }}
-  q ∈ {{ &x_0 + {100} }}
-  r ∈ {{ &x_0 + {100} }}
-[eva:final-states] Values at end of function main5_wrap_signed:
-  x_0 ∈ [100000..2147483647]
-  y ∈ [100145..2147483792]
-  z ∈ [--..--]
-[eva:final-states] Values at end of function main6_val_warn_converted_signed:
-  
-[eva:final-states] Values at end of function main7_signed_upcast:
-  c ∈ {240}
-  i ∈ {240}
-[eva:final-states] Values at end of function main8_bitfields:
-  S.i1 ∈ {65}
-   .i2 ∈ {-1} or UNINITIALIZED
-   .[bits 24 to 31] ∈ UNINITIALIZED
-  c ∈ {-1; 65} or UNINITIALIZED
-[eva:final-states] Values at end of function main9_bitfield:
-  bf.a ∈ {1648}
-    .[bits 11 to 31] ∈ UNINITIALIZED
-  c ∈ UNINITIALIZED
-[eva:final-states] Values at end of function main:
-  sz ∈ [--..--]
-  uc ∈ [--..--]
-  x ∈ [--..--]
-  ux ∈ [--..--]
-  s ∈ [--..--]
-[from] Computing for function main1
-[from] Done for function main1
-[from] Computing for function main10_loop
-[from] Done for function main10_loop
-[from] Computing for function main2_bitfield
-[from] Done for function main2_bitfield
-[from] Computing for function main3_reduction
-[from] Done for function main3_reduction
-[from] Computing for function main4_pointer
-[from] Done for function main4_pointer
-[from] Computing for function main5_wrap_signed
-[from] Done for function main5_wrap_signed
-[from] Computing for function main6_val_warn_converted_signed
-[from] Done for function main6_val_warn_converted_signed
-[from] Computing for function main7_signed_upcast
-[from] Done for function main7_signed_upcast
-[from] Computing for function main8_bitfields
-[from] Done for function main8_bitfields
-[from] Computing for function main9_bitfield
-[from] Done for function main9_bitfield
-[from] Computing for function main
-[from] Done for function main
-[from] ====== DEPENDENCIES COMPUTED ======
-  These dependencies hold at termination for the executions that terminate:
-[from] Function main1:
-  sz FROM sx; sy
-  uc FROM x
-  x FROM uy; uz
-  ux FROM uy; uz
-  s FROM uy; uz
-[from] Function main10_loop:
-  NO EFFECTS
-[from] Function main2_bitfield:
-  NO EFFECTS
-[from] Function main3_reduction:
-  NO EFFECTS
-[from] Function main4_pointer:
-  NO EFFECTS
-[from] Function main5_wrap_signed:
-  NO EFFECTS
-[from] Function main6_val_warn_converted_signed:
-  NO EFFECTS
-[from] Function main7_signed_upcast:
-  NO EFFECTS
-[from] Function main8_bitfields:
-  NO EFFECTS
-[from] Function main9_bitfield:
-  NO EFFECTS
-[from] Function main:
-  sz FROM sx; sy
-  uc FROM x
-  x FROM uy; uz
-  ux FROM uy; uz
-  s FROM uy; uz
-[from] ====== END OF DEPENDENCIES ======
-[inout] Out (internal) for function main1:
-    sz; uc; x; ux; s
-[inout] Inputs for function main1:
-    sx; sy; x; uy; uz
-[inout] Out (internal) for function main10_loop:
-    c; bf.b; k
-[inout] Inputs for function main10_loop:
-    v
-[inout] Out (internal) for function main2_bitfield:
-    i; j; ss{.i; .j}
-[inout] Inputs for function main2_bitfield:
-    v
-[inout] Out (internal) for function main3_reduction:
-    x_0; c; y; d
-[inout] Inputs for function main3_reduction:
-    v
-[inout] Out (internal) for function main4_pointer:
-    p; q; r
-[inout] Inputs for function main4_pointer:
-    \nothing
-[inout] Out (internal) for function main5_wrap_signed:
-    x_0; y; z
-[inout] Inputs for function main5_wrap_signed:
-    v
-[inout] Out (internal) for function main6_val_warn_converted_signed:
-    s_0; u; e; b; e_0; b_0; e_1; b_1; p; x_0; y; z
-[inout] Inputs for function main6_val_warn_converted_signed:
-    v
-[inout] Out (internal) for function main7_signed_upcast:
-    c; i
-[inout] Inputs for function main7_signed_upcast:
-    \nothing
-[inout] Out (internal) for function main8_bitfields:
-    S{.i1; .i2}; c
-[inout] Inputs for function main8_bitfields:
-    v
-[inout] Out (internal) for function main9_bitfield:
-    bf.a; signed_a; c
-[inout] Inputs for function main9_bitfield:
-    v
-[inout] Out (internal) for function main:
-    sz; uc; x; ux; s
-[inout] Inputs for function main:
-    sx; sy; x; uy; uz; v
-[report] Computing properties status...
-
---------------------------------------------------------------------------------
---- Properties of Function 'main1'
---------------------------------------------------------------------------------
-
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 19)
-            tried with Eva.
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 19)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main2_bitfield'
---------------------------------------------------------------------------------
-
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 32)
-            By Eva, with pending:
-             - Unreachable instruction (file tests/value/downcast.i, line 32)
-
---------------------------------------------------------------------------------
---- Properties of Function 'main3_reduction'
---------------------------------------------------------------------------------
-
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 38)
-            tried with Eva.
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 38)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main4_pointer'
---------------------------------------------------------------------------------
-
-[    -    ] Assertion 'Eva,signed_overflow' (file tests/value/downcast.i, line 50)
-            tried with Eva.
-[    -    ] Assertion 'Eva,signed_overflow' (file tests/value/downcast.i, line 50)
-            tried with Eva.
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 52)
-            tried with Eva.
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 52)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main5_wrap_signed'
---------------------------------------------------------------------------------
-
-[    -    ] Assertion 'ASSUME' (file tests/value/downcast.i, line 58)
-            tried with Eva.
-[  Valid  ] Assertion (file tests/value/downcast.i, line 59)
-            by Eva.
-[    -    ] Assertion (file tests/value/downcast.i, line 64)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main6_val_warn_converted_signed'
---------------------------------------------------------------------------------
-
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 71)
-            By Eva, with pending:
-             - Unreachable initialization of 's_0' (file tests/value/downcast.i, line 71)
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 87)
-            By Eva, with pending:
-             - Unreachable initialization of 'b_1' (file tests/value/downcast.i, line 87)
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 92)
-            tried with Eva.
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 92)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Properties of Function 'main8_bitfields'
---------------------------------------------------------------------------------
-
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 119)
-            By Eva, with pending:
-             - Unreachable instruction (file tests/value/downcast.i, line 119)
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 120)
-            By Eva, with pending:
-             - Unreachable instruction (file tests/value/downcast.i, line 120)
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 124)
-            By Eva, with pending:
-             - Unreachable instruction (file tests/value/downcast.i, line 124)
-
---------------------------------------------------------------------------------
---- Properties of Function 'main9_bitfield'
---------------------------------------------------------------------------------
-
-[  Valid  ] Assertion (file tests/value/downcast.i, line 134)
-            by Eva.
-[  Alarm  ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 137)
-            By Eva, with pending:
-             - Unreachable instruction (file tests/value/downcast.i, line 137)
-
---------------------------------------------------------------------------------
---- Properties of Function 'main10_loop'
---------------------------------------------------------------------------------
-
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 147)
-            tried with Eva.
-[    -    ] Assertion 'Eva,signed_downcast' (file tests/value/downcast.i, line 147)
-            tried with Eva.
-
---------------------------------------------------------------------------------
---- Status Report Summary
---------------------------------------------------------------------------------
-     2 Completely validated
-    14 To be validated
-     7 Alarms emitted
-    23 Total
---------------------------------------------------------------------------------
-/* Generated by Frama-C */
-struct s {
-   int i : 5 ;
-   unsigned int j : 5 ;
-};
-struct bitf {
-   unsigned int i1 : 18 ;
-   int i2 : 6 ;
-};
-struct __anonstruct_bf_1 {
-   unsigned int a : 11 ;
-};
-struct __anonstruct_bf_2 {
-   unsigned int b : 10 ;
-};
-signed char sx;
-signed char sy;
-signed char sz;
-unsigned char uc;
-int x;
-unsigned int ux;
-unsigned int uy;
-unsigned int uz;
-unsigned short s;
-int volatile v;
-void main1(void)
-{
-  /*@ assert Eva: signed_downcast: -128 ≤ (int)((int)sx + (int)sy); */
-  /*@ assert Eva: signed_downcast: (int)((int)sx + (int)sy) ≤ 127; */
-  sz = (signed char)((int)sx + (int)sy);
-  uc = (unsigned char)((int)sx + (int)sy);
-  uc = (unsigned char)x;
-  x = (int)(uy + uz);
-  ux = uy + uz;
-  s = (unsigned short)(uy + uz);
-  return;
-}
-
-void main2_bitfield(void)
-{
-  struct s ss;
-  int i = 117;
-  unsigned int j = (unsigned int)254;
-  if (v) 
-    /*@ assert Eva: signed_downcast: i ≤ 15; */
-    ss.i = (int)i;
-  if (v) 
-    ss.j = (unsigned int)j;
-  return;
-}
-
-void main3_reduction(void)
-{
-  int x_0 = v;
-  /*@ assert Eva: signed_downcast: -128 ≤ x_0; */
-  /*@ assert Eva: signed_downcast: x_0 ≤ 127; */
-  char c = (char)x_0;
-  unsigned int y = (unsigned int)v;
-  unsigned char d = (unsigned char)y;
-  return;
-}
-
-void main4_pointer(void)
-{
-  int x_0;
-  long long p = (long long)(& x_0);
-  /*@ assert
-      Eva: signed_overflow: -9223372036854775808 ≤ p + (long long)100;
-  */
-  /*@ assert
-      Eva: signed_overflow: p + (long long)100 ≤ 9223372036854775807;
-  */
-  p += (long long)100;
-  unsigned int q = (unsigned int)p;
-  /*@ assert Eva: signed_downcast: -2147483648 ≤ p; */
-  /*@ assert Eva: signed_downcast: p ≤ 2147483647; */
-  int r = (int)p;
-  return;
-}
-
-/*@ assigns \result;
-    assigns \result \from \nothing; */
-extern int ( /* missing proto */ Frama_C_show_each)();
-
-void main5_wrap_signed(void)
-{
-  int x_0 = v;
-  /*@ assert ASSUME: x_0 ≥ 100000; */ ;
-  /*@ assert x_0 > 0x7FFFFFFF - 145 ∨ x_0 ≤ 0x7FFFFFFF - 145; */ ;
-  unsigned int y = (unsigned int)x_0;
-  y += (unsigned int)145;
-  int z = (int)y;
-  Frama_C_show_each(x_0,y,z);
-  /*@ assert z ≥ 100000 + 145 ∨ z ≤ (int)(0x7FFFFFFF + 145); */ ;
-  return;
-}
-
-void main6_val_warn_converted_signed(void)
-{
-  if (v) {
-    /*@ assert Eva: signed_downcast: (int)65300u ≤ 32767; */
-    short s_0 = (short)65300u;
-  }
-  if (v) {
-    unsigned short u = (unsigned short)65300u;
-  }
-  if (v) {
-    unsigned long e = (unsigned long)17;
-    short b = (short)e;
-  }
-  if (v) {
-    unsigned long e_0 = (unsigned long)(-12);
-    short b_0 = (short)e_0;
-  }
-  if (v) {
-    unsigned int e_1 = (unsigned int)(-64000);
-    /*@ assert Eva: signed_downcast: -32768 ≤ (int)e_1; */
-    short b_1 = (short)e_1;
-  }
-  if (v) {
-    int *p = (int *)(& v);
-    int x_0 = (int)p;
-    /*@ assert Eva: signed_downcast: -32768 ≤ (int)p; */
-    /*@ assert Eva: signed_downcast: (int)p ≤ 32767; */
-    short y = (short)p;
-    unsigned short z = (unsigned short)p;
-  }
-  return;
-}
-
-void main7_signed_upcast(void)
-{
-  unsigned char c = (unsigned char)240;
-  int i = (int)c;
-  return;
-}
-
-void main8_bitfields(void)
-{
-  struct bitf S;
-  signed char c;
-  S.i1 = (unsigned int)0x3FFFF;
-  if (v) 
-    S.i2 = (int)S.i1;
-  if (v) 
-    c = (signed char)S.i1;
-  S.i1 = (unsigned int)257u;
-  if (v) 
-    /*@ assert Eva: signed_downcast: (int)S.i1 ≤ 31; */
-    S.i2 = (int)S.i1;
-  if (v) 
-    /*@ assert Eva: signed_downcast: (int)S.i1 ≤ 127; */
-    c = (signed char)S.i1;
-  S.i1 = (unsigned int)65u;
-  if (v) 
-    /*@ assert Eva: signed_downcast: (int)S.i1 ≤ 31; */
-    S.i2 = (int)S.i1;
-  if (v) c = (signed char)S.i1;
-  return;
-}
-
-void main9_bitfield(void)
-{
-  struct __anonstruct_bf_1 bf;
-  signed char c;
-  bf.a = (unsigned int)1648;
-  if (v) {
-    int signed_a = (int)((int)bf.a);
-    /*@ assert signed_a ≡ -400; */ ;
-  }
-  if (v) 
-    /*@ assert Eva: signed_downcast: -128 ≤ (int)bf.a; */
-    c = (signed char)bf.a;
-  return;
-}
-
-void main10_loop(void)
-{
-  signed char c;
-  struct __anonstruct_bf_2 bf;
-  int k = 0;
-  while (k < 10) {
-    bf.b = (unsigned int)v;
-    if (v) 
-      /*@ assert Eva: signed_downcast: -128 ≤ (int)bf.b; */
-      /*@ assert Eva: signed_downcast: (int)bf.b ≤ 127; */
-      c = (signed char)bf.b;
-    k ++;
-  }
-  return;
-}
-
-void main(void)
-{
-  main1();
-  main2_bitfield();
-  main3_reduction();
-  main4_pointer();
-  main5_wrap_signed();
-  main6_val_warn_converted_signed();
-  main7_signed_upcast();
-  main8_bitfields();
-  main9_bitfield();
-  main10_loop();
-  return;
-}
-
-
-[eva] Analyzing an incomplete application starting at main5_wrap_signed
-[eva] Computing initial state
-[eva] Initial state computed
-[eva:initial-state] Values of globals at initialization
-  sx ∈ [--..--]
-  sy ∈ [--..--]
-  sz ∈ [--..--]
-  uc ∈ [--..--]
-  x ∈ [--..--]
-  ux ∈ [--..--]
-  uy ∈ [--..--]
-  uz ∈ [--..--]
-  s ∈ [--..--]
-  v ∈ [--..--]
-[eva] tests/value/downcast.i:63: 
-  Frama_C_show_each:
-  [2147483503..2147483647],
-  [2147483648..2147483792],
-  [-2147483648..-2147483504]
-[eva] tests/value/downcast.i:63: 
-  Frama_C_show_each:
-  [100000..2147483502], [100145..2147483647], [100145..2147483647]
-[eva] Recording results for main5_wrap_signed
-[eva] done for function main5_wrap_signed
-[eva] ====== VALUES COMPUTED ======
-[eva:final-states] Values at end of function main5_wrap_signed:
-  x_0 ∈ [100000..2147483647]
-  y ∈ [100145..2147483792]
-  z ∈ [--..--]
-[from] Computing for function main5_wrap_signed
-[from] Done for function main5_wrap_signed
-[from] ====== DEPENDENCIES COMPUTED ======
-  These dependencies hold at termination for the executions that terminate:
-[from] Function main5_wrap_signed:
-  NO EFFECTS
-[from] ====== END OF DEPENDENCIES ======
-[inout] Out (internal) for function main5_wrap_signed:
-    x_0; y; z
-[inout] Inputs for function main5_wrap_signed:
-    v
-[report] Computing properties status...
-
---------------------------------------------------------------------------------
---- Properties of Function 'main5_wrap_signed'
---------------------------------------------------------------------------------
-
-[    -    ] Assertion 'ASSUME' (file tests/value/downcast.i, line 58)
-            tried with Eva (v2).
-[  Valid  ] Assertion (file tests/value/downcast.i, line 59)
-            by Eva (v2).
-[  Valid  ] Assertion (file tests/value/downcast.i, line 64)
-            by Eva (v2).
-
---------------------------------------------------------------------------------
---- Properties of Function 'main9_bitfield'
---------------------------------------------------------------------------------
-
-[  Dead   ] Assertion (file tests/value/downcast.i, line 134)
-            Locally valid, but unreachable.
-            By Eva (v2) because:
-             - Unreachable program point (file tests/value/downcast.i, line 134)
-[Unreachable] Unreachable program point (file tests/value/downcast.i, line 134)
-            by Eva (v2).
-
---------------------------------------------------------------------------------
---- Status Report Summary
---------------------------------------------------------------------------------
-     2 Completely validated
-     1 To be validated
-     1 Dead property
-     1 Unreachable
-     5 Total
---------------------------------------------------------------------------------
diff --git a/tests/value/oracle/eval_separated.res.oracle b/tests/value/oracle/eval_separated.res.oracle
index 0c3fea76b479bd4c8ddadcf89f365a78a7d71c30..ba49fd5aff7ed2c46847101b030c1578ba71f117 100644
--- a/tests/value/oracle/eval_separated.res.oracle
+++ b/tests/value/oracle/eval_separated.res.oracle
@@ -11,6 +11,8 @@
 [eva] tests/value/eval_separated.c:6: assertion got status valid.
 [eva] tests/value/eval_separated.c:8: assertion got status valid.
 [eva] tests/value/eval_separated.c:9: assertion got status valid.
+[eva:alarm] tests/value/eval_separated.c:11: Warning: 
+  pointer downcast. assert (unsigned int)(&q) ≤ 2147483647;
 [eva:alarm] tests/value/eval_separated.c:11: Warning: 
   signed overflow. assert -2147483648 ≤ (int)(&q) + (int)(&q);
 [eva:alarm] tests/value/eval_separated.c:11: Warning: 
@@ -18,6 +20,8 @@
 [eva] tests/value/eval_separated.c:11: 
   Assigning imprecise value to q.
   The imprecision originates from Arithmetic {tests/value/eval_separated.c:11}
+[eva:alarm] tests/value/eval_separated.c:12: Warning: 
+  pointer downcast. assert (unsigned int)(&r) ≤ 2147483647;
 [eva:alarm] tests/value/eval_separated.c:12: Warning: 
   signed overflow. assert -2147483648 ≤ (int)(&r) + (int)(&r);
 [eva:alarm] tests/value/eval_separated.c:12: Warning: 
diff --git a/tests/value/oracle/from_call.0.res.oracle b/tests/value/oracle/from_call.0.res.oracle
index 5f8aacfb014ade7377e9998ae79661c5f3f5ce64..90af155562b9b8797ae7bcbd68e0ee6bd42434e9 100644
--- a/tests/value/oracle/from_call.0.res.oracle
+++ b/tests/value/oracle/from_call.0.res.oracle
@@ -1,6 +1,10 @@
 [kernel] Parsing tests/value/from_call.i (no preprocessing)
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
+[eva:alarm] tests/value/from_call.i:70: Warning: 
+  pointer downcast. assert (unsigned int)(&AA) ≤ 2147483647;
+[eva:alarm] tests/value/from_call.i:71: Warning: 
+  pointer downcast. assert (unsigned int)(&AA) ≤ 2147483647;
 [eva] Initial state computed
 [eva:initial-state] Values of globals at initialization
   a ∈ {0}
diff --git a/tests/value/oracle/from_call.1.res.oracle b/tests/value/oracle/from_call.1.res.oracle
index e8c864534dc5e981b7c63292a1f42e4ece799b56..eb4493ddfd3a65d3dfce413d96809353d388e0e9 100644
--- a/tests/value/oracle/from_call.1.res.oracle
+++ b/tests/value/oracle/from_call.1.res.oracle
@@ -1,6 +1,10 @@
 [kernel] Parsing tests/value/from_call.i (no preprocessing)
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
+[eva:alarm] tests/value/from_call.i:70: Warning: 
+  pointer downcast. assert (unsigned int)(&AA) ≤ 2147483647;
+[eva:alarm] tests/value/from_call.i:71: Warning: 
+  pointer downcast. assert (unsigned int)(&AA) ≤ 2147483647;
 [eva] Initial state computed
 [eva:initial-state] Values of globals at initialization
   a ∈ {0}
diff --git a/tests/value/oracle/from_ptr.0.res.oracle b/tests/value/oracle/from_ptr.0.res.oracle
index 46f997dc35f0e830f429145d190dad1388f71ea6..7261a1cb811310c62ae52d2a8bf458e0b25f6de2 100644
--- a/tests/value/oracle/from_ptr.0.res.oracle
+++ b/tests/value/oracle/from_ptr.0.res.oracle
@@ -15,6 +15,10 @@
   b ∈ {0}
   p[0..9][0..9][0..9] ∈ {0}
   q ∈ {0}
+[eva:alarm] tests/value/from_ptr.i:12: Warning: 
+  pointer downcast. assert (unsigned int)(&p[11]) ≤ 2147483647;
+[eva:alarm] tests/value/from_ptr.i:13: Warning: 
+  pointer downcast. assert (unsigned int)(&p[10]) ≤ 2147483647;
 [eva:alarm] tests/value/from_ptr.i:17: Warning: 
   out of bounds write. assert \valid((int *)i);
 [kernel] tests/value/from_ptr.i:17: Warning: 
diff --git a/tests/value/oracle/from_ptr.1.res.oracle b/tests/value/oracle/from_ptr.1.res.oracle
index f1dd5f2cc2c5dd152dca8817202c2c84b01dfba5..1cde862a4b6551a10c5c50fbf37f9edddcd36857 100644
--- a/tests/value/oracle/from_ptr.1.res.oracle
+++ b/tests/value/oracle/from_ptr.1.res.oracle
@@ -15,6 +15,10 @@
   b ∈ {0}
   p[0..9][0..9][0..9] ∈ {0}
   q ∈ {0}
+[eva:alarm] tests/value/from_ptr.i:24: Warning: 
+  pointer downcast. assert (unsigned int)(&p[1]) ≤ 2147483647;
+[eva:alarm] tests/value/from_ptr.i:25: Warning: 
+  pointer downcast. assert (unsigned int)((int (*)[10][10])p) ≤ 2147483647;
 [eva] Recording results for main1
 [eva] done for function main1
 [eva] ====== VALUES COMPUTED ======
diff --git a/tests/value/oracle/fun_ptr.1.res.oracle b/tests/value/oracle/fun_ptr.1.res.oracle
index f8b69ef751a77b9ba0cac41417df312e4b31fc68..3e7b008426e2a3857f1506beccf02faeb6d98f7a 100644
--- a/tests/value/oracle/fun_ptr.1.res.oracle
+++ b/tests/value/oracle/fun_ptr.1.res.oracle
@@ -8,6 +8,10 @@
   expected 'short *' but got argument of type 'int *': & x
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
+[eva:alarm] tests/value/fun_ptr.i:21: Warning: 
+  pointer downcast. assert (unsigned __int64)(&f) ≤ 9223372036854775807;
+[eva:alarm] tests/value/fun_ptr.i:21: Warning: 
+  pointer downcast. assert (unsigned __int64)(&g) ≤ 9223372036854775807;
 [eva] Initial state computed
 [eva:initial-state] Values of globals at initialization
   t[0] ∈ {{ (__int64)&f }}
diff --git a/tests/value/oracle/gauges.res.oracle b/tests/value/oracle/gauges.res.oracle
index fa19ee9d0ef3002d43a7656080239d7a89f6a42b..7cf52beab44793b0f3ed8c99f8dc13f610b85e11 100644
--- a/tests/value/oracle/gauges.res.oracle
+++ b/tests/value/oracle/gauges.res.oracle
@@ -240,6 +240,10 @@
 [eva] computing for function main9 <- main.
   Called from tests/value/gauges.c:361.
 [eva] tests/value/gauges.c:186: starting to merge loop iterations
+[eva:alarm] tests/value/gauges.c:188: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 2147483647;
+[eva:alarm] tests/value/gauges.c:188: Warning: 
+  pointer downcast. assert (unsigned int)q ≤ 2147483647;
 [eva:alarm] tests/value/gauges.c:188: Warning: 
   signed overflow. assert -2147483648 ≤ (int)p + (int)q;
 [eva:alarm] tests/value/gauges.c:188: Warning: 
diff --git a/tests/value/oracle/imprecise_invalid_write.res.oracle b/tests/value/oracle/imprecise_invalid_write.res.oracle
index 3442108db92a4fbc4284112a78b6cbed78012754..338f79ddc5e562248c7d3246b45271cb2c3c3945 100644
--- a/tests/value/oracle/imprecise_invalid_write.res.oracle
+++ b/tests/value/oracle/imprecise_invalid_write.res.oracle
@@ -21,6 +21,8 @@
 [eva] Done for function main1
 [eva] computing for function main2 <- main.
   Called from tests/value/imprecise_invalid_write.i:25.
+[eva:alarm] tests/value/imprecise_invalid_write.i:9: Warning: 
+  pointer downcast. assert (unsigned int)(&main1) ≤ 2147483647;
 [eva] tests/value/imprecise_invalid_write.i:9: 
   Assigning imprecise value to p.
   The imprecision originates from Arithmetic
@@ -33,6 +35,8 @@
 [eva] Done for function main2
 [eva] computing for function main3 <- main.
   Called from tests/value/imprecise_invalid_write.i:28.
+[eva:alarm] tests/value/imprecise_invalid_write.i:16: Warning: 
+  pointer downcast. assert (unsigned int)s ≤ 2147483647;
 [eva] tests/value/imprecise_invalid_write.i:16: 
   Assigning imprecise value to p.
   The imprecision originates from Arithmetic
diff --git a/tests/value/oracle/initialized.res.oracle b/tests/value/oracle/initialized.res.oracle
index f3d1c20aa17d60f4f052fe7a489807dd3537ff5f..b57ddb23b52afcfe2fb43e41160db19dd1996f01 100644
--- a/tests/value/oracle/initialized.res.oracle
+++ b/tests/value/oracle/initialized.res.oracle
@@ -66,6 +66,8 @@
 [eva] Done for function g1
 [eva] computing for function g2 <- main.
   Called from tests/value/initialized.c:194.
+[eva:alarm] tests/value/initialized.c:50: Warning: 
+  pointer downcast. assert (unsigned int)(&b4) ≤ 2147483647;
 [eva:alarm] tests/value/initialized.c:50: Warning: 
   signed overflow. assert -2147483648 ≤ (int)(&b4) + (int)(&b4);
 [eva:alarm] tests/value/initialized.c:50: Warning: 
diff --git a/tests/value/oracle/join_misaligned.res.oracle b/tests/value/oracle/join_misaligned.res.oracle
index cb31ee65e403a3dd9324e6a25644b6f3c07d6db6..111aa1c6f07269e57c40e05b830f78610e7d81e3 100644
--- a/tests/value/oracle/join_misaligned.res.oracle
+++ b/tests/value/oracle/join_misaligned.res.oracle
@@ -14,6 +14,10 @@
   z[0..4] ∈ {255}
   a ∈ {0}
   va ∈ [--..--]
+[eva:alarm] tests/value/join_misaligned.i:23: Warning: 
+  pointer downcast. assert (unsigned int)(&t) ≤ 2147483647;
+[eva:alarm] tests/value/join_misaligned.i:37: Warning: 
+  pointer downcast. assert (unsigned int)(&u) ≤ 2147483647;
 [eva] Recording results for main
 [eva] done for function main
 [eva:garbled-mix] Warning: 
diff --git a/tests/value/oracle/label.res.oracle b/tests/value/oracle/label.res.oracle
index a7dfd612adb73ce8ff24f9b2a2b76936f9e33e74..a87f0773b6eb65bac1d59beedb2c2d142fd94d48 100644
--- a/tests/value/oracle/label.res.oracle
+++ b/tests/value/oracle/label.res.oracle
@@ -10,6 +10,8 @@
   i ∈ {0}
   p ∈ {0}
   q ∈ {0}
+[eva:alarm] tests/value/label.i:14: Warning: 
+  pointer downcast. assert (unsigned int)(&d + 1) ≤ 2147483647;
 [eva] tests/value/label.i:18: 
   Assigning imprecise value to *((char *)(& p) + i)
   (pointing to p with offsets {0}).
diff --git a/tests/value/oracle/leaf2.res.oracle b/tests/value/oracle/leaf2.res.oracle
index db427e105c3dc4664fced2891c968210aae2f1e9..96ab8ffd9b41e9562a73dd6afd3f244a6c403e5f 100644
--- a/tests/value/oracle/leaf2.res.oracle
+++ b/tests/value/oracle/leaf2.res.oracle
@@ -6,6 +6,8 @@
   G ∈ {0}
   H ∈ {0}
   I ∈ {0}
+[eva:alarm] tests/value/leaf2.i:6: Warning: 
+  pointer downcast. assert (unsigned int)(&I) ≤ 2147483647;
 [eva] computing for function f <- main.
   Called from tests/value/leaf2.i:6.
 [kernel:annot:missing-spec] tests/value/leaf2.i:6: Warning: 
diff --git a/tests/value/oracle/mini_pointrer.res.oracle b/tests/value/oracle/mini_pointrer.res.oracle
index 2c0b41b4d4a63a35f3d6216f247a33171a4028f4..0cc72335a3a945d507756d104f6b9f40ca26ee8f 100644
--- a/tests/value/oracle/mini_pointrer.res.oracle
+++ b/tests/value/oracle/mini_pointrer.res.oracle
@@ -11,6 +11,8 @@
   accessing out of bounds index. assert 0 ≤ c1;
 [eva:alarm] tests/value/mini_pointrer.i:6: Warning: 
   accessing out of bounds index. assert c1 < 2;
+[eva:alarm] tests/value/mini_pointrer.i:6: Warning: 
+  pointer downcast. assert (unsigned int)(&T[c1]) ≤ 2147483647;
 [eva:alarm] tests/value/mini_pointrer.i:8: Warning: 
   out of bounds read. assert \valid_read(ppp);
 [eva:alarm] tests/value/mini_pointrer.i:8: Warning: 
diff --git a/tests/value/oracle/nonlin.res.oracle b/tests/value/oracle/nonlin.res.oracle
index de062d28c580191ea1a8cdb6de19c2f0ac49020a..433ce49eaa0ba5fe807e8a83e3c7550bb2c62d67 100644
--- a/tests/value/oracle/nonlin.res.oracle
+++ b/tests/value/oracle/nonlin.res.oracle
@@ -63,6 +63,8 @@
 [eva:nonlin] tests/value/nonlin.c:21: subdividing on i
 [eva:alarm] tests/value/nonlin.c:21: Warning: 
   out of bounds read. assert \valid_read((p + i) - i);
+[eva:alarm] tests/value/nonlin.c:23: Warning: 
+  pointer downcast. assert (unsigned int)(&x) ≤ 2147483647;
 [eva:alarm] tests/value/nonlin.c:24: Warning: 
   out of bounds read. assert \valid_read((p + i) - i);
 [eva] Recording results for subdivide_pointer
diff --git a/tests/value/oracle/not_ct_array_arg.res.oracle b/tests/value/oracle/not_ct_array_arg.res.oracle
index b6c5638c803e6da7d593848c541fb7418e386e7b..8be78fd49c0cde02afd96f8c3a7f7345cee83b0b 100644
--- a/tests/value/oracle/not_ct_array_arg.res.oracle
+++ b/tests/value/oracle/not_ct_array_arg.res.oracle
@@ -24,6 +24,8 @@
   ==END OF DUMP==
 [eva:alarm] tests/value/not_ct_array_arg.i:12: Warning: 
   out of bounds write. assert \valid(&(*(tb + 9))[100]);
+[eva:alarm] tests/value/not_ct_array_arg.i:12: Warning: 
+  pointer downcast. assert (unsigned int)(&tb) ≤ 2147483647;
 [eva] tests/value/not_ct_array_arg.i:13: 
   Frama_C_dump_each:
   # Cvalue domain:
diff --git a/tests/value/oracle/offset_top.res.oracle b/tests/value/oracle/offset_top.res.oracle
index bc18f222647e0f0ff249f35ea2d4dbcff8abb73d..8dbc430d5ee96b88e1fdc11243dd643dbfaa6a2b 100644
--- a/tests/value/oracle/offset_top.res.oracle
+++ b/tests/value/oracle/offset_top.res.oracle
@@ -6,6 +6,8 @@
   NULL[rbits 0 to 2047] ∈ [--..--]
   T ∈ {0}
   TAB[0..9] ∈ {0}
+[eva:alarm] tests/value/offset_top.i:10: Warning: 
+  pointer downcast. assert (unsigned int)(&TAB[*T]) ≤ 2147483647;
 [eva] Recording results for main
 [eva] done for function main
 [eva] ====== VALUES COMPUTED ======
diff --git a/tests/value/oracle/offsetmap.0.res.oracle b/tests/value/oracle/offsetmap.0.res.oracle
index ed60e2eb7466464a7334f4896599961a48bcb892..572459f644a8f9403d5f4f5cc1231c2b6bf93b2e 100644
--- a/tests/value/oracle/offsetmap.0.res.oracle
+++ b/tests/value/oracle/offsetmap.0.res.oracle
@@ -27,6 +27,8 @@
   Called from tests/value/offsetmap.i:75.
 [eva] tests/value/offsetmap.i:19: starting to merge loop iterations
 [eva] tests/value/offsetmap.i:29: starting to merge loop iterations
+[eva:alarm] tests/value/offsetmap.i:51: Warning: 
+  pointer downcast. assert (unsigned int)(&x2) ≤ 2147483647;
 [eva] Recording results for f
 [eva] Done for function f
 [eva] computing for function g <- main.
diff --git a/tests/value/oracle/offsetmap.1.res.oracle b/tests/value/oracle/offsetmap.1.res.oracle
index dbf10008a7f66e55292c0882ccc83a502ca8ca94..d4ac4533187b26fcde94ffc2686f55870879fca3 100644
--- a/tests/value/oracle/offsetmap.1.res.oracle
+++ b/tests/value/oracle/offsetmap.1.res.oracle
@@ -27,6 +27,8 @@
   Called from tests/value/offsetmap.i:75.
 [eva] tests/value/offsetmap.i:19: starting to merge loop iterations
 [eva] tests/value/offsetmap.i:29: starting to merge loop iterations
+[eva:alarm] tests/value/offsetmap.i:51: Warning: 
+  pointer downcast. assert (unsigned int)(&x2) ≤ 2147483647;
 [eva] Recording results for f
 [eva] Done for function f
 [eva] computing for function g <- main.
diff --git a/tests/value/oracle/origin.0.res.oracle b/tests/value/oracle/origin.0.res.oracle
index 64ee1af662166a6561d4bf893d8f0730672cde0e..2bdd5becc39c217a92386b0eec24bb4ac9ebdd71 100644
--- a/tests/value/oracle/origin.0.res.oracle
+++ b/tests/value/oracle/origin.0.res.oracle
@@ -54,6 +54,8 @@
   S_gpp[0..1] ∈ [--..--]
 [eva] computing for function origin_arithmetic_1 <- main.
   Called from tests/value/origin.i:94.
+[eva:alarm] tests/value/origin.i:14: Warning: 
+  pointer downcast. assert (unsigned int)((int *)ta1) ≤ 2147483647;
 [eva:alarm] tests/value/origin.i:14: Warning: 
   signed overflow. assert -2147483648 ≤ -((int)((int *)ta1));
 [eva:alarm] tests/value/origin.i:14: Warning: 
@@ -67,6 +69,8 @@
 [eva] Done for function origin_arithmetic_1
 [eva] computing for function origin_arithmetic_2 <- main.
   Called from tests/value/origin.i:95.
+[eva:alarm] tests/value/origin.i:19: Warning: 
+  pointer downcast. assert (unsigned int)((int *)ta2) ≤ 2147483647;
 [eva:alarm] tests/value/origin.i:19: Warning: 
   signed overflow. assert -2147483648 ≤ -((int)((int *)ta2));
 [eva:alarm] tests/value/origin.i:19: Warning: 
@@ -77,6 +81,8 @@
 [eva] tests/value/origin.i:20: 
   Assigning imprecise value to qa2.
   The imprecision originates from Arithmetic {tests/value/origin.i:19}
+[eva:alarm] tests/value/origin.i:20: Warning: 
+  pointer downcast. assert (unsigned int)((int *)tta2) ≤ 2147483647;
 [eva:alarm] tests/value/origin.i:20: Warning: 
   signed overflow. assert -2147483648 ≤ -((int)((int *)tta2));
 [eva:alarm] tests/value/origin.i:20: Warning: 
@@ -86,10 +92,14 @@
   The imprecision originates from Arithmetic {tests/value/origin.i:20}
 [eva:alarm] tests/value/origin.i:21: Warning: 
   out of bounds write. assert \valid(qa2);
+[eva:alarm] tests/value/origin.i:21: Warning: 
+  pointer downcast. assert (unsigned int)(&aa2) ≤ 2147483647;
 [eva] Recording results for origin_arithmetic_2
 [eva] Done for function origin_arithmetic_2
 [eva] computing for function origin_arithmetic_3 <- main.
   Called from tests/value/origin.i:96.
+[eva:alarm] tests/value/origin.i:25: Warning: 
+  pointer downcast. assert (unsigned int)((int *)ta3) ≤ 2147483647;
 [eva:alarm] tests/value/origin.i:25: Warning: 
   signed overflow. assert -2147483648 ≤ -((int)((int *)ta3));
 [eva:alarm] tests/value/origin.i:25: Warning: 
@@ -148,6 +158,8 @@
   {{ garbled mix of &{a; b} (origin: Misaligned {tests/value/origin.i:54}) }}
 [eva:alarm] tests/value/origin.i:56: Warning: 
   out of bounds write. assert \valid(qm2);
+[eva:alarm] tests/value/origin.i:56: Warning: 
+  pointer downcast. assert (unsigned int)(&a) ≤ 2147483647;
 [eva] Recording results for origin_misalign_2
 [eva] Done for function origin_misalign_2
 [eva] computing for function origin_uninitialized_1 <- main.
@@ -166,6 +178,12 @@
 [eva] Done for function origin_uninitialized_2
 [eva] computing for function local_escape_1 <- main.
   Called from tests/value/origin.i:108.
+[eva:alarm] tests/value/origin.i:83: Warning: 
+  pointer downcast. assert (unsigned int)(&arg) ≤ 2147483647;
+[eva:alarm] tests/value/origin.i:84: Warning: 
+  pointer downcast. assert (unsigned int)(&local1) ≤ 2147483647;
+[eva:alarm] tests/value/origin.i:85: Warning: 
+  pointer downcast. assert (unsigned int)(&arg) ≤ 2147483647;
 [eva:alarm] tests/value/origin.i:85: Warning: 
   signed overflow. assert -2147483648 ≤ -((int)(&arg));
 [eva:alarm] tests/value/origin.i:85: Warning: 
@@ -173,6 +191,10 @@
 [eva] tests/value/origin.i:85: 
   Assigning imprecise value to esc3.
   The imprecision originates from Arithmetic {tests/value/origin.i:85}
+[eva:alarm] tests/value/origin.i:87: Warning: 
+  pointer downcast. assert (unsigned int)(&local1) ≤ 2147483647;
+[eva:alarm] tests/value/origin.i:88: Warning: 
+  pointer downcast. assert (unsigned int)(&esc1) ≤ 2147483647;
 [eva] Recording results for local_escape_1
 [eva] Done for function local_escape_1
 [eva:locals-escaping] tests/value/origin.i:108: Warning: 
@@ -187,6 +209,7 @@
 [eva] done for function main
 [eva] tests/value/origin.i:75: 
   assertion 'Eva,initialization' got final status invalid.
+[scope:rm_asserts] removing 2 assertion(s)
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function local_escape_1:
   esc1 ∈ {{ (int)&arg }}
diff --git a/tests/value/oracle/origin.1.res.oracle b/tests/value/oracle/origin.1.res.oracle
index b8a6b3cb99b375317a49b248133106a0f094ed93..0b3195a5397b0126f8eed45040fafff00df4c125 100644
--- a/tests/value/oracle/origin.1.res.oracle
+++ b/tests/value/oracle/origin.1.res.oracle
@@ -64,6 +64,8 @@
 [eva] tests/value/origin.i:129: 
   Assigning imprecise value to r.t[0].
   The imprecision originates from Merge {tests/value/origin.i:129}
+[eva:alarm] tests/value/origin.i:130: Warning: 
+  pointer downcast. assert (unsigned int)(&x) ≤ 2147483647;
 [eva:alarm] tests/value/origin.i:130: Warning: 
   signed overflow. assert -2147483648 ≤ -((int)(&x));
 [eva:alarm] tests/value/origin.i:130: Warning: 
diff --git a/tests/value/oracle/period.res.oracle b/tests/value/oracle/period.res.oracle
index 0283e81195e5dfb1886fd792544581c9ba206445..2af9a46bd2a738663bb66bde0768d88bc3967919 100644
--- a/tests/value/oracle/period.res.oracle
+++ b/tests/value/oracle/period.res.oracle
@@ -78,18 +78,25 @@
   Gt ∈ {12}
   Ht ∈ {1}
   ==END OF DUMP==
+[eva:alarm] tests/value/period.c:51: Warning: 
+  pointer downcast. assert (unsigned int)(&g) ≤ 2147483647;
 [eva] tests/value/period.c:51: 
   Assigning imprecise value to p.
   The imprecision originates from Arithmetic {tests/value/period.c:51}
 [eva:alarm] tests/value/period.c:52: Warning: 
   out of bounds write. assert \valid(p);
+[eva:alarm] tests/value/period.c:53: Warning: 
+  pointer downcast. assert (unsigned int)(&g) ≤ 2147483647;
 [eva] tests/value/period.c:53: 
   Assigning imprecise value to p.
   The imprecision originates from Arithmetic {tests/value/period.c:53}
 [eva:alarm] tests/value/period.c:54: Warning: 
   out of bounds read. assert \valid_read(p);
+[eva:alarm] tests/value/period.c:55: Warning: 
+  pointer downcast. assert (unsigned int)(&vg) ≤ 2147483647;
 [eva] Recording results for main
 [eva] done for function main
+[scope:rm_asserts] removing 1 assertion(s)
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function main:
   g[0..9] ∈
diff --git a/tests/value/oracle/pointer_comparison.0.res.oracle b/tests/value/oracle/pointer_comparison.0.res.oracle
index c58a323eab8082ad0f725a204de27b2a959e86dc..6ac5900dc2e425cc69bd9317d1baadd5b41e2e7f 100644
--- a/tests/value/oracle/pointer_comparison.0.res.oracle
+++ b/tests/value/oracle/pointer_comparison.0.res.oracle
@@ -18,6 +18,10 @@
 [eva] tests/value/pointer_comparison.c:14: Frama_C_show_each_4: {{ &x + {16} }}
 [eva:pointer-comparison] tests/value/pointer_comparison.c:16: 
   invalid pointer comparison: invalid pointer(s)
+[eva:alarm] tests/value/pointer_comparison.c:16: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 2147483647;
+[eva:alarm] tests/value/pointer_comparison.c:16: Warning: 
+  pointer downcast. assert (unsigned int)(&y) ≤ 2147483647;
 [eva] tests/value/pointer_comparison.c:16: Frama_C_show_each_5: {{ &x + {16} }}
 [eva] tests/value/pointer_comparison.c:17: Frama_C_show_each_5e: {{ &x + {16} }}
 [eva:pointer-comparison] tests/value/pointer_comparison.c:18: 
@@ -48,8 +52,23 @@
 [inout] Inputs for function main:
     p
 [report] Computing properties status...
+
+--------------------------------------------------------------------------------
+--- Properties of Function 'main'
+--------------------------------------------------------------------------------
+
+[    -    ] Assertion 'Eva,pointer_downcast' (file tests/value/pointer_comparison.c, line 16)
+            assert Eva: pointer_downcast: (unsigned int)p ≤ 2147483647;
+            tried with Eva.
+[    -    ] Assertion 'Eva,pointer_downcast' (file tests/value/pointer_comparison.c, line 16)
+            assert Eva: pointer_downcast: (unsigned int)(&y) ≤ 2147483647;
+            tried with Eva.
+
 --------------------------------------------------------------------------------
---- No status to report
+--- Status Report Summary
+--------------------------------------------------------------------------------
+     2 To be validated
+     2 Total
 --------------------------------------------------------------------------------
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
@@ -74,6 +93,10 @@
   assert \pointer_comparable((void *)tmp_2, (void *)(&y));
   (tmp_2 from p++)
 [eva] tests/value/pointer_comparison.c:14: Frama_C_show_each_4: {{ &x + {16} }}
+[eva:alarm] tests/value/pointer_comparison.c:16: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 2147483647;
+[eva:alarm] tests/value/pointer_comparison.c:16: Warning: 
+  pointer downcast. assert (unsigned int)(&y) ≤ 2147483647;
 [eva] tests/value/pointer_comparison.c:16: Frama_C_show_each_5: {{ &x + {16} }}
 [eva] tests/value/pointer_comparison.c:17: Frama_C_show_each_5e: {{ &x + {16} }}
 [eva:alarm] tests/value/pointer_comparison.c:18: Warning: 
@@ -125,6 +148,12 @@
             Eva: ptr_comparison:
               \pointer_comparable((void *)tmp_2, (void *)(&y));
             tried with Eva.
+[    -    ] Assertion 'Eva,pointer_downcast' (file tests/value/pointer_comparison.c, line 16)
+            assert Eva: pointer_downcast: (unsigned int)p ≤ 2147483647;
+            tried with Eva.
+[    -    ] Assertion 'Eva,pointer_downcast' (file tests/value/pointer_comparison.c, line 16)
+            assert Eva: pointer_downcast: (unsigned int)(&y) ≤ 2147483647;
+            tried with Eva.
 [    -    ] Assertion 'Eva,ptr_comparison' (file tests/value/pointer_comparison.c, line 18)
             assert
             Eva: ptr_comparison:
@@ -134,8 +163,8 @@
 --------------------------------------------------------------------------------
 --- Status Report Summary
 --------------------------------------------------------------------------------
-     4 To be validated
-     4 Total
+     6 To be validated
+     6 Total
 --------------------------------------------------------------------------------
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
@@ -160,6 +189,10 @@
   assert \pointer_comparable((void *)tmp_2, (void *)(&y));
   (tmp_2 from p++)
 [eva] tests/value/pointer_comparison.c:14: Frama_C_show_each_4: {{ &x + {16} }}
+[eva:alarm] tests/value/pointer_comparison.c:16: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 2147483647;
+[eva:alarm] tests/value/pointer_comparison.c:16: Warning: 
+  pointer downcast. assert (unsigned int)(&y) ≤ 2147483647;
 [eva:alarm] tests/value/pointer_comparison.c:16: Warning: 
   pointer comparison. assert \pointer_comparable((void *)p, (void *)(&y));
 [eva] tests/value/pointer_comparison.c:16: Frama_C_show_each_5: {{ &x + {16} }}
@@ -213,6 +246,12 @@
             Eva: ptr_comparison:
               \pointer_comparable((void *)tmp_2, (void *)(&y));
             tried with Eva.
+[    -    ] Assertion 'Eva,pointer_downcast' (file tests/value/pointer_comparison.c, line 16)
+            assert Eva: pointer_downcast: (unsigned int)p ≤ 2147483647;
+            tried with Eva.
+[    -    ] Assertion 'Eva,pointer_downcast' (file tests/value/pointer_comparison.c, line 16)
+            assert Eva: pointer_downcast: (unsigned int)(&y) ≤ 2147483647;
+            tried with Eva.
 [    -    ] Assertion 'Eva,ptr_comparison' (file tests/value/pointer_comparison.c, line 16)
             assert
             Eva: ptr_comparison: \pointer_comparable((void *)p, (void *)(&y));
@@ -226,6 +265,6 @@
 --------------------------------------------------------------------------------
 --- Status Report Summary
 --------------------------------------------------------------------------------
-     5 To be validated
-     5 Total
+     7 To be validated
+     7 Total
 --------------------------------------------------------------------------------
diff --git a/tests/value/oracle/pointer_comparison.1.res.oracle b/tests/value/oracle/pointer_comparison.1.res.oracle
index 890e9690c6c1d14e06b4af1515e5dc193155e4f0..cd63714dccccd315f1b03fddceefecccc8f7ddd8 100644
--- a/tests/value/oracle/pointer_comparison.1.res.oracle
+++ b/tests/value/oracle/pointer_comparison.1.res.oracle
@@ -33,6 +33,10 @@
 [eva] tests/value/pointer_comparison.c:15: Frama_C_show_each_4e: {{ &x + {16} }}
 [eva:pointer-comparison] tests/value/pointer_comparison.c:16: 
   invalid pointer comparison: invalid pointer(s)
+[eva:alarm] tests/value/pointer_comparison.c:16: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 2147483647;
+[eva:alarm] tests/value/pointer_comparison.c:16: Warning: 
+  pointer downcast. assert (unsigned int)(&y) ≤ 2147483647;
 [eva] tests/value/pointer_comparison.c:16: Frama_C_show_each_5: {{ &x + {16} }}
 [eva] tests/value/pointer_comparison.c:17: Frama_C_show_each_5e: {{ &x + {16} }}
 [eva:pointer-comparison] tests/value/pointer_comparison.c:18: 
@@ -68,8 +72,23 @@
 [inout] Inputs for function main:
     p
 [report] Computing properties status...
+
+--------------------------------------------------------------------------------
+--- Properties of Function 'main'
+--------------------------------------------------------------------------------
+
+[    -    ] Assertion 'Eva,pointer_downcast' (file tests/value/pointer_comparison.c, line 16)
+            assert Eva: pointer_downcast: (unsigned int)p ≤ 2147483647;
+            tried with Eva.
+[    -    ] Assertion 'Eva,pointer_downcast' (file tests/value/pointer_comparison.c, line 16)
+            assert Eva: pointer_downcast: (unsigned int)(&y) ≤ 2147483647;
+            tried with Eva.
+
 --------------------------------------------------------------------------------
---- No status to report
+--- Status Report Summary
+--------------------------------------------------------------------------------
+     2 To be validated
+     2 Total
 --------------------------------------------------------------------------------
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
@@ -97,6 +116,10 @@
   (tmp_2 from p++)
 [eva] tests/value/pointer_comparison.c:14: Frama_C_show_each_4: {{ &x + {16} }}
 [eva] tests/value/pointer_comparison.c:15: Frama_C_show_each_4e: {{ &x + {16} }}
+[eva:alarm] tests/value/pointer_comparison.c:16: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 2147483647;
+[eva:alarm] tests/value/pointer_comparison.c:16: Warning: 
+  pointer downcast. assert (unsigned int)(&y) ≤ 2147483647;
 [eva] tests/value/pointer_comparison.c:16: Frama_C_show_each_5: {{ &x + {16} }}
 [eva] tests/value/pointer_comparison.c:17: Frama_C_show_each_5e: {{ &x + {16} }}
 [eva:alarm] tests/value/pointer_comparison.c:18: Warning: 
@@ -149,6 +172,12 @@
             Eva: ptr_comparison:
               \pointer_comparable((void *)tmp_2, (void *)(&y));
             tried with Eva.
+[    -    ] Assertion 'Eva,pointer_downcast' (file tests/value/pointer_comparison.c, line 16)
+            assert Eva: pointer_downcast: (unsigned int)p ≤ 2147483647;
+            tried with Eva.
+[    -    ] Assertion 'Eva,pointer_downcast' (file tests/value/pointer_comparison.c, line 16)
+            assert Eva: pointer_downcast: (unsigned int)(&y) ≤ 2147483647;
+            tried with Eva.
 [    -    ] Assertion 'Eva,ptr_comparison' (file tests/value/pointer_comparison.c, line 18)
             assert
             Eva: ptr_comparison:
@@ -158,8 +187,8 @@
 --------------------------------------------------------------------------------
 --- Status Report Summary
 --------------------------------------------------------------------------------
-     4 To be validated
-     4 Total
+     6 To be validated
+     6 Total
 --------------------------------------------------------------------------------
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
@@ -187,6 +216,10 @@
   (tmp_2 from p++)
 [eva] tests/value/pointer_comparison.c:14: Frama_C_show_each_4: {{ &x + {16} }}
 [eva] tests/value/pointer_comparison.c:15: Frama_C_show_each_4e: {{ &x + {16} }}
+[eva:alarm] tests/value/pointer_comparison.c:16: Warning: 
+  pointer downcast. assert (unsigned int)p ≤ 2147483647;
+[eva:alarm] tests/value/pointer_comparison.c:16: Warning: 
+  pointer downcast. assert (unsigned int)(&y) ≤ 2147483647;
 [eva:alarm] tests/value/pointer_comparison.c:16: Warning: 
   pointer comparison. assert \pointer_comparable((void *)p, (void *)(&y));
 [eva] tests/value/pointer_comparison.c:16: Frama_C_show_each_5: {{ &x + {16} }}
@@ -241,6 +274,12 @@
             Eva: ptr_comparison:
               \pointer_comparable((void *)tmp_2, (void *)(&y));
             tried with Eva.
+[    -    ] Assertion 'Eva,pointer_downcast' (file tests/value/pointer_comparison.c, line 16)
+            assert Eva: pointer_downcast: (unsigned int)p ≤ 2147483647;
+            tried with Eva.
+[    -    ] Assertion 'Eva,pointer_downcast' (file tests/value/pointer_comparison.c, line 16)
+            assert Eva: pointer_downcast: (unsigned int)(&y) ≤ 2147483647;
+            tried with Eva.
 [    -    ] Assertion 'Eva,ptr_comparison' (file tests/value/pointer_comparison.c, line 16)
             assert
             Eva: ptr_comparison: \pointer_comparable((void *)p, (void *)(&y));
@@ -254,6 +293,6 @@
 --------------------------------------------------------------------------------
 --- Status Report Summary
 --------------------------------------------------------------------------------
-     5 To be validated
-     5 Total
+     7 To be validated
+     7 Total
 --------------------------------------------------------------------------------
diff --git a/tests/value/oracle/pointer_int_cast.res.oracle b/tests/value/oracle/pointer_int_cast.res.oracle
index 078dfbbd5bee8472325f2b748799bbafe9459628..cad14cc1bd042de3a5b4ae42904551966dc6a151 100644
--- a/tests/value/oracle/pointer_int_cast.res.oracle
+++ b/tests/value/oracle/pointer_int_cast.res.oracle
@@ -8,6 +8,8 @@
   q ∈ {0}
   x ∈ {0}
   y ∈ {0}
+[eva:alarm] tests/value/pointer_int_cast.i:9: Warning: 
+  pointer downcast. assert (unsigned int)(&y) ≤ 2147483647;
 [eva] Recording results for g
 [eva] done for function g
 [eva] ====== VALUES COMPUTED ======
diff --git a/tests/value/oracle/shift.0.res.oracle b/tests/value/oracle/shift.0.res.oracle
index aa83c00acb6fec860002e54317aee5ec41e97e39..b2838250a6d5104942a7d000707c740654d060e8 100644
--- a/tests/value/oracle/shift.0.res.oracle
+++ b/tests/value/oracle/shift.0.res.oracle
@@ -44,6 +44,8 @@
 [eva] tests/value/shift.i:52: 
   Assigning imprecise value to r.
   The imprecision originates from Arithmetic {tests/value/shift.i:52}
+[eva:alarm] tests/value/shift.i:53: Warning: 
+  pointer downcast. assert (unsigned int)((char *)t) ≤ 2147483647;
 [eva:alarm] tests/value/shift.i:53: Warning: 
   invalid LHS operand for left shift. assert 0 ≤ (long)((char *)t);
 [eva:alarm] tests/value/shift.i:53: Warning: 
diff --git a/tests/value/oracle/shift.1.res.oracle b/tests/value/oracle/shift.1.res.oracle
index 076532ff7124c6875536b00e1051863ad9d4aa3c..9862244f180a9db29e4f8a675b3763cf0dc72b3d 100644
--- a/tests/value/oracle/shift.1.res.oracle
+++ b/tests/value/oracle/shift.1.res.oracle
@@ -38,6 +38,8 @@
 [eva] tests/value/shift.i:52: 
   Assigning imprecise value to r.
   The imprecision originates from Arithmetic {tests/value/shift.i:52}
+[eva:alarm] tests/value/shift.i:53: Warning: 
+  pointer downcast. assert (unsigned int)((char *)t) ≤ 2147483647;
 [eva:alarm] tests/value/shift.i:53: Warning: 
   signed overflow. assert -2147483648 ≤ (long)((char *)t) << 8;
 [eva:alarm] tests/value/shift.i:53: Warning: 
diff --git a/tests/value/oracle/sizeof.res.oracle b/tests/value/oracle/sizeof.res.oracle
index 90ea60d5201575ac44fcbe81c059e02e2632d14d..adc483ff665929f6a5ccbcac65eee15f7da03395 100644
--- a/tests/value/oracle/sizeof.res.oracle
+++ b/tests/value/oracle/sizeof.res.oracle
@@ -18,6 +18,8 @@
 [eva] Done for function main1
 [eva] computing for function main2 <- main.
   Called from tests/value/sizeof.i:41.
+[eva:alarm] tests/value/sizeof.i:32: Warning: 
+  pointer downcast. assert (unsigned int)(&s1) ≤ 2147483647;
 [eva] tests/value/sizeof.i:32: 
   Assigning imprecise value to p.
   The imprecision originates from Arithmetic {tests/value/sizeof.i:32}
@@ -124,6 +126,7 @@ struct s s1;
 int volatile i;
 void main2(void)
 {
+  /*@ assert Eva: pointer_downcast: (unsigned int)(&s1) ≤ 2147483647; */
   struct s *p = (& s1 + (int)(& s1)) - (int)(& s1);
   /*@ assert
       Eva: index_bound: (unsigned int)(sizeof(s1.t) - (unsigned int)i) < 10;
diff --git a/tests/value/oracle/struct3.res.oracle b/tests/value/oracle/struct3.res.oracle
index 73e5ba0ea066bc75260c87fae0c189e46048166b..4cbcaa45fece740a5d003524f97f4d0e6c3bd565 100644
--- a/tests/value/oracle/struct3.res.oracle
+++ b/tests/value/oracle/struct3.res.oracle
@@ -19,6 +19,10 @@
   accessing out of bounds index. assert 10 < 10;
 [kernel] tests/value/struct3.i:42: Warning: 
   all target addresses were invalid. This path is assumed to be dead.
+[eva:alarm] tests/value/struct3.i:46: Warning: 
+  pointer downcast. assert (unsigned int)s2.c ≤ 2147483647;
+[eva:alarm] tests/value/struct3.i:46: Warning: 
+  pointer downcast. assert (unsigned int)(s2.c + (int)s2.c) ≤ 2147483647;
 [eva] tests/value/struct3.i:46: 
   Assigning imprecise value to s2.a.
   The imprecision originates from Arithmetic {tests/value/struct3.i:46}
diff --git a/tests/value/oracle/struct_array.res.oracle b/tests/value/oracle/struct_array.res.oracle
index faf7f29e81bdc46b6f0a80ba6da31a3c64d8b13e..05ac2f16880175bd81d50810e8f58c82ee0a05a7 100644
--- a/tests/value/oracle/struct_array.res.oracle
+++ b/tests/value/oracle/struct_array.res.oracle
@@ -1,6 +1,12 @@
 [kernel] Parsing tests/value/struct_array.i (no preprocessing)
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
+[eva:alarm] tests/value/struct_array.i:15: Warning: 
+  pointer downcast. assert (unsigned int)(&z1) ≤ 2147483647;
+[eva:alarm] tests/value/struct_array.i:15: Warning: 
+  pointer downcast. assert (unsigned int)(&z2) ≤ 2147483647;
+[eva:alarm] tests/value/struct_array.i:15: Warning: 
+  pointer downcast. assert (unsigned int)(&z4) ≤ 2147483647;
 [eva] Initial state computed
 [eva:initial-state] Values of globals at initialization
   v ∈ [--..--]
@@ -234,6 +240,12 @@
       [19].p; [20].p; [21].p}; s; s1; s2; s3
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
+[eva:alarm] tests/value/struct_array.i:15: Warning: 
+  pointer downcast. assert (unsigned int)(&z1) ≤ 2147483647;
+[eva:alarm] tests/value/struct_array.i:15: Warning: 
+  pointer downcast. assert (unsigned int)(&z2) ≤ 2147483647;
+[eva:alarm] tests/value/struct_array.i:15: Warning: 
+  pointer downcast. assert (unsigned int)(&z4) ≤ 2147483647;
 [eva] Initial state computed
 [eva:initial-state] Values of globals at initialization
   v ∈ [--..--]
diff --git a/tests/value/oracle/struct_incl.res.oracle b/tests/value/oracle/struct_incl.res.oracle
index 7f41406ae8876196443ccfd0f061fe5c14b45722..3eb4f598ee5535e92806764dd7628d0d1bc3307c 100644
--- a/tests/value/oracle/struct_incl.res.oracle
+++ b/tests/value/oracle/struct_incl.res.oracle
@@ -22,6 +22,12 @@
   z ∈ {0}
   t ∈ {0}
   v ∈ [--..--]
+[eva:alarm] tests/value/struct_incl.i:28: Warning: 
+  pointer downcast. assert (unsigned int)(&s1.d[9]) ≤ 2147483647;
+[eva:alarm] tests/value/struct_incl.i:29: Warning: 
+  pointer downcast. assert (unsigned int)(&s1.d[10]) ≤ 2147483647;
+[eva:alarm] tests/value/struct_incl.i:30: Warning: 
+  pointer downcast. assert (unsigned int)(&s1.b) ≤ 2147483647;
 [eva:alarm] tests/value/struct_incl.i:48: Warning: 
   accessing out of bounds index. assert 10 < 10;
 [kernel] tests/value/struct_incl.i:48: Warning: 
diff --git a/tests/value/oracle/symbolic_locs.res.oracle b/tests/value/oracle/symbolic_locs.res.oracle
index 154a7b55ae69c0322855b6ec0641415c750dac3c..eb325482dff5626613b033e1a10ed1426e77a835 100644
--- a/tests/value/oracle/symbolic_locs.res.oracle
+++ b/tests/value/oracle/symbolic_locs.res.oracle
@@ -64,6 +64,8 @@
   Called from tests/value/symbolic_locs.i:121.
 [eva:alarm] tests/value/symbolic_locs.i:51: Warning: 
   assertion got status unknown.
+[eva:alarm] tests/value/symbolic_locs.i:54: Warning: 
+  pointer downcast. assert (unsigned int)(&x) ≤ 2147483647;
 [eva] tests/value/symbolic_locs.i:55: 
   Frama_C_dump_each:
   # Cvalue domain:
diff --git a/tests/value/oracle/test_arith.res.oracle b/tests/value/oracle/test_arith.res.oracle
index 8e462c9e595ce5651bccad91d3ee4d434ff1fa56..0eacce08467e7b1726285b701f49cbe4f7613b07 100644
--- a/tests/value/oracle/test_arith.res.oracle
+++ b/tests/value/oracle/test_arith.res.oracle
@@ -17,6 +17,8 @@
   G ∈ {0}
 [eva:alarm] tests/value/test_arith.c:16: Warning: 
   signed overflow. assert n + 1 ≤ 2147483647;
+[eva:alarm] tests/value/test_arith.c:18: Warning: 
+  pointer downcast. assert (unsigned int)ptr ≤ 2147483647;
 [eva:alarm] tests/value/test_arith.c:18: Warning: 
   signed overflow. assert -2147483648 ≤ (int)ptr + 1;
 [eva:alarm] tests/value/test_arith.c:18: Warning: 
diff --git a/tests/value/oracle/val6.0.res.oracle b/tests/value/oracle/val6.0.res.oracle
index 4e2b389231689d1033ecb2773969b962487172d1..6f55e39160535d43c76637297a29444fff5d2392 100644
--- a/tests/value/oracle/val6.0.res.oracle
+++ b/tests/value/oracle/val6.0.res.oracle
@@ -9,6 +9,8 @@
   b ∈ {0}
   y ∈ {0}
   x ∈ {0}
+[eva:alarm] tests/value/val6.i:13: Warning: 
+  pointer downcast. assert (unsigned int)c ≤ 2147483647;
 [eva] Recording results for f
 [eva] done for function f
 [eva] ====== VALUES COMPUTED ======
diff --git a/tests/value/oracle/volatile.res.oracle b/tests/value/oracle/volatile.res.oracle
index fe1efbbfceb93a5fde01d1a898afddbdc39dd98d..8cfa94fed9df507ba41a46c8921cf3b906e5eb20 100644
--- a/tests/value/oracle/volatile.res.oracle
+++ b/tests/value/oracle/volatile.res.oracle
@@ -90,6 +90,8 @@
 [eva] Done for function main1
 [eva] computing for function main2 <- main.
   Called from tests/value/volatile.c:177.
+[eva:alarm] tests/value/volatile.c:83: Warning: 
+  pointer downcast. assert (unsigned int)(&X) ≤ 2147483647;
 [eva] Recording results for main2
 [eva] Done for function main2
 [eva] computing for function main3 <- main.
diff --git a/tests/value/oracle/volatilestruct.res.oracle b/tests/value/oracle/volatilestruct.res.oracle
index ed81eece0db93c42d0a0d23243d2c91ace28ebfa..256e74cfbacfc6a6c2b098a2703e0ef1b94d90ca 100644
--- a/tests/value/oracle/volatilestruct.res.oracle
+++ b/tests/value/oracle/volatilestruct.res.oracle
@@ -7,6 +7,8 @@
   s2 ∈ {0}
   x ∈ {0}
   y ∈ {0}
+[eva:alarm] tests/value/volatilestruct.c:31: Warning: 
+  pointer downcast. assert (unsigned int)p->f4.f2 ≤ 2147483647;
 [eva:alarm] tests/value/volatilestruct.c:33: Warning: 
   signed overflow. assert -2147483648 ≤ &x - p->f4.f1;
 [eva:alarm] tests/value/volatilestruct.c:33: Warning: 
@@ -53,6 +55,8 @@
   s2 ∈ {0}
   x ∈ {0}
   y ∈ {0}
+[eva:alarm] tests/value/volatilestruct.c:31: Warning: 
+  pointer downcast. assert (unsigned int)p->f4.f2 ≤ 2147483647;
 [eva:signed-overflow] tests/value/volatilestruct.c:33: Warning: 
   2's complement assumed for overflow
 [eva:signed-overflow] tests/value/volatilestruct.c:34: Warning: