/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010.  */
/* { dg-do compile } */
/* { dg-options "-Wall" } */

/* Test warnings with the dot-syntax.  */

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

@interface MyRootClass
{
  Class isa;
  id a;
  id b;
  int p1;
  int p2;
}
+ (id) initialize;
+ (id) alloc;
- (id) init;

@property int p1;
@property int p2;
@end

@implementation MyRootClass
+ (id) initialize { return self; }
+ (id) alloc { return class_createInstance (self, 0); }
- (id) init { return self; }
@synthesize p1;
@synthesize p2;
@end

int main (void)
{
  MyRootClass *object = [[MyRootClass alloc] init];

  /* First, test that the artificial code generated by dot-syntax does
     not generate unexpected warnings.  */

  /* All of the following should generate no warnings.  */
  object.p1 = 0;
  object.p2 = 0;
  object.p1 = object.p2 = 0;
  if (object.p1 > 0)
    object.p2 = 0;
  
  object.p1++;
  ++object.p1;
  object.p1--;
  --object.p1;
  
  while (object.p1)
    object.p1--;

  /* Now test some warnings.  */
  object.p1; /* { dg-warning "value computed is not used" } */

  /* TODO: It would be good to get the following to warn.  */
  if (object.p1 = 0) /* dg-warning "suggest parentheses around assignment used as truth value" */
    abort ();

  return 0;
}


