From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4947 invoked by alias); 4 Sep 2002 19:06:03 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 4926 invoked by uid 71); 4 Sep 2002 19:06:02 -0000 Resent-Date: 4 Sep 2002 19:06:02 -0000 Resent-Message-ID: <20020904190602.4925.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, snyder@fnal.gov Received: (qmail 3594 invoked from network); 4 Sep 2002 18:57:57 -0000 Received: from unknown (HELO d0sgibnl1.fnal.gov) (131.225.226.68) by sources.redhat.com with SMTP; 4 Sep 2002 18:57:57 -0000 Received: from localhost (snyder@localhost) by d0sgibnl1.fnal.gov (SGI-8.9.3/8.9.3) with SMTP id NAA82920 for ; Wed, 4 Sep 2002 13:57:56 -0500 (CDT) Message-Id: <200209041857.NAA82920@d0sgibnl1.fnal.gov> Date: Wed, 04 Sep 2002 12:06:00 -0000 From: snyder@fnal.gov Reply-To: snyder@fnal.gov To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: 3.113 Subject: c++/7828: g++ 3.3: bad non-lvalue error (non_cast_lvalue_or_else) X-SW-Source: 2002-09/txt/msg00060.txt.bz2 List-Id: >Number: 7828 >Category: c++ >Synopsis: g++ 3.3: bad non-lvalue error (non_cast_lvalue_or_else) >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: rejects-legal >Submitter-Id: net >Arrival-Date: Wed Sep 04 12:06:01 PDT 2002 >Closed-Date: >Last-Modified: >Originator: scott snyder >Release: 3.3 20020903 (experimental) >Organization: >Environment: System: Linux karma 2.4.9-13 #1 Tue Oct 30 20:11:04 EST 2001 i686 unknown Architecture: i686 host: i686-pc-linux-gnu build: i686-pc-linux-gnu target: i686-pc-linux-gnu configured with: ../egcs/configure --prefix=/usr/local/egcs --enable-threads=posix --enable-long-long : (reconfigured) >Description: gcc gives an error compiling the code below: $ g++ -c x.cc x.cc: In function `binder2nd bind2nd(const int&)': x.cc:9: error: non-lvalue in unary `&' $ I believe that this code is legal --- even if it isn't, the error message is rather confusing (since this code nowhere uses the unary & operator). This was derived from the libstdc++ implementation. Curiously, if i change the bind2nd() function so that it does not return a value, the error goes away. It looks like this behavior was introduced by this change: 2002-08-24 Matt Austern * tree.c (lvalue_p_1): Add argument for whether casts of lvalues are allowable. (real_lvalue_p): Update caller. (lvalue_p): Ditto. (non_cast_lvalue_or_else): New. * tree.h: Declare it. * typeck.c (build_unary_op): Use non_cast_lvalue_or_else. If i disable that change (by changing non_cast_lvalue_or_else() to lvalue_or_else() in typeck.c), the error goes away. >How-To-Repeat: -------------------------------------- struct binder2nd { binder2nd(const long& __y) ; }; binder2nd bind2nd(const int& x) { return binder2nd(long(x)); } -------------------------------------- >Fix: >Release-Note: >Audit-Trail: >Unformatted: SEND-PR: Leave "Confidential" as "no"; all GCC PRs are public. SEND-PR: critical GCC is completely not operational; no work-around known. SEND-PR: serious GCC is not working properly; a work-around is possible. SEND-PR: non-critical Report indicates minor problem. SEND-PR: medium The problem should be solved in the next release. SEND-PR: low The problem should be solve in a future release. SEND-PR: doc-bug The documentation is incorrect. SEND-PR: accepts-illegal GCC fails to reject erroneous code. SEND-PR: rejects-legal GCC gives an error message for correct code. SEND-PR: wrong-code The machine code generated by gcc is incorrect. SEND-PR: ice-on-legal-code GCC gives an Internal Compiler Error (ICE) SEND-PR: for correct code SEND-PR: ice-on-illegal-code GCC gives an ICE instead of reporting an error SEND-PR: pessimizes-code GCC misses an important optimization opportunity SEND-PR: sw-bug Software bug of some other class than above SEND-PR: change-request A feature in GCC is missing. SEND-PR: support I need help with gcc.