Mercurial > hg > CbC > CbC_llvm
diff clang/test/Sema/warn-self-assign-field.mm @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clang/test/Sema/warn-self-assign-field.mm Thu Feb 13 15:10:13 2020 +0900 @@ -0,0 +1,66 @@ +// 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