forked from Imagelibrary/rtems
score: Add RTEMS_HAVE_MEMBER_SAME_TYPE()
This fixes some "variably modified" warnings and a clang compile error.
This commit is contained in:
@@ -372,6 +372,25 @@ extern void RTEMS_DEQUALIFY_types_not_compatible(void);
|
||||
#endif /*RTEMS_DEQUALIFY_DEPTHX*/
|
||||
#endif /*RTEMS_DEQUALIFY*/
|
||||
|
||||
/**
|
||||
* @brief Evaluates to true if the members of two types have the same type.
|
||||
*
|
||||
* @param[in] _t_lhs Left hand side type.
|
||||
* @param[in] _m_lhs Left hand side member.
|
||||
* @param[in] _t_rhs Right hand side type.
|
||||
* @param[in] _m_rhs Right hand side member.
|
||||
*/
|
||||
#ifdef __GNUC__
|
||||
#define RTEMS_HAVE_MEMBER_SAME_TYPE( _t_lhs, _m_lhs, _t_rhs, _m_rhs ) \
|
||||
__builtin_types_compatible_p( \
|
||||
__typeof( ( (_t_lhs *) 0 )->_m_lhs ), \
|
||||
__typeof( ( (_t_rhs *) 0 )->_m_rhs ) \
|
||||
)
|
||||
#else
|
||||
#define RTEMS_HAVE_MEMBER_SAME_TYPE( _t_lhs, _m_lhs, _t_rhs, _m_rhs ) \
|
||||
true
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Concatenates _x and _y without expanding.
|
||||
*/
|
||||
|
||||
@@ -1141,8 +1141,12 @@ typedef struct {
|
||||
RTEMS_STATIC_ASSERT( \
|
||||
offsetof( object_type, wait_queue_member ) \
|
||||
== offsetof( Thread_queue_Object, Wait_queue ) \
|
||||
&& ( &( ( (object_type *) 0 )->wait_queue_member ) \
|
||||
== ( &( (Thread_queue_Object *) 0 )->Wait_queue ) ), \
|
||||
&& RTEMS_HAVE_MEMBER_SAME_TYPE( \
|
||||
object_type, \
|
||||
wait_queue_member, \
|
||||
Thread_queue_Object, \
|
||||
Wait_queue \
|
||||
), \
|
||||
object_type \
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user