https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111040
Bug ID: 111040
Summary: __builtin_object_size: inconsistent result for
subobject with member arrays.
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: qinzhao at gcc dot gnu.org
Target Milestone: ---
__bos produces different results for subobject with different optimizations:
#include <stddef.h>
#include <stdio.h>
#define noinline __attribute__((__noinline__))
struct fixed {
size_t foo;
char b;
char array[10];
} q = {};
static void noinline bar ()
{
struct fixed *p = &q;
printf("the__bdos of max p->array sub is %d \n",
__builtin_dynamic_object_size(p->array, 1));
return;
}
int main ()
{
bar ();
return 0;
}
when compiled with
/home/opc/Install/latest-d/bin/gcc -O -fstrict-flex-arrays=3 t.c
./a.out
the__bdos of max p->array sub is 10
when compiled with (disable the early object size pass):
/home/opc/Install/latest-d/bin/gcc -O -fstrict-flex-arrays=3
-fdisable-tree-early_objsz t.c
./a.out
the__bdos of max p->array sub is 15
I assume that the correct result for __builtin_dynamic_object_size(p->array, 1)
should be 10.