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 >