PR middle-end/83859 - attributes to associate pointer arguments and sizes
authorMartin Sebor <msebor@redhat.com>
Fri, 22 Nov 2019 17:14:17 +0000 (17:14 +0000)
committerMartin Sebor <msebor@gcc.gnu.org>
Fri, 22 Nov 2019 17:14:17 +0000 (10:14 -0700)
commit54aa6b58fe2fe73bbe67e0485777e0c410a18673
tree11281ae8b5d5a5f2a57ffc60d7d8cfe951a953d8
parentb5338fb359ea3480d6ed37bbc52fe2df49b82fb9
PR middle-end/83859 - attributes to associate pointer arguments and sizes

gcc/ChangeLog:

PR middle-end/83859
* attribs.h (struct attr_access): New.
* attribs.c (decl_attributes): Add an informational note.
* builtins.c (check_access): Make extern.  Consistently set no-warning
after issuing a warning.  Handle calls through function pointers.  Set
no-warning.
* builtins.h (check_access): Declare.
* calls.c (rdwr_access_hash): New type.
(rdwr_map): Same.
(init_attr_rdwr_indices): New function.
(maybe_warn_rdwr_sizes): Same.
(initialize_argument_information): Call init_attr_rdwr_indices.
Call maybe_warn_rdwr_sizes.
(get_size_range): Avoid null argument.
* doc/extend.texi (attribute access): Document new attribute.

gcc/c-family/ChangeLog:

PR middle-end/83859
* c-attribs.c (handle_access_attribute): New function.
(c_common_attribute_table): Add new attribute.
(get_argument_type): New function.
(append_access_attrs): New function.
(get_nonnull_operand): Rename...
(get_attribute_operand): ...to this.
* c-common.c (get_nonnull_operand): Rename...
(get_attribute_operand): ...to this.

gcc/testsuite/ChangeLog:

PR middle-end/83859
* c-c++-common/attr-nonstring-8.c: Adjust text of expected warning.
* gcc.dg/Wstringop-overflow-23.c: New test.
* gcc.dg/Wstringop-overflow-24.c: New test.
* gcc.dg/attr-access-read-only.c: New test.
* gcc.dg/attr-access-read-write.c: New test.
* gcc.dg/attr-access-read-write-2.c: New test.
* gcc.dg/attr-access-write-only.c: New test.

From-SVN: r278624
19 files changed:
gcc/ChangeLog
gcc/attribs.c
gcc/attribs.h
gcc/builtins.c
gcc/builtins.h
gcc/c-family/ChangeLog
gcc/c-family/c-attribs.c
gcc/c-family/c-common.c
gcc/c-family/c-common.h
gcc/calls.c
gcc/doc/extend.texi
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/attr-nonstring-8.c
gcc/testsuite/gcc.dg/Wstringop-overflow-23.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/Wstringop-overflow-24.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/attr-access-read-only.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/attr-access-read-write-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/attr-access-read-write.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/attr-access-write-only.c [new file with mode: 0644]