let coerce_int_constant n t =
let unsigned =
match t.ct_ty with
Tbuiltin t ->
begin
match t with
Tuchar -> true | Tushort -> true | Tuint -> true | Tulong -> true
| Tulonglong -> true
| _ -> false
end
| _ -> assert false
in
let max_value = get_max_value_of_type t in
let base = add_int_big_int 1 max_value in
let negative = lt_big_int n zero_big_int in
let n = mod_big_int n base in
if unsigned then
n
else if negative then begin
if eq_big_int n zero_big_int then
minus_big_int base
else
minus_big_int n
end
else
n