]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fundamental: declare flex array updated for gcc15 and clang 19
authorCristian Rodríguez <cristian@rodriguez.im>
Thu, 13 Jun 2024 15:59:28 +0000 (11:59 -0400)
committerLuca Boccassi <luca.boccassi@gmail.com>
Fri, 14 Jun 2024 20:13:28 +0000 (21:13 +0100)
Silly workaround that:
- allowed flexible arrays in unions
- allowed flexible arrays in otherwise empty structs

Is no longer needed since https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=adb1c8a0f167c3a1f7593d75f5a10eb07a5d741a
(GCC15) or clang 19 https://github.com/llvm/llvm-project/commit/14ba782a87e16e9e15460a51f50e67e2744c26d9

src/fundamental/macro-fundamental.h

index 5ccbda518602089a9998bf5e745e4f7a446e9e63..8aca5f784ae1e9a38bee9f9435a296560072036b 100644 (file)
@@ -517,6 +517,10 @@ static inline uint64_t ALIGN_OFFSET_U64(uint64_t l, uint64_t ali) {
                 }                                                       \
         }
 
+/* Restriction/bug (see above) was fixed in GCC 15 and clang 19.*/
+#if __GNUC__ >= 15 || (defined(__clang__) && __clang_major__ >= 19)
+#define DECLARE_FLEX_ARRAY(type, name) type name[];
+#else
 /* Declare a flexible array usable in a union.
  * This is essentially a work-around for a pointless constraint in C99
  * and might go away in some future version of the standard.
@@ -528,6 +532,7 @@ static inline uint64_t ALIGN_OFFSET_U64(uint64_t l, uint64_t ali) {
                 dummy_t __empty__ ## name;             \
                 type name[];                           \
         }
+#endif
 
 /* Declares an ELF read-only string section that does not occupy memory at runtime. */
 #define DECLARE_NOALLOC_SECTION(name, text)   \