/* Test errors for accessing @private and @protected variables.  */
/* Based on work by: Nicola Pero <nicola@brainstorm.co.uk>.  */
/* { dg-do compile } */
// { dg-additional-options "-Wno-objc-root-class" }
#include <objc/objc.h>

@interface MySuperClass
{
@private
  int _private;

@protected
  int _protected;

@public
  int _public;
}
- (void) test;
@end

@implementation MySuperClass
- (void) test
{
  _private = 12;   /* Ok  */
  _protected = 12; /* Ok  */
  _public = 12;    /* Ok  */
}
@end


@interface MyClass : MySuperClass 
@end

@implementation MyClass
- (void) test
{
  /* Private variables simply don't exist in the subclass.  */
  _private = 12; /* { dg-error "instance variable \\'_private\\' is declared private" } */

  _protected = 12; /* Ok  */
  _public = 12;    /* Ok  */
}
@end

int main (void)
{
  MyClass *m = nil;
  
  if (m != nil)
    {
      int access;

      access = m->_private;   /* { dg-warning "is @private" }  */
      access = m->_protected; /* { dg-warning "is @protected" }  */
      access = m->_public;    /* Ok  */
    }

  return 0;
}
