Skip to content

Commit

Permalink
Add support for GCC's null_terminated_string_arg function attribute
Browse files Browse the repository at this point in the history
This is new as of 14.1.
  • Loading branch information
tristan957 committed May 7, 2024
1 parent a0ff145 commit c5ade13
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 48 deletions.
99 changes: 51 additions & 48 deletions docs/markdown/Reference-tables.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,54 +272,55 @@ These values are supported using the GCC style `__attribute__` annotations,
which are supported by GCC, Clang, and other compilers.


| Name |
|--------------------------|
| alias |
| aligned |
| alloc_size |
| always_inline |
| artificial |
| cold |
| const |
| constructor |
| constructor_priority |
| deprecated |
| destructor |
| error |
| externally_visible |
| fallthrough |
| flatten |
| format |
| format_arg |
| force_align_arg_pointer³ |
| gnu_inline |
| hot |
| ifunc |
| malloc |
| noclone |
| noinline |
| nonnull |
| noreturn |
| nothrow |
| optimize |
| packed |
| pure |
| retain⁴ |
| returns_nonnull |
| section⁵ |
| sentinel⁵ |
| unused |
| used |
| vector_size⁶ |
| visibility* |
| visibility:default|
| visibility:hidden|
| visibility:internal|
| visibility:protected|
| warning |
| warn_unused_result |
| weak |
| weakref |
| Name |
|-----------------------------|
| alias |
| aligned |
| alloc_size |
| always_inline |
| artificial |
| cold |
| const |
| constructor |
| constructor_priority |
| deprecated |
| destructor |
| error |
| externally_visible |
| fallthrough |
| flatten |
| format |
| format_arg |
| force_align_arg_pointer³ |
| gnu_inline |
| hot |
| ifunc |
| malloc |
| noclone |
| noinline |
| nonnull |
| noreturn |
| nothrow |
| null_terminated_string_arg⁷ |
| optimize |
| packed |
| pure |
| retain⁴ |
| returns_nonnull |
| section⁵ |
| sentinel⁵ |
| unused |
| used |
| vector_size⁶ |
| visibility* |
| visibility:default|
| visibility:hidden|
| visibility:internal|
| visibility:protected|
| warning |
| warn_unused_result |
| weak |
| weakref |

\* *Changed in 0.52.0* the "visibility" target no longer includes
"protected", which is not present in Apple's clang.
Expand All @@ -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,
Expand Down
13 changes: 13 additions & 0 deletions docs/markdown/snippets/null_terminated_string_arg.md
Original file line number Diff line number Diff line change
@@ -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
```
2 changes: 2 additions & 0 deletions mesonbuild/compilers/c_function_attributes.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@
'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':
Expand Down
6 changes: 6 additions & 0 deletions test cases/common/197 function attributes/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit c5ade13

Please sign in to comment.