extern void abort (void); struct S { int len; char s[0]; }; int main() { char buf[sizeof (struct S) + 32]; if (__builtin_object_size (((struct S *)&buf[0])->s, 1) != 32) abort (); return 0; }
I have a patch.
Author: rguenth Date: Wed Oct 12 13:19:34 2011 New Revision: 179850 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=179850 Log: 2011-10-12 Richard Guenther <rguenther@suse.de> PR tree-optimization/50700 * tree-object-size.c (addr_object_size): Simplify and treat MEM_REF bases consistently. * gcc.dg/builtin-object-size-12.c: New testcase. Added: trunk/gcc/testsuite/gcc.dg/builtin-object-size-12.c Modified: trunk/gcc/ChangeLog trunk/gcc/testsuite/ChangeLog trunk/gcc/tree-object-size.c
Author: rguenth Date: Wed Oct 12 13:22:12 2011 New Revision: 179851 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=179851 Log: 2011-10-12 Richard Guenther <rguenther@suse.de> PR tree-optimization/50700 * tree-object-size.c (addr_object_size): Simplify and treat MEM_REF bases consistently. * gcc.dg/builtin-object-size-12.c: New testcase. Added: branches/gcc-4_6-branch/gcc/testsuite/gcc.dg/builtin-object-size-12.c Modified: branches/gcc-4_6-branch/gcc/ChangeLog branches/gcc-4_6-branch/gcc/testsuite/ChangeLog branches/gcc-4_6-branch/gcc/tree-object-size.c
Fixed.