http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60143

            Bug ID: 60143
           Summary: AIX: gcc-4.8.2: for loop not entered when -maix64 and
                    -O are set
           Product: gcc
           Version: 4.8.2
            Status: UNCONFIRMED
          Severity: major
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tgard at opentext dot com

Created attachment 32102
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=32102&action=edit
Makefile and simple repro of the bug

The bug disappears if I remove a member of SubpathRecord struct or if I change
int num_subpaths() to size_t num_subpaths() or if I use the commented code that
uses a variable for num_subpaths. Expected output is “0“, but with the bug I
get nothing

#include <stdio.h>
#include <vector>

class Path
{
public:
    int num_subpaths() const { return static_cast<int>(m_subpaths.size()); }

    struct SubpathRecord
    {
        int    m_start_index;
        int    m_closed;
        int    m_type;
    };

public:
    Path()
    {
        m_subpaths.push_back( SubpathRecord() );
    }

private:
    std::vector<SubpathRecord>    m_subpaths;
};

////////////////////////////////////////////
int main( void )
{
    Path path;
    //int num_subpaths( path.num_subpaths() );
    //for( int j=0; j<num_subpaths; ++j )
    for( int j=0; j<path.num_subpaths(); ++j )
    {
        printf("%d\n", j);
    }
    return 0;
}

Compiler options:

gcc -maix64 -lstdc++ -O1 bug.cxx

For a simple repro see the attached file. The archive also contains a verbose
build output

Reply via email to