1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -Wno-objc-root-class -verify %s 2*67e74705SXin Li 3*67e74705SXin Liclass S { 4*67e74705SXin Li public: 5*67e74705SXin Li int a_; 6*67e74705SXin Li void s(int a) { 7*67e74705SXin Li a_ = a_; // expected-warning {{assigning field to itself}} 8*67e74705SXin Li 9*67e74705SXin Li // Don't really care about this one either way. 10*67e74705SXin Li this->a_ = a_; // expected-warning {{assigning field to itself}} 11*67e74705SXin Li 12*67e74705SXin Li a_ += a_; // Shouldn't warn. 13*67e74705SXin Li } 14*67e74705SXin Li}; 15*67e74705SXin Li 16*67e74705SXin Livoid f0(S* s) { 17*67e74705SXin Li // Would be nice to have, but not important. 18*67e74705SXin Li s->a_ = s->a_; 19*67e74705SXin Li} 20*67e74705SXin Li 21*67e74705SXin Livoid f1(S* s, S* t) { 22*67e74705SXin Li // Shouldn't warn. 23*67e74705SXin Li t->a_ = s->a_; 24*67e74705SXin Li} 25*67e74705SXin Li 26*67e74705SXin Listruct T { 27*67e74705SXin Li S* s_; 28*67e74705SXin Li}; 29*67e74705SXin Li 30*67e74705SXin Livoid f2(T* t) { 31*67e74705SXin Li // Would be nice to have, but even less important. 32*67e74705SXin Li t->s_->a_ = t->s_->a_; 33*67e74705SXin Li} 34*67e74705SXin Li 35*67e74705SXin Livoid f3(T* t, T* t2) { 36*67e74705SXin Li // Shouldn't warn. 37*67e74705SXin Li t2->s_->a_ = t->s_->a_; 38*67e74705SXin Li} 39*67e74705SXin Li 40*67e74705SXin Livoid f4(int i) { 41*67e74705SXin Li // This is a common pattern to silence "parameter unused". Shouldn't warn. 42*67e74705SXin Li i = i; 43*67e74705SXin Li 44*67e74705SXin Li int j = 0; 45*67e74705SXin Li j = j; // Likewise. 46*67e74705SXin Li} 47*67e74705SXin Li 48*67e74705SXin Li@interface I { 49*67e74705SXin Li int a_; 50*67e74705SXin Li} 51*67e74705SXin Li@end 52*67e74705SXin Li 53*67e74705SXin Li@implementation I 54*67e74705SXin Li- (void)setA:(int)a { 55*67e74705SXin Li a_ = a_; // expected-warning {{assigning instance variable to itself}} 56*67e74705SXin Li} 57*67e74705SXin Li 58*67e74705SXin Li- (void)foo:(I*)i { 59*67e74705SXin Li // Don't care much about this warning. 60*67e74705SXin Li i->a_ = i->a_; // expected-warning {{assigning instance variable to itself}} 61*67e74705SXin Li 62*67e74705SXin Li // Shouldn't warn. 63*67e74705SXin Li a_ = i->a_; 64*67e74705SXin Li i->a_ = a_; 65*67e74705SXin Li} 66*67e74705SXin Li@end 67