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.
