On Fri, 2020-02-14 at 15:41 -0700, Martin Sebor wrote:
> Because attribute weakref introduces a kind of a definition, it can
> only be applied to declarations of symbols that are not defined.  GCC
> normally issues a warning when the attribute is applied to a defined
> symbol, but PR 92799 shows that it misses some cases on which it then
> leads to an ICE.
> 
> The ICE was introduced in GCC 4.5.  Prior to then, GCC accepted such
> invalid definitions and silently dropped the weakref attribute.
> 
> The attached patch avoids the ICE while again dropping the invalid
> attribute from the definition, except with the (now) usual warning.
> 
> Tested on x86_64-linux.
> 
> I also looked for code bases that make use of attribute weakref to
> rebuild them as another test but couldn't find any.  (There are
> a couple of instances in the Linux kernel but they look #ifdef'd
> out).  Does anyone know of any that do use it that I could try to
> build on Linux?
So you added this check

... || DECL_INITIAL (decl) != error_mark_node

Do you need to check that DECL_INITIAL is not NULL?  IIUC DECL_INITIAL in this
context is a tri-state.

NULL -- DECL is not a function definition
error_mark_node -- it was a function definition, but the body was free'd
everything else -- the function definition

Jeff
> 

Reply via email to