helpers: Move static_assert definition to shared
Collect the fallback definitions of static_assert() from desktop-shell and the test shell, and move them to helpers.h. This allows code throughout the tree to use static_assert() for build-time assertions, where it is supported by the compiler. As GCC goes out of its way to only add static_assert() when C11 has been explicitly requested - which we don't do - make sure to use the more widely available _Static_assert() if that is provided. This will be used in future patches to ensure two array lengths don't go out of sync. Signed-off-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
parent
bdebc3170e
commit
11f91bbd36
@ -47,10 +47,6 @@
|
||||
#define DEFAULT_NUM_WORKSPACES 1
|
||||
#define DEFAULT_WORKSPACE_CHANGE_ANIMATION_LENGTH 200
|
||||
|
||||
#ifndef static_assert
|
||||
#define static_assert(cond, msg)
|
||||
#endif
|
||||
|
||||
struct focus_state {
|
||||
struct desktop_shell *shell;
|
||||
struct weston_seat *seat;
|
||||
|
@ -100,6 +100,40 @@ extern "C" {
|
||||
(type *)( (char *)__mptr - offsetof(type,member) );})
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Build-time static assertion support
|
||||
*
|
||||
* A build-time equivalent to assert(), will generate a compilation error
|
||||
* if the supplied condition does not evaluate true.
|
||||
*
|
||||
* The following example demonstrates use of static_assert to ensure that
|
||||
* arrays which are supposed to mirror each other have a consistent
|
||||
* size.
|
||||
*
|
||||
* This is only a fallback definition; support must be provided by the
|
||||
* compiler itself.
|
||||
*
|
||||
* @code
|
||||
* int small[4];
|
||||
* long expanded[4];
|
||||
*
|
||||
* static_assert(ARRAY_LENGTH(small) == ARRAY_LENGTH(expanded),
|
||||
* "size mismatch between small and expanded arrays");
|
||||
* for (i = 0; i < ARRAY_LENGTH(small); i++)
|
||||
* expanded[i] = small[4];
|
||||
* @endcode
|
||||
*
|
||||
* @param condition Expression to check for truth
|
||||
* @param msg Message to print on failure
|
||||
*/
|
||||
#ifndef static_assert
|
||||
# ifdef _Static_assert
|
||||
# define static_assert(cond, msg) _Static_assert(cond, msg)
|
||||
# else
|
||||
# define static_assert(cond, msg)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -41,10 +41,6 @@
|
||||
#include "shared/helpers.h"
|
||||
#include "libweston-desktop/libweston-desktop.h"
|
||||
|
||||
#ifndef static_assert
|
||||
#define static_assert(cond, msg)
|
||||
#endif
|
||||
|
||||
struct desktest_shell {
|
||||
struct wl_listener compositor_destroy_listener;
|
||||
struct weston_desktop *desktop;
|
||||
|
Loading…
Reference in New Issue
Block a user