/* SPDX-License-Identifier: GPL-2.0-only OR MIT */ /* Copyright (c) 2026 Imagination Technologies Ltd. */ #ifndef PVR_CHECK_H #define PVR_CHECK_H #include #include #include #define OFFSET_CHECK(type, member, offset) \ static_assert(offsetof(type, member) == (offset), \ "offsetof(" #type ", " #member ") incorrect") #define SIZE_CHECK(type, size) \ static_assert(sizeof(type) == (size), #type " is incorrect size") #define ALIGN_CHECK(type, align) \ static_assert(__alignof__(type) <= (align), #type " has incorrect alignment") /* * Where the last member of a struct is a flexible array member, using * SIZE_CHECK() is pointless. If the structure is not already padded to * alignment without the flexible array member, sizeof() will not match the * offset of the flexible array member and the "correct" sizeof() value is * completely meaningless. * * In those instances, use FLEX_ARRAY_CHECK() instead to assert that the final * field is a flexible array member and that it behaves as expected. */ #define FLEX_ARRAY_CHECK(type, member) \ static_assert(flex_array_size((type *)NULL, member, 1) == \ sizeof_field(type, member[0]), \ #type "->" #member " is incorrect size") #endif /* PVR_CHECK_H */