snaga:tmp> cat bug.ii namespace N1 { typedef long A; struct B { virtual A a() const; }; struct D : public B { A a() const; }; } N1::D d(); namespace N2 { struct A {}; template < class T > T tf(const T &) { return T(); } void f(const N1::B & b) { tf< A >(b.a()); } } void f2() { N2::f(d()); } snaga:tmp> /opt/gcc-3.2.2/bin/g++ -c bug.ii bug.ii: In function `void N2::f(const N1::B&)': bug.ii:32: could not convert `(**(+b)->N1::B::_vptr.B)((+b))' to `const N2::A&' bug.ii:26: in passing argument 1 of `T N2::tf(const T&) [with T = N2::A]' snaga:tmp> /opt/gcc-3.2.2/bin/g++ -v Reading specs from /opt/gcc-3.2.2/lib/gcc-lib/i686-pc-linux-gnu/3.2.2/specs Configured with: /tmp/post_install/gcc-3.2.2/configure --enable-languages=c,c++ --prefix=/opt/gcc-3.2.2 Thread model: posix gcc version 3.2.2 Release: 3.2.2 Environment: snaga:tmp> uname -a Linux snaga.sics.se 2.4.19 #7 Fri Nov 29 15:22:22 CET 2002 i686 i686 i386 GNU/Linux snaga:tmp> cat /etc/redhat-release Red Hat Linux release 8.0 (Psyche)
State-Changed-From-To: open->analyzed State-Changed-Why: Confirmed. I think this is a regression: 2.95 said on this code x.cc: In function `void N2::f(const N1::B &)': x.cc:32: conversion from `A' to non-scalar type `N2::A' requested x.cc:26: in passing argument 1 of `N2::tf<N2::A>(const N2::A &)' This is not entirely accurate, since A is actually N1::A, but the message was much clearer than what we get presently (in 3.2, 3.3 and mainline). W.
Postponed until GCC 3.3.2.
Subject: Bug 10147 CVSROOT: /cvs/gcc Module name: gcc Changes by: mmitchel@gcc.gnu.org 2003-10-07 07:07:08 Modified files: gcc/cp : ChangeLog call.c cxx-pretty-print.c cxx-pretty-print.h decl.c init.c gcc/testsuite : ChangeLog gcc/testsuite/g++.dg/other: error4.C gcc/testsuite/g++.dg/template: ptrmem4.C Added files: gcc/testsuite/g++.dg/ext: attrib8.C gcc/testsuite/g++.dg/init: new9.C Log message: PR c++/10147 * call.c (initialize_reference): Tweak error message. PR c++/12337 * init.c (build_new_1): Make sure that the expression returned is not an lvalue. PR c++/12344, c++/12236, c++/8656 * decl.c (start_function): Do not ignore attributes embedded in a function declarator. PR c++/12337 * g++.dg/init/new9.C: New test. PR c++/12334, c++/12236, c++/8656 * g++.dg/ext/attrib8.C: New test. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.3717&r2=1.3718 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/call.c.diff?cvsroot=gcc&r1=1.437&r2=1.438 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/cxx-pretty-print.c.diff?cvsroot=gcc&r1=1.7&r2=1.8 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/cxx-pretty-print.h.diff?cvsroot=gcc&r1=1.4&r2=1.5 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl.c.diff?cvsroot=gcc&r1=1.1139&r2=1.1140 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/init.c.diff?cvsroot=gcc&r1=1.344&r2=1.345 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.3099&r2=1.3100 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/ext/attrib8.C.diff?cvsroot=gcc&r1=1.1&r2=1.2 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/init/new9.C.diff?cvsroot=gcc&r1=1.1&r2=1.2 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/other/error4.C.diff?cvsroot=gcc&r1=1.1&r2=1.2 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/ptrmem4.C.diff?cvsroot=gcc&r1=1.1&r2=1.2
Fixed in GCC 3.4. In GCC 3.3.2, the GCC 2.95 error message was restored, which is good enough.
Subject: Bug 10147 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-3_3-branch Changes by: mmitchel@gcc.gnu.org 2003-10-08 06:34:05 Modified files: gcc/testsuite/g++.dg/template: ptrmem4.C Log message: * g++.dg/template/ptrmem4.C: Revise in view of fixes for PR c++/10147. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/ptrmem4.C.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.1.2.1&r2=1.1.2.2