Add support for GCC's null_terminated_string_arg function attribute

This is new as of 14.1.
This commit is contained in:
Tristan Partin 2024-05-07 14:51:40 -05:00 committed by Dylan Baker
parent 23eb7ba700
commit 8cb16b2d6a
4 changed files with 72 additions and 48 deletions

View File

@ -273,7 +273,7 @@ which are supported by GCC, Clang, and other compilers.
| Name |
|--------------------------|
|-----------------------------|
| alias |
| aligned |
| alloc_size |
@ -301,6 +301,7 @@ which are supported by GCC, Clang, and other compilers.
| nonnull |
| noreturn |
| nothrow |
| null_terminated_string_arg⁷ |
| optimize |
| packed |
| pure |
@ -335,6 +336,8 @@ which are supported by GCC, Clang, and other compilers.
⁶ *New in 1.1.0*
⁷ *New in 1.5.0*
### MSVC __declspec
These values are supported using the MSVC style `__declspec` annotation,

View File

@ -0,0 +1,13 @@
## Added support for GCC's `null_terminated_string_arg` function attribute
You can now check if a compiler support the `null_terminated_string_arg`
function attribute via the `has_function_attribute()` method on the
[[@compiler]] object.
```meson
cc = meson.get_compiler('c')
if cc.has_function_attribute('null_terminated_string_arg')
# We have it...
endif
```

View File

@ -80,6 +80,8 @@ C_FUNC_ATTRIBUTES = {
'int foo(void) __attribute__((noreturn));',
'nothrow':
'int foo(void) __attribute__((nothrow));',
'null_terminated_string_arg':
'int foo(const char * p) __attribute__((null_terminated_string_arg(1)));',
'optimize':
'__attribute__((optimize(3))) int foo(void) { return 0; }',
'packed':

View File

@ -117,6 +117,12 @@ if ['gcc', 'intel'].contains(c.get_id())
endif
endif
if c.get_id() == 'gcc'
if c.version().version_compare('>= 14.1')
attributes += 'null_terminated_string_arg'
endif
endif
if get_option('mode') == 'single'
foreach a : attributes
x = c.has_function_attribute(a)