1// RUN: %clang_cc1 -fobjc-arc -fobjc-runtime-has-weak -triple x86_64-apple-darwin -print-ivar-layout -emit-llvm %s -o %t-64.s | FileCheck -check-prefix CHECK-LP64 %s
2// rdar://8991729
3
4@interface NSObject {
5  id isa;
6}
7@end
8
9@interface AllPointers : NSObject {
10    id foo;
11    id __strong bar;
12    NSObject *bletch;
13}
14@end
15
16@implementation AllPointers
17@end
18// CHECK-LP64: strong ivar layout for class 'AllPointers': 0x03, 0x00
19
20@class NSString, NSNumber;
21@interface A : NSObject {
22   NSString *foo;
23   NSNumber *bar;
24   unsigned int bletch;
25   __weak id delegate;
26}
27@end
28
29@interface B : A {
30  unsigned int x;
31  NSString *y;
32  NSString *z;
33}
34@end
35
36@implementation A @end
37
38// CHECK-LP64: strong ivar layout for class 'A': 0x02, 0x00
39// CHECK-LP64: weak ivar layout for class 'A': 0x31, 0x00
40
41@implementation B @end
42
43// CHECK-LP64: strong ivar layout for class 'B': 0x12, 0x00
44
45@interface UnsafePerson {
46@public
47    __unsafe_unretained id name;
48    __unsafe_unretained id age;
49    id value;
50}
51@end
52
53@implementation UnsafePerson @end
54
55// CHECK-LP64: strong ivar layout for class 'UnsafePerson': 0x21, 0x00
56
57// rdar://16136439
58@interface rdar16136439
59    @property (nonatomic, readonly, weak) id first;
60@end
61
62@implementation rdar16136439 @end
63
64// CHECK-LP64: weak ivar layout for class 'rdar16136439': 0x01, 0x00
65
66@interface Misalign : NSObject {
67  char a;
68}
69@end
70
71@interface Misaligned : Misalign {
72  char b;
73  id x;
74}
75@end
76
77@implementation Misaligned @end
78
79// CHECK-LP64: strong ivar layout for class 'Misaligned': 0x01, 0x00
80