http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38307
--- Comment #4 from rfm at gnu dot org 2011-03-16 12:43:39 UTC --- I just searched this old bug report up, and found that I'd missed seeing (or forgotten about) the latest response :-( I've been running with my patch for a couple of years without problems, but when I tried David's patch out, practically all my gnustep code simply started crashing on startup ... so there's something wrong there but I haven't had time to see what it might be. However, to address points in the last comment ... > I still have a hard time groking what was intended with the receiver. It all > seems very intertwined and I think there is a more straight forward way to > implement this. I can't argue with that ... it *is* complex :-( > Also, with this patch get_imp fails on class methods. (get_imp also has the > nasty effect of installing the dispatch table without calling +initialize and > the same goes for __objc_responds_to). Very good point ... it hasn't been an issue for me in practice, but that clearly is something which needs to be addressed. However, I'm not sure that's a new bug ... haven't those functions always bypassed +initialize? I'd have to check, but I agree that they really should call +initialize > I'm not to fond of introducing InitializingList as special type. I think > should > be fine with using the existing hash map tables for this. I don't think we > really need to introduce a new type. Do you really think that method dispatch > for partially installed dispatch tables is performance critical? Certainly there's no performance issue with method dispatch in initialize ... it should be rare enough that we can use a really slow implementation. However, we have to build the dispatch table for the class, so it seemed reasonable to use it within the thread calling +initialize even though we don't want to install it for other threads until +initialize has completed. Perhaps we can store the uninstalled dispatch tables in a hash map more simply than using a new type ... that sounds reasonable.