llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Tony Guillot (to268) <details> <summary>Changes</summary> The documentation of the sentinel attribute was missing, this PR documents the behavior of the sentinel attribute. --- Full diff: https://github.com/llvm/llvm-project/pull/196088.diff 2 Files Affected: - (modified) clang/include/clang/Basic/Attr.td (+1-1) - (modified) clang/include/clang/Basic/AttrDocs.td (+28) ``````````diff diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 04b7f420e1b32..3eeb58efa7e3b 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -3415,7 +3415,7 @@ def Sentinel : InheritableAttr { let Args = [DefaultIntArgument<"Sentinel", 0>, DefaultIntArgument<"NullPos", 0>]; // let Subjects = SubjectList<[Function, ObjCMethod, Block, Var]>; - let Documentation = [Undocumented]; + let Documentation = [SentinelDocs]; } def StdCall : DeclOrTypeAttr { diff --git a/clang/include/clang/Basic/AttrDocs.td b/clang/include/clang/Basic/AttrDocs.td index 67aef81dd3a81..d10b9539999e1 100644 --- a/clang/include/clang/Basic/AttrDocs.td +++ b/clang/include/clang/Basic/AttrDocs.td @@ -10000,3 +10000,31 @@ 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 only be applied to variadic functions to +diagnose each function call that do not pass a sentinel value at the end of the +argument list. It checks if a null pointer constant exists at the end of the +argument list by default, or at the (N+1)th position starting from the end when +an argument is provided. + +.. code-block:: c + + #include <stddef.h> + + void foo(const char*, ...) __attribute__((sentinel)); + void bar(int, ...) __attribute__((sentinel(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 + bar(1, 2, 3, nullptr, 4); // OK: `nullptr` is valid in C23 + bar(1, 2, 3, 4, NULL); // Not OK + } + }]; +} `````````` </details> https://github.com/llvm/llvm-project/pull/196088 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
