Created attachment 8893 [details] compiler output
Created attachment 8894 [details] source code (compressed)
Confirmed, reduced testcase: class cl { int str(); void str(const int& __s); }; template <typename T> int &f(const T& t); template<int s> void g() { cl str; f(str.str); } ------- I don't know if this is valid code or not, 3.3.3 accepted it and so does ICC even in strict mode.
Note the ICE moved from arg_assoc to resolve_overloaded_unification in 4.0.0.
Definitely invalid code, you can't do anything with a bound pointer in C++. Comeau strict mode reports the error: "ComeauTest.c", line 14: error: a pointer to a bound function may only be used to call the function Wild Guess: You're calling a member function and forgot the ()'s f(str.str); ^
*** Bug 22124 has been marked as a duplicate of this bug. ***
*** Bug 22611 has been marked as a duplicate of this bug. ***
Moving to 4.0.2 pre Mark.
*** Bug 20549 has been marked as a duplicate of this bug. ***
Just for completeness, a slightly reduced version of the testcase from PR 20549: ======================================= template<typename T> void unique(T,T); struct A { int begin(); }; template<int> void foo() { unique(A().begin); } =======================================
*** Bug 24171 has been marked as a duplicate of this bug. ***
Subject: Bug 21592 CVSROOT: /cvs/gcc Module name: gcc Changes by: nathan@gcc.gnu.org 2005-10-12 18:13:41 Modified files: gcc/cp : ChangeLog pt.c typeck.c gcc/testsuite : ChangeLog gcc/testsuite/g++.dg/template: dependent-expr1.C dependent-expr2.C Added files: gcc/testsuite/g++.dg/template: overload6.C Log message: cp: PR c++/21592 * pt.c (build_non_dependent_expr): Don't wrap a COMPONENT_REF with already looked up member functions. Assert we're not returning a NON_DEPENDENT_EXPR with unknown type. * typeck.c (finish_class_member_access_expr): We can get non-template-id-expr baselinks. If the lookup finds a baselink, remember it even inside templates. testsuite: PR c++/21592 * g++.dg/template/dependent-expr1.C: Add new expected error. * g++.dg/template/dependent-expr2.C: Adjust error text. * g++.dg/template/overload6.C: New. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.4926&r2=1.4927 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/pt.c.diff?cvsroot=gcc&r1=1.1044&r2=1.1045 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/typeck.c.diff?cvsroot=gcc&r1=1.655&r2=1.656 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.6178&r2=1.6179 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/overload6.C.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/dependent-expr1.C.diff?cvsroot=gcc&r1=1.2&r2=1.3 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/dependent-expr2.C.diff?cvsroot=gcc&r1=1.1&r2=1.2
Fixed mainline & 4.0 2005-10-12 Nathan Sidwell <nathan@codesourcery.com> PR c++/21592 * pt.c (build_non_dependent_expr): Don't wrap a COMPONENT_REF with already looked up member functions. Assert we're not returning a NON_DEPENDENT_EXPR with unknown type. * typeck.c (finish_class_member_access_expr): We can get non-template-id-expr baselinks. If the lookup finds a baselink, remember it even inside templates.
Subject: Bug 21592 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-4_0-branch Changes by: nathan@gcc.gnu.org 2005-10-12 18:23:17 Modified files: gcc/testsuite : ChangeLog gcc/cp : ChangeLog pt.c typeck.c parser.c decl.c Added files: gcc/testsuite/g++.dg/other: return1.C gcc/testsuite/g++.dg/parse: typename8.C gcc/testsuite/g++.dg/template: overload6.C Log message: cp: PR c++/21592 * pt.c (build_non_dependent_expr): Don't wrap a COMPONENT_REF with already looked up member functions. Assert we're not returning a NON_DEPENDENT_EXPR with unknown type. * typeck.c (finish_class_member_access_expr): We can get non-template-id-expr baselinks. If the lookup finds a baselink, remember it even inside templates. PR c++/23797 * parser.c (cp_parser_functional_cast): Cope when TYPE is not a TYPE_DECL. Use dependent_type_p to check type. * pt.c (uses_template_parms_p): Use dependent_type_p for a TYPE_DECL. (type_dependent_expression_p): Assert we've not been given a TYPE_DECL. PR c++/21117 * decl.c (check_function_type): Correctly overwrite incomplete return type with void type. * typeck.c (check_return_expr): If the function's return type is void, don't try and convert a return expr. testsuite: PR c++/21592 * g++.dg/template/dependent-expr1.C: Add new expected error. * g++.dg/template/dependent-expr2.C: Adjust error text. * g++.dg/template/overload6.C: New. PR c++/23797 * g++.dg/other/typename8.C: New. PR c++/21117 * g++.dg/other/return1.C: New. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/other/return1.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.2.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/typename8.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.2.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/overload6.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.2.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.5084.2.450&r2=1.5084.2.451 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.4648.2.127&r2=1.4648.2.128 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/pt.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.978.2.30&r2=1.978.2.31 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/typeck.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.616.2.20&r2=1.616.2.21 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/parser.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.319.2.22&r2=1.319.2.23 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.1371.2.24&r2=1.1371.2.25
wont fix for pre 4.0