================
@@ -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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits