// RUN: %clang_cc1 -fsyntax-only -Wno-objc-root-class -verify %s
classS{public:int a_;voids(inta){
a_ = a_;// expected-warning {{assigning field to itself}}
// Don't really care about this one either way.
this->a_= a_;// expected-warning {{assigning field to itself}}
a_ += a_;// Shouldn't warn.
}};voidf0(S*s){// Would be nice to have, but not important.
s->a_= s->a_;}voidf1(S*s, S*t){// Shouldn't warn.
t->a_= s->a_;}structT{
S* s_;};voidf2(T*t){// Would be nice to have, but even less important.
t->s_->a_= t->s_->a_;}voidf3(T*t, T*t2){// Shouldn't warn.
t2->s_->a_= t->s_->a_;}voidf4(inti){// This is a common pattern to silence "parameter unused". Shouldn't warn.
i = i;int j =0;
j = j;// Likewise.
}@interfaceI{int a_;}@end@implementationI- (void)setA:(int)a{
a_ = a_;// expected-warning {{assigning instance variable to itself}}
}- (void)foo:(I*)i{// Don't care much about this warning.
i->a_= i->a_;// expected-warning {{assigning instance variable to itself}}
// Shouldn't warn.
a_ = i->a_;
i->a_= a_;}@end