On Mon, Mar 10, 2014 at 11:10:05AM +0100, Uros Bizjak wrote:
> > Well, better is non-obvious, while it is smaller (which is good for
> > initialization and thus rarely executed code), the common case is that
> > *jcr_list is 0 (gcj is used rarely these days) and for the common case it is
> > one instruction longer.
> > Perhaps at least use if (__builtin_expect (*jcr_list != NULL, 0))?
> > Otherwise looks good to me.
> 
> Following source:
> 
> void frame_dummy (void)
> {
>   void **jcr_list = __JCR_LIST__;
>   if (__builtin_expect (*jcr_list != 0, 0))
>     register_classes (jcr_list);
> }
> 
> generates exactly the same code while avoiding the warning. So,
> following your concern, I am testing following patch:

But then the asm is gone and it can start to break any time soon.
For GCC __JCR_LIST__ is simply a zero sized local array and thus
dereferencing it's first element is invalid.  It doesn't know that we use
linker magic to populate the array.

        Jakub

Reply via email to