/* APPLE LOCAL file mainline */
/* Check if bitfield ivars are correctly @encode'd when
   the NeXT runtime is used.  */
/* Contributed by Ziemowit Laski <zlaski@apple.com>.  */
/* { dg-options "-fnext-runtime -fsigned-char" } */
/* { dg-do run { target *-*-darwin* } } */

typedef struct objc_object { struct objc_class *class_pointer; } *id;

extern "C" {
  extern void abort(void);
  extern int strcmp(const char *, const char *);
}

#define CHECK_IF(expr) if(!(expr)) abort();

@interface Base 
{
    struct objc_class *isa;
    int full;
    int full2: 32;
    int _refs: 8;
    int field2: 3;
    unsigned f3: 8;
    short cc;
    unsigned g: 16;
    int r2: 8;
    int r3: 8;
    int r4: 2;
    int r5: 8;
    char c;
}
@end

@interface Derived: Base
{
    char d;
    int _field3: 6;
}
@end

@implementation Base
@end

@implementation Derived
@end

int main(void) {
  const char *s1r = "{Base=#ib32b8b3b8sb16b8b8b2b8c}";
  const char *s1 = @encode(Base);
#if __OBJC2__
  const char *s2r = "{Derived=#ib32b8b3b8sb16b8b8b2b8ccb6b0}";
#else
  const char *s2r = "{Derived=#ib32b8b3b8sb16b8b8b2b8ccb6}";
#endif
  const char *s2 = @encode(Derived);

  CHECK_IF(!strcmp(s1r, s1));
  CHECK_IF(!strcmp(s2r, s2));

  return 0;
}
