c++/7737: g++ ver 3.2 Internal Compiler Error
Reichelt
reichelt@igpm.rwth-aachen.de
Wed Aug 28 05:37:00 GMT 2002
Hi,
the problem can be demonstrated with the following code snippet:
-----------------------------snip here----------------------------
struct A { void foo(); };
void bar () { &(A::foo); }
-----------------------------snip here----------------------------
which is in fact illegal code. One should write "&A::foo" instead of
"&(A::foo)". In the original code you have to replace "&(Wall::...Flow)"
by "&Wall::...Flow" in the functions "Cell::OLVector()",
"Cell::GWVector()" and "Cell::TotalVector()" to make things compile.
The failures of gcc with the code snippet are quite interesting:
* With gcc 2.95.x the code compiles using "g++ -c" (even with
"-pedantic" turned on), which is wrong.
* With gcc 3.0.x I get the error message
PR7737.cc: In function `void bar()':
PR7737.cc:2: warning: statement cannot resolve address of overloaded function
which is bogus
* With 3.1 and 3.2 I get an ICE:
PR7737.cc: In function `void bar()':
PR7737.cc:2: Internal compiler error in resolve_offset_ref, at cp/init.c:1886
However with the main trunk (gcc 3.3 20020816) I get the right diagnostic:
PR7737.cc: In function `void bar()':
PR7737.cc:2: error: parenthesis around 'A::foo()' cannot be used to form a
pointer-to-member-function
Greetings,
Volker Reichelt
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=7737
More information about the Gcc-bugs
mailing list