Re: git: d5c01e1124ff - main - cdefs.h: Remove pre gcc 5.0 support
Date: Mon, 24 Jun 2024 15:24:05 UTC
I do welcome the cleanup, of course, just I would have defined GCC 4.2 as the breaking point instead of 5.0. Due basically to the licensing issues, GCC 4.2 became a natural reference for GCC versions. At some point there were vendors actually shipping FreeBSD with GCC 4.2, and it was not a huge cost to keep GCC versions above 4.2 properly discriminated. But then you are right that it doesn't really matter that much. At least the alloc_size attributes are only defined for the FORTIFY_SOURCE in some linux libc implementation that I looked at. We define them unconditionally but I don't recall them being useful. Just my $0.02. Pedro. On Sunday, June 23, 2024 at 06:45:42 PM GMT-5, Warner Losh <imp@bsdimp.com> wrote: Indeed. But none of the ones that I removed are affected by this quirk since they are true for clang all versions. Warner On Sat, Jun 22, 2024 at 12:47 PM Pedro Giffuni <pfg@freebsd.org> wrote: It was long ago when I last touched this but FWIW ... clang used to report itself as GCC 4.2 and kept it's GCC extension support level consistent with that version so these version numbers were relevant. Pedro. On Thursday, June 20, 2024 at 09:41:34 PM GMT-5, Warner Losh <imp@freebsd.org> wrote: The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=d5c01e1124ffa4adb2513e7e8d708d7072dbfc75 commit d5c01e1124ffa4adb2513e7e8d708d7072dbfc75 Author: Warner Losh <imp@FreeBSD.org> AuthorDate: 2024-06-20 23:03:15 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2024-06-21 02:41:09 +0000 cdefs.h: Remove pre gcc 5.0 support Reviewed by: brooks Differential Revision: https://reviews.freebsd.org/D45656 Sponsored by: Netflix --- sys/sys/cdefs.h | 54 ------------------------------------------------------ 1 file changed, 54 deletions(-) diff --git a/sys/sys/cdefs.h b/sys/sys/cdefs.h index a6ecdca5d8b9..43d179b82020 100644 --- a/sys/sys/cdefs.h +++ b/sys/sys/cdefs.h @@ -164,18 +164,9 @@ #define __aligned(x) __attribute__((__aligned__(x))) #define __section(x) __attribute__((__section__(x))) #define __writeonly __unused -#if __GNUC_PREREQ__(4, 3) || __has_attribute(__alloc_size__) #define __alloc_size(x) __attribute__((__alloc_size__(x))) #define __alloc_size2(n, x) __attribute__((__alloc_size__(n, x))) -#else -#define __alloc_size(x) -#define __alloc_size2(n, x) -#endif -#if __GNUC_PREREQ__(4, 9) || __has_attribute(__alloc_align__) #define __alloc_align(x) __attribute__((__alloc_align__(x))) -#else -#define __alloc_align(x) -#endif /* * Keywords added in C11. @@ -199,15 +190,6 @@ #define _Alignof(x) __alignof(x) #endif -#if !defined(__cplusplus) && !__has_extension(c_atomic) && \ - !__has_extension(cxx_atomic) && !__GNUC_PREREQ__(4, 7) -/* - * No native support for _Atomic(). Place object in structure to prevent - * most forms of direct non-atomic access. - */ -#define _Atomic(T) struct { T volatile __val; } -#endif - #if defined(__cplusplus) && __cplusplus >= 201103L #define _Noreturn [[noreturn]] #else @@ -218,15 +200,6 @@ #if (defined(__cplusplus) && __cplusplus >= 201103L) || \ __has_extension(cxx_static_assert) #define _Static_assert(x, y) static_assert(x, y) -#elif __GNUC_PREREQ__(4,6) && !defined(__cplusplus) -/* Nothing, gcc 4.6 and higher has _Static_assert built-in */ -#elif defined(__COUNTER__) -#define _Static_assert(x, y) __Static_assert(x, __COUNTER__) -#define __Static_assert(x, y) ___Static_assert(x, y) -#define ___Static_assert(x, y) typedef char __assert_ ## y[(x) ? 1 : -1] \ - __unused -#else -#define _Static_assert(x, y) struct __hack #endif #endif @@ -276,7 +249,6 @@ * void bar(int myArray[__min_size(10)]); */ #if !defined(__cplusplus) && \ - (defined(__clang__) || __GNUC_PREREQ__(4, 6)) && \ (!defined(__STDC_VERSION__) || (__STDC_VERSION__ >= 199901)) #define __min_size(x) static (x) #else @@ -302,17 +274,9 @@ #define __result_use_or_ignore_check #endif /* !__clang__ */ -#if __GNUC_PREREQ__(4, 1) #define __returns_twice __attribute__((__returns_twice__)) -#else -#define __returns_twice -#endif -#if __GNUC_PREREQ__(4, 6) || __has_builtin(__builtin_unreachable) #define __unreachable() __builtin_unreachable() -#else -#define __unreachable() ((void)0) -#endif #if !defined(__STRICT_ANSI__) || __STDC_VERSION__ >= 199901 #define __LONG_LONG_SUPPORTED @@ -353,33 +317,15 @@ #define __predict_true(exp) __builtin_expect((exp), 1) #define __predict_false(exp) __builtin_expect((exp), 0) -#if __GNUC_PREREQ__(4, 0) #define __null_sentinel __attribute__((__sentinel__)) #define __exported __attribute__((__visibility__("default"))) #define __hidden __attribute__((__visibility__("hidden"))) -#else -#define __null_sentinel -#define __exported -#define __hidden -#endif /* * We define this here since <stddef.h>, <sys/queue.h>, and <sys/types.h> * require it. */ -#if __GNUC_PREREQ__(4, 1) #define __offsetof(type, field) __builtin_offsetof(type, field) -#else -#ifndef __cplusplus -#define __offsetof(type, field) \ - ((__size_t)(__uintptr_t)((const volatile void *)&((type *)0)->field)) -#else -#define __offsetof(type, field) \ - (__offsetof__ (reinterpret_cast <__size_t> \ - (&reinterpret_cast <const volatile char &> \ - (static_cast<type *> (0)->field)))) -#endif -#endif #define __rangeof(type, start, end) \ (__offsetof(type, end) - __offsetof(type, start))