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

             Bug #: 50373
           Summary: Incorrect Code generated for function with two
                    possible return values (Seg Fault)
    Classification: Unclassified
           Product: gcc
           Version: 4.5.2
            Status: UNCONFIRMED
          Severity: major
          Priority: P3
         Component: c++
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: sean.car...@maine.edu


The following program, when run, generates a seg fault if the value of Q is
nonzero.  It looks like the compiler is failing to create a copy of the
returned value, and is trying to free the memory twice.

#include <iostream>

using namespace std;

class testclass {
public:
  testclass() {
    data = new int[5];
  }
  ~testclass() {
    delete[] data;
  }
private:
  int* data;
};

testclass func(int Q) {
  testclass A;
  testclass B;
  if(Q) {
    return A;
  } else {
    return B;
  }
}

int main() {
  int Q = 1; //runs ok if Q=0;
  func(Q);
  return 0;
}

Reply via email to