/* 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;

#include <stdlib.h>
#include <string.h>

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

__attribute__((objc_root_class)) @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);
  /* APPLE LOCAL begin objc2 */
#if __OBJC2__
  const char *s2r = "{Derived=#ib32b8b3b8sb16b8b8b2b8ccb6b0}";
#else
  const char *s2r = "{Derived=#ib32b8b3b8sb16b8b8b2b8ccb6}";
#endif
  /* APPLE LOCAL end objc2 */
  const char *s2 = @encode(Derived);

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

  return 0;
}
