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

--- Comment #5 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Martin Uecker <[email protected]>:

https://gcc.gnu.org/g:c4fe97077571e1831186a9a8a2fbb47cd8914269

commit r16-8261-gc4fe97077571e1831186a9a8a2fbb47cd8914269
Author: Martin Uecker <[email protected]>
Date:   Sat Mar 7 16:28:00 2026 +0100

    c: Mark derived types variably-modified after struct/union completion
[PR123424]

    When structure types are completed and are variably-modified, we
    need to make sure that C_TYPE_VARIABLY_MODIFIED is updated also
    for derived types.  For derived types which are not updated and
    remain TYPE_STRUCTURAL_EQUALITY_P, we do recursion when checking
    the bit instead.  This change then fixes also a weird corner
    case when forming composite types of mutually recursively
    defined types.

    We do not update other structure or union type that end up
    with variably modified pointers, as it is not clear this is
    needed and also needs further analysis.

            PR c/123424

    gcc/c/ChangeLog:
            * c-decl.cc (c_update_variably_modified): New function.
            (finish_struct): Call c_update_variably_modified.
            * c-tree.h (c_variably_modified_p): Recurse if necessary.
            * c-typeck.cc (c_verify_type): Update.
            (c_set_type_bits): Use c_variably_modified_p.
            (mark_decl_used): Dito.
            (build_function_call_vec): Dito.
            (c_build_qualified_type): Dito.
            * c-objc-common.cc (c_var_p): Dito.

    gcc/testsuite/ChangeLog:
            * gcc.dg/gnu23-tag-composite-7.c: New test.
            * gcc.dg/gnu23-varmod-3.c: New test.
            * gcc.dg/pr123424.c: New test.

Reply via email to