// RUN: cp %s %t
// RUN: %clang_cc1 -x objective-c -fixit %t
// RUN: %clang_cc1 -x objective-c -Werror %t
// rdar://13503456

void object_setClass(id, id);
Class object_getClass(id);

id rhs();

Class pr6302(id x123) {
  x123->isa  = 0;
  x123->isa = rhs();
  x123->isa = (id)(x123->isa);
  x123->isa = (id)x123->isa;
  x123->isa = (x123->isa);
  x123->isa = (id)(x123->isa);
  return x123->isa;
}


@interface BaseClass {
@public
    Class isa; // expected-note 3 {{instance variable is declared here}}
}
@end

@interface OtherClass {
@public
    id    firstIvar;
    Class isa; // note, not first ivar;
}
@end

@interface Subclass : BaseClass @end

@interface SiblingClass : BaseClass @end

@interface Root @end

@interface hasIsa : Root {
@public
  Class isa; // note, isa is not in root class
}
@end

@implementation Subclass
-(void)method {
    hasIsa *u;
    id v;
    BaseClass *w;
    Subclass *x;
    SiblingClass *y;
    OtherClass *z;
    (void)v->isa; 
    (void)w->isa;
    (void)x->isa;
    (void)y->isa;
    (void)z->isa;
    (void)u->isa;
    y->isa = 0;
    y->isa = w->isa;
    x->isa = rhs();
}
@end

