1/* Check if bitfield ivars are inherited correctly (i.e., without 2 being "promoted" to ints). */ 3/* Contributed by Ziemowit Laski <zlaski@apple.com>. */ 4/* { dg-do run } */ 5 6#include <objc/objc.h> 7#include <objc/Object.h> 8 9extern void abort(void); 10 11#define CHECK_IF(expr) if(!(expr)) abort(); 12 13@interface Base: Object 14{ 15 int full; 16 int full2: 32; 17 int _refs: 8; 18 int field2: 3; 19 unsigned f3: 8; 20 short cc; 21 unsigned g: 16; 22 int r2: 8; 23 int r3: 8; 24 int r4: 2; 25 int r5: 8; 26 char c; 27} 28- (void)setValues; 29@end 30 31@interface Derived: Base 32{ 33 char d; 34 int _field3: 6; 35} 36- (void)checkValues; 37@end 38 39@implementation Base 40-(void)setValues { 41 full = 1; 42 full2 = 2; 43 _refs = 3; 44 field2 = 1; 45 f3 = 6; 46 cc = 7; 47 g = 8; 48 r2 = 9; 49 r3 = 10; 50 r4 = 1; 51 r5 = 12; 52 c = 13; 53} 54@end 55 56@implementation Derived 57-(void)checkValues { 58 CHECK_IF(full == 1); 59 CHECK_IF(full2 == 2); 60 CHECK_IF(_refs == 3); 61 CHECK_IF(field2 == 1); 62 CHECK_IF(f3 == 6); 63 CHECK_IF(cc == 7); 64 CHECK_IF(g == 8); 65 CHECK_IF(r2 == 9); 66 CHECK_IF(r3 == 10); 67 CHECK_IF(r4 == 1); 68 CHECK_IF(r5 == 12); 69 CHECK_IF(c == 13); 70} 71@end 72 73int main(void) { 74 Derived *obj = [[Derived alloc] init]; 75 76 [obj setValues]; 77 [obj checkValues]; 78 79 return 0; 80} 81