blob: 9c0c7a22922449d0d20987763f7c2e24bc6284df [file] [log] [blame]
/* APPLE LOCAL file radar 5080710 */
/* Test that we generate correct message call for method returning a C++ class
with copy constructor. Such methods return the result in memory and not in
registers. */
/* { dg-options "-Wno-objc-root-class -fnext-runtime -m64 -mmacosx-version-min=10.5" } */
/* { dg-do compile { target powerpc*-*-darwin* i?86*-*-darwin* } } */
class DTLock {
public:
DTLock();
~DTLock();
bool operator==(const DTLock &L) const;
void Lock(void) const;
private:
DTLock(const DTLock &ToC);
DTLock &operator=(const DTLock &ToC);
void *mutexLock;
};
class DTDoubleArrayStorage {
public:
DTDoubleArrayStorage(long int mv,long int nv,long int ov);
~DTDoubleArrayStorage();
DTLock accessLock;
long int m,n,o,mn,length;
int referenceCount;
int mutableReferences;
double *Data;
private:
DTDoubleArrayStorage(const DTDoubleArrayStorage &);
DTDoubleArrayStorage &operator=(const DTDoubleArrayStorage &);
};
class DTDoubleArray {
public:
DTDoubleArray();
virtual ~DTDoubleArray();
DTDoubleArray(const DTDoubleArray &A);
DTDoubleArray &operator=(const DTDoubleArray &A);
protected:
explicit DTDoubleArray(long int mv,long int nv=1,long int ov=1);
public:
long int m() const;
long int n() const;
long int o() const;
long int Length() const;
bool IsEmpty() const;
bool NotEmpty() const;
int ReferenceCount() const;
int MutableReferences() const;
const double *Pointer() const;
double operator()(long int i) const;
double operator()(long int i,long int j) const;
double operator()(long int i,long int j,long int k) const;
double e(int i) const;
double e(int i,int j) const;
double e(int i,int j,int k) const;
void pinfo(void) const;
void pi(int i) const;
void pj(int j) const;
void pall(void) const;
void prange(int s,int e) const;
void pcrange(int s,int e) const;
long int Find(double) const;
protected:
DTDoubleArrayStorage *Storage;
DTLock accessLock;
double invalidEntry;
void PrintErrorMessage(long int i) const;
void PrintErrorMessage(long int i,long int j) const;
void PrintErrorMessage(long int i,long int j,long int k) const;
};
@interface DoubleArrayContainer
- (DTDoubleArray)doubleArray;
@end
@interface TestController
{
}
- (void)myAction:(id)sender;
@end
@implementation TestController
- (void)myAction:(id)sender
{
DoubleArrayContainer *dA;
DTDoubleArray b = [dA doubleArray];
}
@end
/* { dg-final { scan-assembler "objc_msgSend_stret_fixup" } } */