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