/* { dg-do compile } */
/* { dg-skip-if "No API#2 pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */
/* { dg-additional-options "-Wno-objc-root-class" } */

/* Test deprecate attribute with an @interface declaration.  */

#include <objc/objc.h>
#include <objc/runtime.h>

__attribute__ ((deprecated)) 
@interface DeprecatedClass
{
  Class isa;
}
+ (id) classObject;
+ (id) new;
@end

@implementation DeprecatedClass
+ (id) classObject { return self; }
+ (id) new { return nil; }
@end

@interface DeprecatedClass (Category) /* { dg-warning "is deprecated" } */
@end

@interface Subclass : DeprecatedClass /* { dg-warning "is deprecated" } */
@end

DeprecatedClass *object; /* { dg-warning "is deprecated" } */

int function (DeprecatedClass *object) /* { dg-warning "is deprecated" } */
{
  /* Note how the following deprecation warning is generated by
     "DeprecatedClass *", not by "[DeprecatedClass ...].  */
  DeprecatedClass *x = [DeprecatedClass new]; /* { dg-warning "is deprecated" } */

  if (x == object)
    return 0;
  else
    return 1;
}

id function2 (void)
{
  return DeprecatedClass.classObject; /* { dg-warning "is deprecated" } */
}

@interface NormalClass
{
  Class isa;
  DeprecatedClass *object; /* { dg-warning "is deprecated" } */
}
- (DeprecatedClass *)method; /* { dg-warning "is deprecated" } */
@end

@implementation NormalClass
- (DeprecatedClass *)method /* { dg-warning "is deprecated" } */
{
  return nil;
}
@end
