From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32600 invoked by alias); 26 Nov 2010 17:18:49 -0000 Received: (qmail 32591 invoked by uid 22791); 26 Nov 2010 17:18:48 -0000 X-SWARE-Spam-Status: No, hits=-2.8 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from localhost (HELO gcc.gnu.org) (127.0.0.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 26 Nov 2010 17:18:44 +0000 From: "pentek.imre at gmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/18635] use of uninitialised reference accepted in C++ front end X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c++ X-Bugzilla-Keywords: accepts-invalid X-Bugzilla-Severity: normal X-Bugzilla-Who: pentek.imre at gmail dot com X-Bugzilla-Status: NEW X-Bugzilla-Priority: P2 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Date: Fri, 26 Nov 2010 17:28:00 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2010-11/txt/msg03279.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18635 --- Comment #12 from Imre Pentek 2010-11-26 17:18:26 UTC --- (In reply to comment #11) > (In reply to comment #10) > > (In reply to comment #9) > > > (In reply to comment #2) > > > > int &a = a; > > > > i don't believe this is valid code. i believe g++ should reject the code. > > > > > > I'm not convinced the compiler must reject it. EDG accepts it too. > > > > Without warning? What about clang 2.8? > > Yes, without warning (G++ at least warns) > I don't know about clang This code is as valid as unset references are valid. The standards doesn't allow 'unset' or 'extremal' references. In this way there's no point to query the reference from a yet-unset reference, as there's no such a state as unset reference. If you somehow manage to query the reference from an unset reference you actually navigated your compiler to a state which doesn't even exist. It's like division by zero to be accepted without any (runtime/compiletime) error messages/crashes. Briefly, I consider this code as invalid, as it generates a state which is invalid, and has no semantic meaning, and doesn't really exist.