1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -fobjc-gc -emit-llvm -o - %s | FileCheck -check-prefix CHECK-C %s
2// RUN: %clang_cc1 -x objective-c++ -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -fobjc-gc -emit-llvm -o - %s | FileCheck -check-prefix CHECK-CP %s
3
4static int count;
5
6typedef struct S {
7   int ii;
8} SS;
9
10struct type_s {
11   SS may_recurse;
12   id id_val;
13};
14
15@interface NamedObject
16{
17  struct type_s type_s_ivar;
18}
19- (void) setSome : (struct type_s) arg;
20- (struct type_s) getSome;
21@property(assign) struct type_s aggre_prop;
22@end
23
24@implementation NamedObject
25- (void) setSome : (struct type_s) arg
26  {
27     type_s_ivar = arg;
28  }
29- (struct type_s) getSome
30  {
31    return type_s_ivar;
32  }
33@synthesize aggre_prop = type_s_ivar;
34@end
35
36struct type_s some = {{1234}, (id)0};
37
38struct type_s get(void)
39{
40  return some;
41}
42
43void f(const struct type_s *in, struct type_s *out) {
44  *out = *in;
45}
46
47#ifdef __cplusplus
48struct Derived : type_s { };
49
50void foo(Derived* src, Derived* dest) {
51        *dest = *src;
52}
53#endif
54
55// CHECK-C: call i8* @objc_memmove_collectable
56// CHECK-C: call i8* @objc_memmove_collectable
57// CHECK-C: call i8* @objc_memmove_collectable
58
59// CHECK-CP: call i8* @objc_memmove_collectable
60// CHECK-CP: call i8* @objc_memmove_collectable
61// CHECK-CP: call i8* @objc_memmove_collectable
62// CHECK-CP: call i8* @objc_memmove_collectable
63