egcs-971122 problem: typeid

Joseph Heled pepe@iconz.co.nz
Tue Nov 25 12:03:00 GMT 1997


Hi,

If this is not a bug, I sure wish egcs would issue a diagnostic (warning) of
some kind.

egcs compiles the following two files, but program behaves incorrectly: it
prints 'wrong'!
(obviously, when definitions of X and Y are placed in a common .h file, there is
no problem)

file 1
--------------------------------------------
#include <typeinfo>

class X;

bool f(X& x) {
  return typeid(x) == typeid(X);
}
---------------------------------------------

file 2
--------------------------------------------
struct X { virtual ~X() {} };

struct Y : X {
  virtual ~Y() {}
};

main()
{
  extern bool f(X& x);

  Y y;
  
  if( f(y) ) {
    printf("wrong\n");
  } else {
    printf("correct\n");
  }    
}
---------------------------------------------

compilation
/export/home/users/joseph/egcs-971122/bin/g++ -v -Wall -o m c2.cc c1.cc
Reading specs from
/export/home/users/joseph/egcs-971122/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.17/specs
gcc version egcs-2.90.17 971114 (gcc2-970802 experimental)

/export/home/users/joseph/egcs-971122/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.17/cpp
-lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=90
-Dsparc -Dsun -Dunix -D__svr4__ -D__SVR4 -D__sparc__ -D__sun__ -D__unix__
-D__svr4__ -D__SVR4 -D__sparc -D__sun -D__unix -Asystem(unix) -Asystem(svr4)
-D__EXCEPTIONS -Wall -D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc) c2.cc
/var/tmp/cca001Me.ii
GNU CPP version egcs-2.90.17 971114 (gcc2-970802 experimental) (sparc)
#include "..." search starts here:
#include <...> search starts here:
 /export/home/users/joseph/egcs-971122/include/g++
 /usr/local/include
 /export/home/users/joseph/egcs-971122/sparc-sun-solaris2.5/include

/export/home/users/joseph/egcs-971122/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.17/include
 /usr/include
End of search list.

/export/home/users/joseph/egcs-971122/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.17/cc1plus
/var/tmp/cca001Me.ii -quiet -dumpbase c2.cc -Wall -version -o
/var/tmp/cca001Me.s
GNU C++ version egcs-2.90.17 971114 (gcc2-970802 experimental)
(sparc-sun-solaris2.5) compiled by GNU C version egcs-2.90.17 971114
(gcc2-970802 experimental).
c2.cc: In function `int main()':
c2.cc:14: warning: implicit declaration of function `int printf(...)'
 /usr/ccs/bin/as -V -Qy -s -o /var/tmp/cca001Me1.o /var/tmp/cca001Me.s
/usr/ccs/bin/as: SC4.0 dev 15 Feb 1995

/export/home/users/joseph/egcs-971122/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.17/cpp
-lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=90
-Dsparc -Dsun -Dunix -D__svr4__ -D__SVR4 -D__sparc__ -D__sun__ -D__unix__
-D__svr4__ -D__SVR4 -D__sparc -D__sun -D__unix -Asystem(unix) -Asystem(svr4)
-D__EXCEPTIONS -Wall -D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc) c1.cc
/var/tmp/cca001Me.ii
GNU CPP version egcs-2.90.17 971114 (gcc2-970802 experimental) (sparc)
#include "..." search starts here:
#include <...> search starts here:
 /export/home/users/joseph/egcs-971122/include/g++
 /usr/local/include
 /export/home/users/joseph/egcs-971122/sparc-sun-solaris2.5/include

/export/home/users/joseph/egcs-971122/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.17/include
 /usr/include
End of search list.

/export/home/users/joseph/egcs-971122/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.17/cc1plus
/var/tmp/cca001Me.ii -quiet -dumpbase c1.cc -Wall -version -o
/var/tmp/cca001Me.s
GNU C++ version egcs-2.90.17 971114 (gcc2-970802 experimental)
(sparc-sun-solaris2.5) compiled by GNU C version egcs-2.90.17 971114
(gcc2-970802 experimental).
 /usr/ccs/bin/as -V -Qy -s -o /var/tmp/cca001Me2.o /var/tmp/cca001Me.s
/usr/ccs/bin/as: SC4.0 dev 15 Feb 1995

/export/home/users/joseph/egcs-971122/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.17/ld
-V -Y P,/usr/ccs/lib:/usr/lib -Qy -o m
/export/home/users/joseph/egcs-971122/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.17/crt1.o
/export/home/users/joseph/egcs-971122/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.17/crti.o
/usr/ccs/lib/values-Xa.o
/export/home/users/joseph/egcs-971122/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.17/crtbegin.o
-L/export/home/users/joseph/egcs-971122/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.17
-L/export/home/users/joseph/egcs-971122/sparc-sun-solaris2.5/lib -L/usr/ccs/bin
-L/usr/ccs/lib -L/export/home/users/joseph/egcs-971122/lib /var/tmp/cca001Me1.o
/var/tmp/cca001Me2.o -lstdc++ -lm -lgcc -lc -lgcc
/export/home/users/joseph/egcs-971122/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.17/crtend.o
/export/home/users/joseph/egcs-971122/lib/gcc-lib/sparc-sun-solaris2.5/egcs-2.90.17/crtn.o
ld: Software Generation Utilities (SGU) SunOS/ELF (LK-2.0 (S/I) - versioning)

Compilation finished at Wed Nov 26 08:59:52



More information about the Gcc-bugs mailing list