On Sun, Mar 9, 2014 at 6:57 AM, Uros Bizjak <ubiz...@gmail.com> wrote: > On Fri, Mar 7, 2014 at 8:03 PM, Ian Lance Taylor <i...@google.com> wrote: > >>> Attached patch avoids a bunch of: >>> >>> ../../../gcc-svn/trunk/libgcc/crtstuff.c: In function 'frame_dummy': >>> ../../../gcc-svn/trunk/libgcc/crtstuff.c:463:19: warning: array >>> subscript is above array bounds [-Warray-bounds] >>> if (__JCR_LIST__[0]) >>> ^ >>> >>> when compiling libgcc. >>> >>> 2014-03-08 Uros Bizjak <ubiz...@gmail.com> >>> >>> * crtstuff.c (__JCR_LIST__): Declare as zero-length array. >>> >> >> I don't understand why this works. You can't index element 0 of a 0 >> element array. >> >> This code is relying on linker magic and it's not surprising that it >> confuses the compiler. Can you use a type cast or variable assignment >> in frame_dummy instead? > > I was not able to cast variable with any sensible type cast (maybe I > didn't understand your suggestion correctly), the only other variant > that avoided warning was > > --cut here-- > Index: crtstuff.c > =================================================================== > --- crtstuff.c (revision 208403) > +++ crtstuff.c (working copy) > @@ -259,7 +259,7 @@ > so we can register them properly. */ > STATIC void *__JCR_LIST__[] > __attribute__ ((used, section(JCR_SECTION_NAME), aligned(sizeof(void*)))) > - = { }; > + = { 0 }; > #endif /* JCR_SECTION_NAME */ > > #if USE_TM_CLONE_REGISTRY > --cut here-- > > but I don't know if this is correct approach, concerning mentioned linker > magic.
As you guess, that likely won't work, because it will introduce a NULL pointer into the array. Ian