score: Add RTEMS_HAVE_MEMBER_SAME_TYPE()

This fixes some "variably modified" warnings and a clang compile error.
This commit is contained in:
Sebastian Huber
2017-07-28 11:57:31 +02:00
parent 3ebbabbb93
commit af97ba8f29
2 changed files with 25 additions and 2 deletions

View File

@@ -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.
*/

View File

@@ -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 \
)