tip: Cast via intptr_t not long when casting between pointer and int
Whilst all FreeBSD architectures have the same representation for intptr_t and long (even if the former is int on ILP32 architectures), this is more general and correct, and on CHERI they are not the same so warnings are generated by default for integer-to-pointer casts that aren't via (u)intptr_t. Reviewed by: imp, kib Obtained from: CheriBSD Differential Revision: https://reviews.freebsd.org/D30696
This commit is contained in:
parent
9021c46603
commit
de295884c4
@ -153,16 +153,16 @@ typedef
|
||||
*/
|
||||
|
||||
#define value(v) vtable[v].v_value
|
||||
#define lvalue(v) (long)vtable[v].v_value
|
||||
#define lvalue(v) (long)(intptr_t)vtable[v].v_value
|
||||
|
||||
#define number(v) ((long)(v))
|
||||
#define boolean(v) ((short)(long)(v))
|
||||
#define character(v) ((char)(long)(v))
|
||||
#define address(v) ((long *)(v))
|
||||
#define number(v) ((long)(intptr_t)(v))
|
||||
#define boolean(v) ((short)(intptr_t)(v))
|
||||
#define character(v) ((char)(intptr_t)(v))
|
||||
#define address(v) ((long *)(v))
|
||||
|
||||
#define setnumber(v,n) do { (v) = (char *)(long)(n); } while (0)
|
||||
#define setboolean(v,n) do { (v) = (char *)(long)(n); } while (0)
|
||||
#define setcharacter(v,n) do { (v) = (char *)(long)(n); } while (0)
|
||||
#define setnumber(v,n) do { (v) = (char *)(intptr_t)(n); } while (0)
|
||||
#define setboolean(v,n) do { (v) = (char *)(intptr_t)(n); } while (0)
|
||||
#define setcharacter(v,n) do { (v) = (char *)(intptr_t)(n); } while (0)
|
||||
#define setaddress(v,n) do { (v) = (char *)(n); } while (0)
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user