I do not think labels as values are widely used with C++ operators; I stumbled over it only because of a typo (double &&). But in case of error, it will produce a garbled message (tested from 3.3 to 4.1). For example, a.cpp:3:no match for 'operator&&' in 'A() && &#'label_decl' not supported by dump_expr#<expression error>' Testcase: struct A {}; bool operator&&(A const &, A const &); int main() { A() && && b; }
Created attachment 9803 [details] Trivial fix The error message is a bit better now: a.cpp:3: error: no match for 'operator&&' in 'A() && & b'
Confirmed a regression from 3.2.3 which gave: t.cc: In function `int main()': t.cc:3: no match for `A && void*' operator t.cc:3: candidates are: operator&&(bool, bool) <built-in> t.cc:2: bool operator&&(const A&, const A&) t.cc:3: label `b' used but not defined
Created attachment 9916 [details] another patch Similar to the previous patch, but also prints && correctly for ADDR_EXPR of a LABEL_DECL.
Subject: Bug 24052 CVSROOT: /cvs/gcc Module name: gcc Changes by: bonzini@gcc.gnu.org 2005-10-12 13:16:23 Modified files: gcc/cp : ChangeLog error.c gcc/testsuite : ChangeLog Added files: gcc/testsuite/g++.dg/ext: label5.C Log message: ==> cp/ChangeLog <== 2005-10-12 Paolo Bonzini <bonzini@gnu.org> PR c++/24052 * error.c (dump_expr): Pass LABEL_DECL to dump_decl. Print an ADDR_EXPR of a LABEL_DECL as &&. ==> testsuite/ChangeLog <== 2005-10-12 Paolo Bonzini <bonzini@gnu.org> PR c++/24052 * g++.dg/ext/label5.C: New. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.4922&r2=1.4923 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/error.c.diff?cvsroot=gcc&r1=1.294&r2=1.295 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.6175&r2=1.6176 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/ext/label5.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
Subject: Bug 24052 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-4_0-branch Changes by: bonzini@gcc.gnu.org 2005-10-12 13:35:41 Modified files: gcc/cp : ChangeLog error.c gcc/testsuite : ChangeLog Added files: gcc/testsuite/g++.dg/ext: label5.C Log message: ==> cp/ChangeLog <== 2005-10-12 Paolo Bonzini <bonzini@gnu.org> PR c++/24052 * error.c (dump_expr): Pass LABEL_DECL to dump_decl. Print an ADDR_EXPR of a LABEL_DECL as &&. ==> testsuite/ChangeLog <== 2005-10-12 Paolo Bonzini <bonzini@gnu.org> PR c++/24052 * g++.dg/ext/label5.C: New. Patches: 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.126&r2=1.4648.2.127 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/error.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.279.2.4&r2=1.279.2.5 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.449&r2=1.5084.2.450 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/ext/label5.C.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.2.1
Subject: Bug 24052 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-3_4-branch Changes by: bonzini@gcc.gnu.org 2005-10-12 13:45:10 Modified files: gcc/cp : error.c ChangeLog gcc/testsuite : ChangeLog Added files: gcc/testsuite/g++.dg/ext: label5.C Log message: ==> cp/ChangeLog <== 2005-10-12 Paolo Bonzini <bonzini@gnu.org> PR c++/24052 * error.c (dump_expr): Pass LABEL_DECL to dump_decl. Print an ADDR_EXPR of a LABEL_DECL as &&. ==> testsuite/ChangeLog <== 2005-10-12 Paolo Bonzini <bonzini@gnu.org> PR c++/24052 * g++.dg/ext/label5.C: New. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/ext/label5.C.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.1.4.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/error.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.241.4.9&r2=1.241.4.10 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.3892.2.246&r2=1.3892.2.247 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.3389.2.441&r2=1.3389.2.442
Patch committed to all open branches.