This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
optimization/8391: g++ 3.1.1 and 3.2 infinite loop on legal code
- From: spencer at infointeractive dot com
- To: gcc-gnats at gcc dot gnu dot org
- Cc: spencer at infointeractive dot com
- Date: 29 Oct 2002 17:18:02 -0000
- Subject: optimization/8391: g++ 3.1.1 and 3.2 infinite loop on legal code
- Reply-to: spencer at infointeractive dot com
>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 <iostream>
#include <string>
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: