g++ 2.95.2 bug report

Jay Baus baus@roguewave.com
Mon Nov 29 13:41:00 GMT 1999


Hello,

The following is a bug report for the g++ 2.95.2 compiler.  

It appears that template functions incorrectly handle const char array
arguments.  Here's the example program:

$ cat bug.cpp

#include <stdio.h>

template <class charT>
void foo(const charT* b){
  printf("\npointer address inside foo()        -->%x\n",b);
}

int main(){

  char a[]="char arrays -- ok.";
  char *b="char ptrs -- ok";
  const char c[]="const char arrays -- addresses not equal";

  printf("\n%s:\npointer address passed to foo() -->%x",a,a);
  foo(a);
  printf("\n%s\npointer address passed to foo() -->%x",b,b);
  foo(b);
  printf("\n%s\npointer address passed to foo() -->%x",c,c);
  foo(c);

  return 0;
}



The output on my machine is:


$ ./bug

char arrays -- ok.:
pointer address passed to foo() -->bffffa14
pointer address inside foo()       -->bffffa14

char ptrs -- ok
pointer address passed to foo() -->8048933
pointer address inside foo()       -->8048933

const char arrays -- addresses not equal
pointer address passed to foo() -->bffff9e4
pointer address inside foo()       -->8048960



Compilation details:


$ g++ -v -c bug.cpp

Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/specs
gcc version 2.95.2 19991024 (release)
 /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/cpp -lang-c++ -v -D__GNUC__=2
-D__GNU
G__=2 -D__GNUC_MINOR__=95 -D__cplusplus -D__ELF__ -Dunix -D__i386__ -Dlinux
-D__
ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__linux -Asystem(posix)
-D__E
XCEPTIONS -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -Di686
-Dpentiu
mpro -D__i686 -D__i686__ -D__pentiumpro -D__pentiumpro__ bug.cpp
/tmp/ccKPQffp.i
i
GNU CPP version 2.95.2 19991024 (release) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/../../../../include/g++-3
 /usr/local/include
 
/usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/../../../../i686-pc-linux-gnu/incl
ude
 /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/include
 /usr/include
End of search list.
The following default directories have been omitted from the search path:
End of omitted list.
 /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/cc1plus /tmp/ccKPQffp.ii -quiet
-dump
base bug.cc -version -o /tmp/ccYxuoeF.s
GNU C++ version 2.95.2 19991024 (release) (i686-pc-linux-gnu) compiled by
GNU C
version 2.95.2 19991024 (release).
 as -V -Qy -o bug.o /tmp/ccYxuoeF.s
GNU assembler version 2.9.1 (i386-redhat-linux), using BFD version
2.9.1.0.23

$ g++ -v bug.o -o bug

Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/specs
gcc version 2.95.2 19991024 (release)
 /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/collect2 -m elf_i386
-dynamic-linker
/lib/ld-linux.so.2 -o bug /usr/lib/crt1.o /usr/lib/crti.o
/usr/lib/gcc-lib/i686-
pc-linux-gnu/2.95.2/crtbegin.o -L/usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2
bug.o
 -lstdc++ -lm -lgcc -lc -lgcc
/usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/crtend.o
 /usr/lib/crtn.o


Thank You,
Jay Baus

=========================
Jay M. Baus, Software Engineer
Rogue Wave Software, Inc.   
(303)545-3197 baus@roguewave.com  
=========================



More information about the Gcc-bugs mailing list