diff options
author | Jakub Jelinek <jakub@redhat.com> | 2025-03-10 09:31:41 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2025-03-10 09:31:41 +0100 |
commit | 1301e18f69ced6a14a7648a24d1eb3addd836b6c (patch) | |
tree | 22b242703f4d778def4eafe575e8ef71f83fcc57 /libgcc | |
parent | 62a6a53766ba46ada1112472b71d4ea21411ea39 (diff) | |
download | gcc-1301e18f69ced6a14a7648a24d1eb3addd836b6c.zip gcc-1301e18f69ced6a14a7648a24d1eb3addd836b6c.tar.gz gcc-1301e18f69ced6a14a7648a24d1eb3addd836b6c.tar.bz2 |
gimple-ssa-warn-access: Adjust maybe_warn_nonstring_arg for nonstring multidimensional arrays [PR117178]
The following patch fixes 4 xfails in attr-nonstring-11.c (and results in 2
false positive warnings in attr-nonstring-12.c not being produced either).
The thing is that maybe_warn_nonstring_arg simply assumed that nonstring
arrays must be single-dimensional, so when it sees a nonstring decl with
ARRAY_TYPE, it just used its dimension. With multi-dimensional arrays
that is not the right dimension to use though, it can be dimension of
some outer dimension, e.g. if we have
char a[5][6][7] __attribute__((nonstring)) if decl is
a[5] it would assume maximum non-NUL terminated string length of 5 rather than
7, if a[5][6] it would assume 6 and only for a[5][6][0] it would assume the
correct 7. So, the following patch looks through all the outer dimensions
to reach the innermost one (which for attribute nonstring is guaranteed to
have char/unsigned char/signed char element type).
2025-03-10 Jakub Jelinek <jakub@redhat.com>
PR c/117178
* gimple-ssa-warn-access.cc (maybe_warn_nonstring_arg): Look through
multi-dimensional array types, stop at the innermost ARRAY_TYPE.
* c-c++-common/attr-nonstring-11.c: Remove xfails.
* c-c++-common/attr-nonstring-12.c (warn_strcmp_cst_1,
warn_strcmp_cst_2): Don't expect any warnings here.
(warn_strcmp_cst_3, warn_strcmp_cst_4): New functions with expected
warnings.
Diffstat (limited to 'libgcc')
0 files changed, 0 insertions, 0 deletions