Incompatibility with 1.1. (Was: Do you need the vtable bug fixed?)

Martin v. Loewis martin@mira.isdn.cs.tu-berlin.de
Sun Jun 6 03:23:00 GMT 1999


> >That looks to me like a link-once problem. Apparently, the compiler
> >changed the rules under which inline functions or other stuff is
> >emitted.

As it turns out, it is a mangling problem. In the code

void foo(bool,bool);

void bar()
{
  foo(true,true);
}

egcs 1.1 mangles foo as 

foo__FbT0

whereas gcc 2.95 19990529 mangles it as 

foo__Fbb

Without further checking, it seems that this was introduced by

1998-07-11  Mark Mitchell  <mark@markmitchell.com>

	* method.c 
	(is_back_referenceable_type): New function.  Don't back-reference
	TEMPLATE_TYPE_PARMs as well as simple types like integers.

It seems that egcs 1.1 did not consider boolean to be simple, whereas
gcc 2.95 does. As a result, all functions taking two subsequent
boolean arguments lose binary compatibility with egcs 1.1.

In your particular example, this incompatibility was triggered by

         U QRegExp::QRegExp(char const *, bool, bool)

This is as far as my analysis goes; I deliberately refrain from
drawing conclusions :-)

Regards,
Martin



More information about the Gcc-bugs mailing list