https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117178

--- Comment #32 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:1301e18f69ced6a14a7648a24d1eb3addd836b6c

commit r15-7921-g1301e18f69ced6a14a7648a24d1eb3addd836b6c
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Mon Mar 10 09:31:41 2025 +0100

    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  <ja...@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.

Reply via email to