Hi, Per our discussion in the bug report, I came up with the following patch: ======= PR101836: Add a new option -fstrict-flex-array[=n] Add the new option and use it in __builtin_object_size. Treat the trailing array of a structure as a flexible array member in a stricter way. The value of 'n' controls the level of strictness. 'n'=0 is the least strict, all trailing arrays of structures are treated as flexible array members; This is the default behavior of GCC without specify this option. 'n'=3 is the strictest, only when the trailing array is declared as a flexible array member per C99 standard onwards ([]), it is treated as a flexible array member; There are two more levels in between 0 and 3, which are provided to support older codes that use GCC zero-length array extension ([0]), or one-size array as flexible array member ([1]): When 'n' is 1, the trailing array is treated as a flexible array member when it is declared as either [], [0], or [1]; When 'n' is 2, the trailing array is treated as a flexible array member when it is declared as either [], or [0]. There are other places in GCC that conservatively treat flexible array members. A follow-up patch will make -ftrict-flex-array option to control all these places consistently. Bootstrapped and regression tested on both X86 and aarch64, no issues. Any comment and suggestion? Okay for commit to Gcc13? thanks. Qing ======================= gcc/ PR tree-optimization/101836 * common.opt (fstrict-flex-array, fstrict-flex-array=): New options. * doc/invoke.texi (-fstrict-flex-array, -fstrict-flex-array=): Document. * tree-object-size.cc (addr_object_size): Call is_flexible_array_p to check whether an array is a flexible array. * tree.cc (special_array_member_type): New routine. (is_flexible_array_p): New routine. (component_ref_size): Call special_array_member_type to decide the type of special array member. * tree.h (enum struct special_array_member): Add is_vla, trail_flex. (special_array_member_type): New prototype. (is_flexible_array_p): New prototype. gcc/testsuite/ PR tree-optimization/101836 * gcc.dg/pr101836.c: New test. * gcc.dg/pr101836_1.c: New test. * gcc.dg/pr101836_2.c: New test. * gcc.dg/pr101836_3.c: New test. * gcc.dg/pr101836_4.c: New test. * gcc.dg/pr101836_5.c: New test. The complete patch is: