1/* Check if bitfield ivars are correctly @encode'd when 2 the NeXT runtime is used. */ 3/* Contributed by Ziemowit Laski <zlaski@apple.com>. */ 4/* { dg-do run { target *-*-darwin* } } */ 5/* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */ 6/* { dg-options "-fsigned-char" } */ 7 8typedef struct objc_object { struct objc_class *class_pointer; } *id; 9 10#include <stdlib.h> 11#include <string.h> 12 13#define CHECK_IF(expr) if(!(expr)) abort(); 14 15@interface Base 16{ 17 struct objc_class *isa; 18 int full; 19 int full2: 32; 20 int _refs: 8; 21 int field2: 3; 22 unsigned f3: 8; 23 short cc; 24 unsigned g: 16; 25 int r2: 8; 26 int r3: 8; 27 int r4: 2; 28 int r5: 8; 29 char c; 30} 31@end 32 33@interface Derived: Base 34{ 35 char d; 36 int _field3: 6; 37} 38@end 39 40@implementation Base 41@end 42 43@implementation Derived 44@end 45 46int main(void) { 47 const char *s1r = "{Base=#ib32b8b3b8sb16b8b8b2b8c}"; 48 const char *s1 = @encode(Base); 49 const char *s2r = "{Derived=#ib32b8b3b8sb16b8b8b2b8ccb6}"; 50 const char *s2 = @encode(Derived); 51 52 CHECK_IF(!strcmp(s1r, s1)); 53 CHECK_IF(!strcmp(s2r, s2)); 54 55 return 0; 56} 57