From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 658 invoked by alias); 29 Oct 2002 17:26:04 -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 609 invoked by uid 71); 29 Oct 2002 17:26:02 -0000 Resent-Date: 29 Oct 2002 17:26:02 -0000 Resent-Message-ID: <20021029172602.608.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, spencer@infointeractive.com Resent-Reply-To: gcc-gnats@gcc.gnu.org, spencer@infointeractive.com Received: (qmail 14371 invoked by uid 61); 29 Oct 2002 17:18:02 -0000 Message-Id: <20021029171802.14369.qmail@sources.redhat.com> Date: Tue, 29 Oct 2002 09:26:00 -0000 From: spencer@infointeractive.com Reply-To: spencer@infointeractive.com To: gcc-gnats@gcc.gnu.org Cc: spencer@infointeractive.com X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) X-GNATS-Notify: spencer@infointeractive.com Subject: optimization/8391: g++ 3.1.1 and 3.2 infinite loop on legal code X-SW-Source: 2002-10/txt/msg01209.txt.bz2 List-Id: >Number: 8391 >Category: optimization >Synopsis: g++ 3.1.1 and 3.2 infinite loop on legal code >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Tue Oct 29 09:26:01 PST 2002 >Closed-Date: >Last-Modified: >Originator: Brad Spencer >Release: gcc-3.2 >Organization: >Environment: gcc-3.1.1 sparc-sun-solaris2.8 target on i686-pc-linux-gnu gcc-3.2 sparc-sun-solaris2.8 target on i686-pc-linux-gnu gcc-3.2 i686-pc-linux-gnu native >Description: The following code causes the compiler to loop infinitely in cc1plus for the targets described above. This compiles successfully on other (commercial) compilers. $ /opt/gcc-3.1.1-cross/sparc-sun-solaris2.8/bin/sparc-sun-solaris2.8-g++ -v Reading specs from /opt/gcc-3.1.1-cross/sparc-sun-solaris2.8/lib/gcc-lib/sparc-sun-solaris2.8/3.1.1/specs Configured with: ../../gcc-3.1.1/configure --with-dwarf2 --enable-languages=c,c++ --enable-threads=single --disable-shared --prefix=/opt/gcc-3.1.1-cross/sparc-sun-solaris2.8 --target=sparc-sun-solaris2.8 -v --with-headers=/build/spencer/gcc-cross/sparc-sun-solaris2.8/target-stuff/include/ --with-lib=/build/spencer/gcc-cross/sparc-sun-solaris2.8/target-stuff/lib --with-gnu-as --with-gnu-ld --disable-multilib Thread model: single gcc version 3.1.1 $ /opt/gcc-3.2-cross/sparc-sun-solaris2.8/bin/sparc-sun-solaris2.8-g++ -v Reading specs from /opt/gcc-3.2-cross/sparc-sun-solaris2.8/lib/gcc-lib/sparc-sun-solaris2.8/3.2/specs Configured with: ../../gcc-3.2/configure --with-dwarf2 --enable-languages=c,c++ --enable-threads=single --disable-shared --prefix=/opt/gcc-3.2-cross/sparc-sun-solaris2.8 --target=sparc-sun-solaris2.8 --with-headers=/build/eng-linux1/spencer/gcc-cross/sparc-sun-solaris2.8/target-stuff/include/ --with-lib=/opt/gcc-3.2-cross/sparc-sun-solaris2.8/sparc-sun-solaris2.8/lib --with-gnu-as --with-gnu-ld --disable-multilib --enable-concept-checks --enable-clocale=ieee_1003.1-2001 Thread model: single gcc version 3.2 $ g++ -v Reading specs from /opt/gcc-3.2-cross/i686-pc-linux-gnu/lib/gcc-lib/i686-pc-linux-gnu/3.2/specs Configured with: ../../gcc-3.2/configure --with-dwarf2 --enable-languages=c,c++ --enable-threads=single --disable-shared --prefix=/opt/gcc-3.2-cross/i686-pc-linux-gnu --with-gnu-as --with-gnu-ld --with-as=/opt/gcc-3.2-cross/i686-pc-linux-gnu/bin/as --with-ld=/opt/gcc-3.2-cross/i686-pc-linux-gnu/bin/ld --disable-multilib --enable-clocale=gnu Thread model: single gcc version 3.2 // g++ -Wall -c -O foo.o foo.cc #include #include namespace Namespace { class Object { public: Object() {} virtual ~Object() {} public: struct Writer { virtual bool operator()(const char *data, const size_t size) = 0; }; virtual bool write(Writer &writer) const; }; // convenience output operator inline std::ostream &operator<<(std::ostream &out, const Object &obj) { class ContentWriter : public Object::Writer { std::ostream &m_out; public: ContentWriter(std::ostream &out) : m_out(out) {} virtual bool operator()(const char *data, const size_t size) { return m_out.write(data, size); } } contentWriter(out); obj.write(contentWriter); return out; } } void f(Namespace::Object &req) { std::cout << req; } >How-To-Repeat: Compile the file. The compilation never completes. >Fix: >Release-Note: >Audit-Trail: >Unformatted: