/* Ensure there are no bizarre difficulties with accessing the 'isa' field of objects.  */
/* { dg-options "-Wno-deprecated-objc-isa-usage" } */
/* { dg-do compile } */

/* APPLE LOCAL radar 4894756 */
#include "../objc/execute/Object2.h"

@interface Object (Test)
- (Class) test1: (id)object;
@end

@interface Derived: Object
- (Class) test2: (id)object;
@end

@implementation Object (Test)

Class test1(id object) {
  Class cls = object->isa;
  return cls;
}
- (Class) test1: (id)object {
  Class cls = object->isa;
  return cls;
}

@end

@implementation Derived

Class test2(id object) {
  Class cls = object->isa;
  return cls;
}
- (Class) test2: (id)object {
  Class cls = object->isa;
  return cls;
}

@end

Class test3(id object) {
  Class cls = object->isa;
  return cls;
}
