On Sat, Oct 22, 2005 at 03:24:55PM +0200, Alexander Neundorf wrote: > On Saturday 22 October 2005 09:50, Andrew Lunn wrote: > > On Fri, Oct 21, 2005 at 05:29:36PM -0400, Billy wrote: > ... > > > The usage: "inline foo();" (with a semicolon) smells fishy. > > > > > > Maybe you tried that already. > > > > Yep, tried that, same error. > > Maybe it helps to have a look at the preprocessed file ?
Yes, it did. I think i now understand it. thread.hxx declares the class Cyg_ThreadQueue which has a member function empty. thread.inl contains the implementation of Cyg_ThreadQueue::empty() and says it is an inline function. flag.hxx declares the class Cyg_Flag. It has a member variable queue of type Cyg_ThreadQueue. It also declares a member function waiting() which is inline and the implementation is given there and then. This implementation is !queue.empty(). It is select.cxx which is giving the problem. At the beginning this does: #include <cyg/kernel/thread.hxx> // thread definitions #include <cyg/kernel/flag.hxx> // flag definitions #include <cyg/kernel/clock.hxx> // clock definitions #include <cyg/kernel/sched.inl> #include <cyg/kernel/thread.inl> So the problem is that in flag.hxx the compiler has seen there is a member function queue(), but it has not seems the implementation yet. So it generates a function call and adds queue to its symbol table as an out of line function. It later gets to see the implementation of queue and finds its supposed to be an inline function, but it has already generated code which assumes its an out of line function, and so it generates the warning and generates code for the out of line implementation of queue. So its looks like flag.hxx needs to include both thread.hxx and thread.inl. Thats my theory anyway. I just need to test it. It might also be worth posting a gcc bug asking for them to make the error message a bit easier to understand. Andrew -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss