67 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
// RUN: %clang_cc1 -fsyntax-only -Wno-objc-root-class -verify %s
 | 
						|
 | 
						|
class S {
 | 
						|
 public:
 | 
						|
  int a_;
 | 
						|
  void s(int a) {
 | 
						|
    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.
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
void f0(S* s) {
 | 
						|
  // Would be nice to have, but not important.
 | 
						|
  s->a_ = s->a_;
 | 
						|
}
 | 
						|
 | 
						|
void f1(S* s, S* t) {
 | 
						|
  // Shouldn't warn.
 | 
						|
  t->a_ = s->a_;
 | 
						|
}
 | 
						|
 | 
						|
struct T {
 | 
						|
  S* s_;
 | 
						|
};
 | 
						|
 | 
						|
void f2(T* t) {
 | 
						|
  // Would be nice to have, but even less important.
 | 
						|
  t->s_->a_ = t->s_->a_;
 | 
						|
}
 | 
						|
 | 
						|
void f3(T* t, T* t2) {
 | 
						|
  // Shouldn't warn.
 | 
						|
  t2->s_->a_ = t->s_->a_;
 | 
						|
}
 | 
						|
 | 
						|
void f4(int i) {
 | 
						|
  // This is a common pattern to silence "parameter unused". Shouldn't warn.
 | 
						|
  i = i;
 | 
						|
 | 
						|
  int j = 0;
 | 
						|
  j = j;  // Likewise.
 | 
						|
}
 | 
						|
 | 
						|
@interface I {
 | 
						|
  int a_;
 | 
						|
}
 | 
						|
@end
 | 
						|
 | 
						|
@implementation I
 | 
						|
- (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
 |