On 08/06/2017 02:07 PM, Martin Sebor wrote:
> Part 2 of the series adds attribute nostring to annotate arrays
> of and pointers to char with that are intended to store sequences
> of characters that aren't necessarily valid (nul-terminated)
> strings. In the subsequent patch the attribute is relied on to
> avoid diagnosing strcncpy calls that truncate strings and create
> such copies. In the future I'd like to also use the attribute
> to diagnose when arrays or pointers with the attribute are passed
> to functions that expect nul-terminated strings (such as strlen
> or strcpy).
>
> Martin
>
>
> gcc-81117-2.diff
>
>
> PR c/81117 - Improve buffer overflow checking in strncpy
>
> gcc/ChangeLog:
>
> PR c/81117
> * builtin-attrs.def (attribute nonstring): New.
> * doc/extend.texi (attribute nonstring): Document new attribute.
>
> gcc/c-family/ChangeLog:
>
> PR c/81117
> * c-attribs.c (c_common_attribute_table): Add nonstring entry.
> (handle_nonstring_attribute): New function.
>
> gcc/testsuite/ChangeLog:
>
> PR c/81117
> * c-c++-common/attr-nonstring-1.c: New test.
>
> --- a/gcc/builtin-attrs.def
> +++ b/gcc/builtin-attrs.def
> @@ -93,6 +93,7 @@ DEF_ATTR_IDENT (ATTR_FORMAT, "format")
> DEF_ATTR_IDENT (ATTR_FORMAT_ARG, "format_arg")
> DEF_ATTR_IDENT (ATTR_MALLOC, "malloc")
> DEF_ATTR_IDENT (ATTR_NONNULL, "nonnull")
> +DEF_ATTR_IDENT (ATTR_NONSTRING, "nonstring")
> DEF_ATTR_IDENT (ATTR_NORETURN, "noreturn")
> DEF_ATTR_IDENT (ATTR_NOTHROW, "nothrow")
> DEF_ATTR_IDENT (ATTR_LEAF, "leaf")
So all the attributes here are associated with functions I believe.
You're defining a variable attribute. In fact, I'm not even sure that
variable attributes get a DEF_ATTR_<whatever>
> diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
> index b253ccc..1954ca5 100644
> --- a/gcc/doc/extend.texi
> +++ b/gcc/doc/extend.texi
> @@ -5835,6 +5835,30 @@ The @code{deprecated} attribute can also be used for
> functions and
> types (@pxref{Common Function Attributes},
> @pxref{Common Type Attributes}).
>
> +@item nonstring (@var{nonstring})
> +@cindex @code{nonstring} variable attribute
> +The @code{nonstring} variable attribute specifies that an object or member
> +declaration with type array of @code{char} or pointer to @code{char} is
> +intended to store character arrays that do not necessarily contain
> +a terminating @code{NUL} character. This is useful to avoid warnings
> +when such an array or pointer is used as an argument to a bounded string
> +manipulation function such as @code{strncpy}. For example, without the
> +attribute, GCC will issue a warning for the call below because it may
> +truncate the copy without appending the terminating NUL character. Using
> +the attribute makes it possible to suppress the warning.
[ ... ]
I think this is in the wrong section, I believe it belongs in the
"Variable Attributes" section.
Assuming you don't actually need the ATTR_NONSTRING, this patch is fine
with that hunk removed and the documentation moved into the right section.
jeff