Hi, This patch fixes problem with size emitted for static structures with flexible array. I found a couple of trackers in guzilla for this problem but all of them are marked as fixed and problem still exists.
For a simple testcase struct S { int a; int b[0]; } s = { 1, { 0, 0} }; current trunk produces (no flags): .globl s .data .align 4 .type s, @object .size s, 4 s: .long 1 .long 0 .long 0 which has wrong size for object s. This problem is important for checker because wrong size leads to wrong bounds and false bounds violations. Following patch uses DECL_SIZE_UNIT instead of type size and works well for me. Does it look OK? Bootstrapped and tested on linux-x86_64. Thanks, Ilya -- gcc/ 2014-06-11 Ilya Enkovich <ilya.enkov...@intel.com> * config/elfos.h (ASM_DECLARE_OBJECT_NAME): Use decl size instead of type size. (ASM_FINISH_DECLARE_OBJECT): Likewise. diff --git a/gcc/config/elfos.h b/gcc/config/elfos.h index c1d5553..7929708 100644 --- a/gcc/config/elfos.h +++ b/gcc/config/elfos.h @@ -313,7 +313,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see && (DECL) && DECL_SIZE (DECL)) \ { \ size_directive_output = 1; \ - size = int_size_in_bytes (TREE_TYPE (DECL)); \ + size = tree_to_uhwi (DECL_SIZE_UNIT (DECL)); \ ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size); \ } \ \ @@ -341,7 +341,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see && !size_directive_output) \ { \ size_directive_output = 1; \ - size = int_size_in_bytes (TREE_TYPE (DECL)); \ + size = tree_to_uhwi (DECL_SIZE_UNIT (DECL)); \ ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size); \ } \ } \