This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

optimization/8391: g++ 3.1.1 and 3.2 infinite loop on legal code


>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:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]