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:
@@ -47,10 +47,6 @@
|
|||||||
#define DEFAULT_NUM_WORKSPACES 1
|
#define DEFAULT_NUM_WORKSPACES 1
|
||||||
#define DEFAULT_WORKSPACE_CHANGE_ANIMATION_LENGTH 200
|
#define DEFAULT_WORKSPACE_CHANGE_ANIMATION_LENGTH 200
|
||||||
|
|
||||||
#ifndef static_assert
|
|
||||||
#define static_assert(cond, msg)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct focus_state {
|
struct focus_state {
|
||||||
struct desktop_shell *shell;
|
struct desktop_shell *shell;
|
||||||
struct weston_seat *seat;
|
struct weston_seat *seat;
|
||||||
|
|||||||
@@ -100,6 +100,40 @@ extern "C" {
|
|||||||
(type *)( (char *)__mptr - offsetof(type,member) );})
|
(type *)( (char *)__mptr - offsetof(type,member) );})
|
||||||
#endif
|
#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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -41,10 +41,6 @@
|
|||||||
#include "shared/helpers.h"
|
#include "shared/helpers.h"
|
||||||
#include "libweston-desktop/libweston-desktop.h"
|
#include "libweston-desktop/libweston-desktop.h"
|
||||||
|
|
||||||
#ifndef static_assert
|
|
||||||
#define static_assert(cond, msg)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct desktest_shell {
|
struct desktest_shell {
|
||||||
struct wl_listener compositor_destroy_listener;
|
struct wl_listener compositor_destroy_listener;
|
||||||
struct weston_desktop *desktop;
|
struct weston_desktop *desktop;
|
||||||
|
|||||||
Reference in New Issue
Block a user