Add support for GCC's null_terminated_string_arg function attribute

This is new as of 14.1.
diff --git a/docs/markdown/Reference-tables.md b/docs/markdown/Reference-tables.md
index d30d22a..2357ff4 100644
--- a/docs/markdown/Reference-tables.md
+++ b/docs/markdown/Reference-tables.md
@@ -272,54 +272,55 @@
 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.
@@ -335,6 +336,8 @@
 
 ⁶ *New in 1.1.0*
 
+⁷ *New in 1.5.0*
+
 ### MSVC __declspec
 
 These values are supported using the MSVC style `__declspec` annotation,
diff --git a/docs/markdown/snippets/null_terminated_string_arg.md b/docs/markdown/snippets/null_terminated_string_arg.md
new file mode 100644
index 0000000..2ba1755
--- /dev/null
+++ b/docs/markdown/snippets/null_terminated_string_arg.md
@@ -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
+```
diff --git a/mesonbuild/compilers/c_function_attributes.py b/mesonbuild/compilers/c_function_attributes.py
index eec872b..a7258a1 100644
--- a/mesonbuild/compilers/c_function_attributes.py
+++ b/mesonbuild/compilers/c_function_attributes.py
@@ -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':
diff --git a/test cases/common/197 function attributes/meson.build b/test cases/common/197 function attributes/meson.build
index 530db93..db7e3af 100644
--- a/test cases/common/197 function attributes/meson.build
+++ b/test cases/common/197 function attributes/meson.build
@@ -117,6 +117,12 @@
   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)