xref: /rk3399_rockchip-uboot/include/linux/typecheck.h (revision ff90af6c73883121358251bba66245ff4da3755c)
1*ff90af6cSMasahiro Yamada #ifndef TYPECHECK_H_INCLUDED
2*ff90af6cSMasahiro Yamada #define TYPECHECK_H_INCLUDED
3*ff90af6cSMasahiro Yamada 
4*ff90af6cSMasahiro Yamada /*
5*ff90af6cSMasahiro Yamada  * Check at compile time that something is of a particular type.
6*ff90af6cSMasahiro Yamada  * Always evaluates to 1 so you may use it easily in comparisons.
7*ff90af6cSMasahiro Yamada  */
8*ff90af6cSMasahiro Yamada #define typecheck(type,x) \
9*ff90af6cSMasahiro Yamada ({	type __dummy; \
10*ff90af6cSMasahiro Yamada 	typeof(x) __dummy2; \
11*ff90af6cSMasahiro Yamada 	(void)(&__dummy == &__dummy2); \
12*ff90af6cSMasahiro Yamada 	1; \
13*ff90af6cSMasahiro Yamada })
14*ff90af6cSMasahiro Yamada 
15*ff90af6cSMasahiro Yamada /*
16*ff90af6cSMasahiro Yamada  * Check at compile time that 'function' is a certain type, or is a pointer
17*ff90af6cSMasahiro Yamada  * to that type (needs to use typedef for the function type.)
18*ff90af6cSMasahiro Yamada  */
19*ff90af6cSMasahiro Yamada #define typecheck_fn(type,function) \
20*ff90af6cSMasahiro Yamada ({	typeof(type) __tmp = function; \
21*ff90af6cSMasahiro Yamada 	(void)__tmp; \
22*ff90af6cSMasahiro Yamada })
23*ff90af6cSMasahiro Yamada 
24*ff90af6cSMasahiro Yamada #endif		/* TYPECHECK_H_INCLUDED */
25