// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fobjc-nonfragile-abi -o - %s | FileCheck %s
// rdar://8427922

struct Vector3D
{
		float x, y, z;
		Vector3D();
		Vector3D(const Vector3D &inVector);
		Vector3D(float initX, float initY, float initZ);
		Vector3D &operator=(const Vector3D & rhs);
};

@interface Object3D
{
	Vector3D position;
        Vector3D length;
}
@property (assign) Vector3D position;
- (Vector3D) length;
- (void) setLength: (Vector3D)arg;
@end

int main () 
{
	Object3D *myObject;
        Vector3D V3D(1.0f, 1.0f, 1.0f);
// CHECK: call void @_ZN8Vector3DC1ERKS_
	myObject.position = V3D;

// CHECK: call void @_ZN8Vector3DC1ERKS_
	myObject.length = V3D;

        return 0;
}

// rdar: // 8437253
extern "C" void exit(...);

struct CGPoint {
  float x;
  float y;
};
typedef struct CGPoint CGPoint;

extern "C" const CGPoint CGPointZero;

bool operator==(const CGPoint& a, const CGPoint& b);

@interface TIconViewSettings
@property (assign, nonatomic) CGPoint gridOffset;
@end

@implementation TIconViewSettings
- (CGPoint) gridOffset
{
 return CGPointZero;
}

- (void) foo
{
        if ((self.gridOffset) == CGPointZero)
                exit(1);

 if (self.gridOffset == CGPointZero)
  exit(1);
}
@end

