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

Reply via email to