[Bug c++/41840] New: g++ compiler giving error for array of pointers of abstract base class
ganesh dot borse at credit-suisse dot com
gcc-bugzilla@gcc.gnu.org
Tue Oct 27 04:20:00 GMT 2009
Following code is not compiling with g++ 4.2.3, but compiles fine with g++
3.3.3:
==========================
#include<iostream>
class mybase {
public:
virtual int afunc()=0;
};
main()
{
mybase (*ptrs)[10];
}
==========================
Error given by g++4.2.3 is as below for the above code. I am using following
simple command to compile the command, without any options, flags
# g++ testpure.cpp
testpure.cpp: In function âint main()â:
testpure.cpp:10: error: invalid abstract type âmybaseâ for âptrsâ
testpure.cpp:3: note: because the following virtual functions are pure within
âmybaseâ:
testpure.cpp:5: note: virtual int mybase::afunc()
==========================
Information about compiler, OS, Kernel on which I am seeing this issue is as
below:
(1) Compiler information:
g++ -v
Using built-in specs.
Target: x86_64-unknown-linux-gnu
Configured with: ./configure --prefix=/app/devtools/gcc-4.2.3
--exec-prefix=/app/devtools/gcc-4.2.3 --with-mpfr=/app/devtools/mpfr-2.2.1
--with-mpfr-include=/app/devtools/mpfr-2.2.1
--with-mpfr-lib=/app/devtools/mpfr-2.2.1/.libs
--with-gmp=/app/devtools/gmp-4.2.2 --with-gmp-include=/app/devtools/gmp-4.2.2
--with-gmp-lib=/app/devtools/gmp-4.2.2/.libs --enable-languages=c,c++,fortran
Thread model: posix
gcc version 4.2.3
(2) OS Information:
cat /etc/SuSE-release
SUSE Linux Enterprise Server 10 (x86_64)
VERSION = 10
PATCHLEVEL = 1
-------------
uname -a
Linux vsgl36a-1031 2.6.16.46-0.12-smp #1 SMP Thu May 17 14:00:09 UTC 2007
x86_64 x86_64 x86_64 GNU/Linux
==========================
Can I please know why g++4.2.3 is behaving differently that g++ 3.3.3?
According to C++, we can declare the pointer(s) of abstract base class. But why
is g++ 4.2.3 compiler not allowing to even declare these pointers?
Is this a bug in g++4.2.3?
In which release of g++, this bug is fixed?
There are many other such deviations we noticed in this compiler from the
normal C++ principles.
Should we not use g++ 4.2.3? Which is the most stable version in g++ 4.x.x
series?
Please help.
------------------------------------------
Output of :g++ -v -save-temps testpure.cpp
Using built-in specs.
Target: x86_64-unknown-linux-gnu
Configured with: ./configure --prefix=/app/devtools/gcc-4.2.3
--exec-prefix=/app/devtools/gcc-4.2.3 --with-mpfr=/app/devtools/mpfr-2.2.1
--with-mpfr-include=/app/devtools/mpfr-2.2.1
--with-mpfr-lib=/app/devtools/mpfr-2.2.1/.libs
--with-gmp=/app/devtools/gmp-4.2.2 --with-gmp-include=/app/devtools/gmp-4.2.2
--with-gmp-lib=/app/devtools/gmp-4.2.2/.libs --enable-languages=c,c++,fortran
Thread model: posix
gcc version 4.2.3
/app/devtools/gcc-4.2.3/libexec/gcc/x86_64-unknown-linux-gnu/4.2.3/cc1plus -E
-quiet -v -D_GNU_SOURCE testpure.cpp -mtune=generic -fpch-preprocess -o
testpure.ii
ignoring nonexistent directory
"/app/devtools/gcc-4.2.3/lib/gcc/x86_64-unknown-linux-gnu/4.2.3/../../../../x86_64-unknown-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/app/devtools/gcc-4.2.3/lib/gcc/x86_64-unknown-linux-gnu/4.2.3/../../../../include/c++/4.2.3
/app/devtools/gcc-4.2.3/lib/gcc/x86_64-unknown-linux-gnu/4.2.3/../../../../include/c++/4.2.3/x86_64-unknown-linux-gnu
/app/devtools/gcc-4.2.3/lib/gcc/x86_64-unknown-linux-gnu/4.2.3/../../../../include/c++/4.2.3/backward
/usr/local/include
/app/devtools/gcc-4.2.3/include
/app/devtools/gcc-4.2.3/lib/gcc/x86_64-unknown-linux-gnu/4.2.3/include
/usr/include
End of search list.
/app/devtools/gcc-4.2.3/libexec/gcc/x86_64-unknown-linux-gnu/4.2.3/cc1plus
-fpreprocessed testpure.ii -quiet -dumpbase testpure.cpp -mtune=generic
-auxbase testpure -version -o testpure.s
GNU C++ version 4.2.3 (x86_64-unknown-linux-gnu)
compiled by GNU C version 4.2.3.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 4f1a9dd65e939519bf89a9e8788cb5ba
testpure.cpp: In function âint main()â:
testpure.cpp:10: error: invalid abstract type âmybaseâ for âptrsâ
testpure.cpp:3: note: because the following virtual functions are pure within
âmybaseâ:
testpure.cpp:5: note: virtual int mybase::afunc()
======================================================
cat testpure.s
.file "testpure.cpp"
.section .ctors,"aw",@progbits
.align 8
.quad _GLOBAL__I_main
--
Summary: g++ compiler giving error for array of pointers of
abstract base class
Product: gcc
Version: 4.2.3
Status: UNCONFIRMED
Severity: major
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: ganesh dot borse at credit-suisse dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41840
More information about the Gcc-bugs
mailing list