On Wed, Jan 21, 2015 at 10:02:07AM +0100, Matthias Klose wrote: > __objc_get_forward_imp and get_imp were exported in libobjc since GCC 4.1, for > some reason these are not exported anymore in GCC 5 (both declared inline). > So > either export these as before, or don't export them and bump the soname. The > latter seems to be unwanted, and at least gnustep-base is using the get_imp > function. So better keep the references in GCC 5? > > Is this an intended change in GCC 5 to not to export inline methods anymore?
This will make the code require -std=c99 or later, it will fail to export the functions with -std=gnu89. Wouldn't it be better to just add extern IMP __objc_get_forward_imp (id, SEL); extern IMP get_imp (Class, SEL); prototypes before the inline function definitions (in some header, whatever)? That way it seems both -std=gnu89 and -std=gnu99 export those two functions as well as make them inline. > libobjc/ > > * sendmsg.c (__objc_get_forward_imp, get_imp): Declare extern inline. > > --- a/src/libobjc/sendmsg.c > +++ b/src/libobjc/sendmsg.c > @@ -105,7 +105,7 @@ > id nil_method (id, SEL); > > /* Given a selector, return the proper forwarding implementation. */ > -inline > +extern inline > IMP > __objc_get_forward_imp (id rcv, SEL sel) > { > @@ -320,7 +320,7 @@ > return res; > } > > -inline > +extern inline > IMP > get_imp (Class class, SEL sel) > { Jakub