[clang] [Clang][Docs] Documented sentinel attribute (PR #196088)
Erich Keane via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 22 08:00:03 PDT 2026
================
@@ -10055,3 +10055,65 @@ different languages to coexist on the same call stack while each interpreting
exceptions according to their own rules.
}];
}
+
+def SentinelDocs : Documentation {
+ let Category = DocCatFunction;
+ let Content = [{
+The ``sentinel`` attribute can be applied to variadic functions and pointers to
+variadic functions, to diagnose each function call that does not pass a
+sentinel value (a null pointer constant) as the last argument to the function
+call. The attribute accepts two optional arguments: the first argument is the
+position of the expected sentinel value, starting from the last parameter. The
+second argument describes whether the last fixed parameter is treated as a
+valid sentinel value when set to '1'.
+All arguments described above defaults to '0' when elided.
+The attribute is also supported with blocks and in Objective-C.
+
+.. code-block:: c
+
+ void foo(const char*, ...) __attribute__((sentinel));
+ void bar(int, ...) __attribute__((sentinel(1)));
+ void baz(const char*, const char*, ...) __attribute__((sentinel(0, 1)));
+
+ void example() {
+ foo("Example", (void*)0);
+ foo("Another", "example", NULL);
+ foo("Missing", "sentinel"); // Not OK
+
+ bar(1, 2, NULL, 3); // OK: sentinel value at the 2nd to last positon
----------------
erichkeane wrote:
```suggestion
bar(1, 2, NULL, 3); // OK: sentinel value at the 2nd to last position
```
https://github.com/llvm/llvm-project/pull/196088
More information about the cfe-commits
mailing list