[Bug c++/25495] New: 4.1 regression, code rejected: can't find matching function
Ice for C++ 3.0 from ZeroC (http://www.zeroc.com/download.html, source code available) doesn't compile anymore with GCC from the 4.1 branch. It compiled fine with 4.0.1 and 4.0.2. I managed to reproduce the problem with the following sample code: class Dummy1; class Dummy2; void incRef(Dummy1*); void incRef(Dummy2*); templatetypename T class Handle { public: Handle(T* r = 0) { incRef(r); } }; namespace Test { class Process; typedef ::HandleProcess ProcessPrx; } void incRef(::Test::Process*); void m() { ::Test::ProcessPrx process; } I'm getting the following error: --- Main.cpp: In constructor 'HandleT::Handle(T*) [with T = Test::Process]': Main.cpp:24: instantiated from here Main.cpp:11: error: no matching function for call to 'incRef(Test::Process*)' Main.cpp:4: note: candidates are: void incRef(Dummy1*) Main.cpp:5: note: void incRef(Dummy2*) --- If the definition of the 'Handle' template is moved at the top, it compiles fine. The output of 'gcc -v -save-temps Main.cpp': --- Using built-in specs. Target: i686-pc-linux-gnu Configured with: ../configure --enable-shared --enable-languages=c,c++ --prefix=/opt/gcc-4.1 --enable-threads=posix Thread model: posix gcc version 4.1.0 20051219 (prerelease) /opt/gcc-4.1/libexec/gcc/i686-pc-linux-gnu/4.1.0/cc1plus -E -quiet -v -D_GNU_SOURCE Main.cpp -mtune=pentiumpro -fpch-preprocess -o Main.ii ignoring nonexistent directory /opt/gcc-4.1/lib/gcc/i686-pc-linux-gnu/4.1.0/../../../../i686-pc-linux-gnu/include #include ... search starts here: #include ... search starts here: /opt/gcc-4.1/lib/gcc/i686-pc-linux-gnu/4.1.0/../../../../include/c++/4.1.0 /opt/gcc-4.1/lib/gcc/i686-pc-linux-gnu/4.1.0/../../../../include/c++/4.1.0/i686-pc-linux-gnu /opt/gcc-4.1/lib/gcc/i686-pc-linux-gnu/4.1.0/../../../../include/c++/4.1.0/backward /usr/local/include /opt/gcc-4.1/include /opt/gcc-4.1/lib/gcc/i686-pc-linux-gnu/4.1.0/include /usr/include End of search list. /opt/gcc-4.1/libexec/gcc/i686-pc-linux-gnu/4.1.0/cc1plus -fpreprocessed Main.ii -quiet -dumpbase Main.cpp -mtune=pentiumpro -auxbase Main -version -o Main.s GNU C++ version 4.1.0 20051219 (prerelease) (i686-pc-linux-gnu) compiled by GNU C version 4.1.0 20051219 (prerelease). GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64389 Compiler executable checksum: 6367aa9360ae7c92e39b7212b696b4ab Main.cpp: In constructor 'HandleT::Handle(T*) [with T = Test::Process]': Main.cpp:25: instantiated from here Main.cpp:11: error: no matching function for call to 'incRef(Test::Process*)' Main.cpp:4: note: candidates are: void incRef(Dummy1*) Main.cpp:5: note: void incRef(Dummy2*) -- Summary: 4.1 regression, code rejected: can't find matching function Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: benoit at zeroc dot com GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25495
[Bug c++/21340] New: error in constructor lookup (can't find constructor with const void** argument)
Ice for C++ from ZeroC (http://www.zeroc.com, source code available) doesn't compile anymore with GCC 4.0.0 (I also tried with GCC from CVS and the result is the same). It compiled fine with GCC 3.4.2. I'm getting an error which looks like the following with 4.0.0: Main.cpp: In constructor 'IteratorI::IteratorI()': Main.cpp:31: error: no matching function for call to 'Iterator::Iterator(const void**)' Main.cpp:6: note: candidates are: Iterator::Iterator() Main.cpp:6: note: Iterator::Iterator(const Iterator) I don't understand why it's looking up this constructor, the code doesn't contain any reference to it. I'm also getting a segmentation fault of the compiler with similar code (see the code sample below). Here's a small test case demonstrating the problem(s): - class Base { }; class Iterator : virtual public Base { }; bool operator==(const Iterator, const Iterator); class IteratorI : public Iterator { }; class Obj { bool operator==(const Obj) const { return true; } }; template typename T bool dummy(const Obj lhs, const Obj rhs) { const Obj* lhsKey = lhs; const Obj* rhsKey = rhs; return *lhsKey == *rhsKey; } int main(int argc, char** argv) { // G++ segfault with the following line uncommented //Iterator* it1 = new Iterator(); // error: no matching function for call to 'Iterator::Iterator(const void**)' IteratorI* it2 = new IteratorI(); } - The output of 'g++ -v -save-temps Main.cpp': - Using built-in specs. Target: i686-pc-linux-gnu Configured with: ../configure --enable-threads --prefix=/opt/gcc-4.0.0 Thread model: posix gcc version 4.0.0 /opt/gcc-4.0.0/libexec/gcc/i686-pc-linux-gnu/4.0.0/cc1plus -E -quiet -v -D_GNU_SOURCE Main.cpp -mtune=pentiumpro -fpch-preprocess -o Main.ii ignoring nonexistent directory /opt/gcc-4.0.0/lib/gcc/i686-pc-linux-gnu/4.0.0/../../../../i686-pc- linux-gnu/include #include ... search starts here: #include ... search starts here: /opt/gcc-4.0.0/lib/gcc/i686-pc-linux-gnu/4.0.0/../../../../include/c++/4.0.0 /opt/gcc-4.0.0/lib/gcc/i686-pc-linux-gnu/4.0.0/../../../../include/c++/4.0.0/i686-pc-linux-gnu /opt/gcc-4.0.0/lib/gcc/i686-pc-linux-gnu/4.0.0/../../../../include/c++/4.0.0/backward /usr/local/include /opt/gcc-4.0.0/include /opt/gcc-4.0.0/lib/gcc/i686-pc-linux-gnu/4.0.0/include /usr/include End of search list. /opt/gcc-4.0.0/libexec/gcc/i686-pc-linux-gnu/4.0.0/cc1plus -fpreprocessed Main.ii -quiet -dumpbase Main.cpp -mtune=pentiumpro -auxbase Main -version -o Main.s GNU C++ version 4.0.0 (i686-pc-linux-gnu) compiled by GNU C version 4.0.0. GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64389 Main.cpp: In constructor 'IteratorI::IteratorI()': Main.cpp:31: error: no matching function for call to 'Iterator::Iterator(const void**)' - -- Summary: error in constructor lookup (can't find constructor with const void** argument) Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: benoit at zeroc dot com CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21340