Implement a solution for PR middle-end/10138 and PR middle-end/95136.
authorMartin Sebor <msebor@redhat.com>
Thu, 4 Jun 2020 22:06:10 +0000 (16:06 -0600)
committerMartin Sebor <msebor@redhat.com>
Thu, 4 Jun 2020 22:08:32 +0000 (16:08 -0600)
commitb825a22890740f341eae566af27e18e528cd29a7
treeb614b6b24e6395784b9eb80af79352ce9bca555f
parent2cbc99d18dc411ac3fdef94e22ce86859806e63c
Implement a solution for PR middle-end/10138 and PR middle-end/95136.

PR middle-end/10138 - warn for uninitialized arrays passed as const arguments
PR middle-end/95136 - missing -Wuninitialized on an array access with a variable offset

gcc/c-family/ChangeLog:

PR middle-end/10138
PR middle-end/95136
* c-attribs.c (append_access_attrs): Handle attr_access::none.
(handle_access_attribute): Same.

gcc/ChangeLog:

PR middle-end/10138
PR middle-end/95136
* attribs.c (init_attr_rdwr_indices): Move function here.
* attribs.h (rdwr_access_hash, rdwr_map): Define.
(attr_access): Add 'none'.
(init_attr_rdwr_indices): Declared function.
* builtins.c (warn_for_access)): New function.
(check_access): Call it.
* builtins.h (checK-access): Add an optional argument.
* calls.c (rdwr_access_hash, rdwr_map): Move to attribs.h.
(init_attr_rdwr_indices): Declare extern.
(append_attrname): Handle attr_access::none.
(maybe_warn_rdwr_sizes): Same.
(initialize_argument_information): Update comments.
* doc/extend.texi (attribute access): Document 'none'.
* tree-ssa-uninit.c (struct wlimits): New.
(maybe_warn_operand): New function.
(maybe_warn_pass_by_reference): Same.
(warn_uninitialized_vars): Refactor code into maybe_warn_operand.
Also call for function calls.
(pass_late_warn_uninitialized::execute): Adjust comments.
(execute_early_warn_uninitialized): Same.

gcc/testsuite/ChangeLog:

PR middle-end/10138
PR middle-end/95136
* c-c++-common/Wsizeof-pointer-memaccess1.c: Prune out valid
Wuninitialized.
* c-c++-common/uninit-pr51010.c: Adjust expected warning format.
* c-c++-common/goacc/uninit-dim-clause.c: Same.
* c-c++-common/goacc/uninit-firstprivate-clause.c: Same.
* c-c++-common/goacc/uninit-if-clause.c: Same.
* c-c++-common/gomp/pr70550-1.c: Same.
* c-c++-common/gomp/pr70550-2.c: Adjust.
* g++.dg/20090107-1.C: Same.
* g++.dg/20090121-1.C: Same.
* g++.dg/ext/attr-access.C: Avoid -Wuninitialized.
* gcc.dg/tree-ssa/forwprop-6.c: Prune out -Wuninitialized.
* gcc.dg/Warray-bounds-52.c: Prune out valid -Wuninitialized.
* gcc.dg/Warray-bounds-53.c: Same.
* gcc.dg/Warray-bounds-54.c: Same.
* gcc.dg/Wstringop-overflow-33.c: New test.
* gcc.dg/attr-access-none.c: New test.
* gcc.dg/attr-access-read-only.c: Adjust.
* gcc.dg/attr-access-read-write.c: Same.
* gcc.dg/attr-access-write-only.c: Same.
* gcc.dg/pr71581.c: Adjust text of expected warning.
* gcc.dg/uninit-15.c: Same.
* gcc.dg/uninit-32.c: New test.
* gcc.dg/uninit-33.c: New test.
* gcc.dg/uninit-34.c: New test.
* gcc.dg/uninit-36.c: New test.
* gcc.dg/uninit-B-O0.c: Adjust text of expected warning.
* gcc.dg/uninit-I-O0.c: Same.
* gcc.dg/uninit-pr19430-O0.c: Same.
* gcc.dg/uninit-pr19430.c: Same.
* gcc.dg/uninit-pr95136.c: New test.
* gfortran.dg/assignment_4.f90: Expect -Wuninitialized.
* gfortran.dg/goacc/uninit-dim-clause.f95: Adjust text of expected
warning.
* gfortran.dg/goacc/uninit-firstprivate-clause.f95
* gfortran.dg/goacc/uninit-if-clause.f95
* gfortran.dg/pr66545_2.f90
43 files changed:
gcc/attribs.c
gcc/attribs.h
gcc/builtins.c
gcc/builtins.h
gcc/c-family/c-attribs.c
gcc/calls.c
gcc/doc/extend.texi
gcc/testsuite/c-c++-common/Wsizeof-pointer-memaccess1.c
gcc/testsuite/c-c++-common/goacc/uninit-dim-clause.c
gcc/testsuite/c-c++-common/goacc/uninit-firstprivate-clause.c
gcc/testsuite/c-c++-common/goacc/uninit-if-clause.c
gcc/testsuite/c-c++-common/gomp/pr70550-1.c
gcc/testsuite/c-c++-common/gomp/pr70550-2.c
gcc/testsuite/c-c++-common/uninit-pr51010.c
gcc/testsuite/g++.dg/20090107-1.C
gcc/testsuite/g++.dg/20090121-1.C
gcc/testsuite/g++.dg/ext/attr-access.C
gcc/testsuite/gcc.dg/Warray-bounds-52.c
gcc/testsuite/gcc.dg/Warray-bounds-53.c
gcc/testsuite/gcc.dg/Warray-bounds-54.c
gcc/testsuite/gcc.dg/Wstringop-overflow-33.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/attr-access-none.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/attr-access-read-only.c
gcc/testsuite/gcc.dg/attr-access-read-write.c
gcc/testsuite/gcc.dg/attr-access-write-only.c
gcc/testsuite/gcc.dg/pr71581.c
gcc/testsuite/gcc.dg/tree-ssa/forwprop-6.c
gcc/testsuite/gcc.dg/uninit-15.c
gcc/testsuite/gcc.dg/uninit-32.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/uninit-33.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/uninit-34.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/uninit-36.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/uninit-B-O0.c
gcc/testsuite/gcc.dg/uninit-I-O0.c
gcc/testsuite/gcc.dg/uninit-pr19430-O0.c
gcc/testsuite/gcc.dg/uninit-pr19430.c
gcc/testsuite/gcc.dg/uninit-pr95136.c [new file with mode: 0644]
gcc/testsuite/gfortran.dg/assignment_4.f90
gcc/testsuite/gfortran.dg/goacc/uninit-dim-clause.f95
gcc/testsuite/gfortran.dg/goacc/uninit-firstprivate-clause.f95
gcc/testsuite/gfortran.dg/goacc/uninit-if-clause.f95
gcc/testsuite/gfortran.dg/pr66545_2.f90
gcc/tree-ssa-uninit.c