[Bug c++/25495] New: 4.1 regression, code rejected: can't find matching function

2005-12-19 Thread benoit at zeroc dot com
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*);

template
class Handle
{
public:
Handle(T* r = 0) { incRef(r); }
};

namespace Test
{
class Process;
typedef ::Handle ProcessPrx;
}
void incRef(::Test::Process*);

void 
m()
{
::Test::ProcessPrx process;
}


I'm getting the following error:

---
Main.cpp: In constructor 'Handle::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 'Handle::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)

2005-05-02 Thread benoit at zeroc dot com
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 
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