This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: inline functions and local labels


   Date: Tue, 28 Jul 1998 11:36:27 -0400 (EDT)
   From: Craig Burley <burley@gnu.org>

   I'm confused -- what are the choices?  I've already tried to
   construct an example showing the differences, and can't do so
   without resorting to bogosities like having some external code
   somehow depend upon the uniqueness, or value, of labels passed to
   it as `void *' arguments.  (See below for an example.)

Craig, I apologize, I should have posted the code which behaves
differently if not inlined (due to kenners patch) so that the behavior
issue in question is more clear.  There is a performance concern, but
this is secondary compared to the loss in functionality change:

extern __inline__ unsigned char *skb_put(struct sk_buff *skb, unsigned int len)
{
	unsigned char *tmp=skb->tail;
	skb->tail+=len;
	skb->len+=len;
	if(skb->tail>skb->end)
	{
		__label__ here; 
		skb_over_panic(skb, len, &&here); 
here:		;
	}
	return tmp;
}

We use this for debugging, and the debugging information becomes
useless if the procedure is not inlined.

Later,
David S. Miller
davem@dm.cobaltmicro.com



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]