add_project_arguments('-Werror=shadow', language : 'c')
endif
-have = cc.compiles(
- '__attribute__((__retain__)) int x;',
- args : '-Werror=attributes',
- name : '__attribute__((__retain__))')
-conf.set10('HAVE_ATTRIBUTE_RETAIN', have)
-
if cxx_cmd != ''
add_project_arguments(cxx.get_supported_arguments(basic_disabled_warnings), language : 'cpp')
endif
have = cc.has_argument('-Wzero-as-null-pointer-constant')
conf.set10('HAVE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT', have)
+possible_c_attributes = [
+ 'alloc_size',
+ 'fallthrough',
+ 'retain',
+]
+
+foreach attr : possible_c_attributes
+ have = cc.has_function_attribute(attr)
+ conf.set10('HAVE_ATTRIBUTE_' + attr.to_upper(), have)
+endforeach
+
#####################################################################
# compilation result tests
efi_conf = configuration_data()
# import several configs from userspace
-foreach name : ['HAVE_ATTRIBUTE_RETAIN',
- 'HAVE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT',
- 'HAVE_WARNING_ZERO_LENGTH_BOUNDS',
- ]
+foreach name : ['HAVE_WARNING_ZERO_LENGTH_BOUNDS',
+ 'HAVE_WARNING_ZERO_AS_NULL_POINTER_CONSTANT']
+ efi_conf.set(name, conf.get(name))
+endforeach
+
+foreach attr : possible_c_attributes
+ name = 'HAVE_ATTRIBUTE_' + attr.to_upper()
efi_conf.set(name, conf.get(name))
endforeach
#define _weak_ __attribute__((__weak__))
#define _weakref_(x) __attribute__((__weakref__(#x)))
-#if HAVE_ATTRIBUTE_RETAIN
-# define _retain_ __attribute__((__retain__))
+#if HAVE_ATTRIBUTE_ALLOC_SIZE
+# define _alloc_(...) __attribute__((__alloc_size__(__VA_ARGS__)))
#else
-# define _retain_
+# define _alloc_(...)
#endif
-#ifdef __clang__
-# define _alloc_(...)
+#if HAVE_ATTRIBUTE_FALLTHROUGH
+# define _fallthrough_ __attribute__((__fallthrough__))
#else
-# define _alloc_(...) __attribute__((__alloc_size__(__VA_ARGS__)))
+# define _fallthrough_
#endif
-#if defined(__clang__) && __clang_major__ < 10
-# define _fallthrough_
+#if HAVE_ATTRIBUTE_RETAIN
+# define _retain_ __attribute__((__retain__))
#else
-# define _fallthrough_ __attribute__((__fallthrough__))
+# define _retain_
#endif
#if __GNUC__ >= 15