xref: /llvm-project/clang/test/SemaObjC/idiomatic-parentheses.m (revision 0f1c1be1968076d6f96f8a7bcc4a15cf195ecd97)
1// RUN: %clang_cc1 -fsyntax-only -verify -Wparentheses -Wno-objc-root-class %s
2
3// Don't warn about some common ObjC idioms unless we have -Widiomatic-parentheses on.
4
5@interface Object
6{
7  unsigned uid;
8}
9- (id) init;
10- (id) initWithInt: (int) i;
11- (id) myInit __attribute__((objc_method_family(init)));
12- (void) iterate: (id) coll;
13- (id) nextObject;
14@property unsigned uid;
15@end
16
17@implementation Object
18@synthesize uid;
19- (id) init {
20  if (self = [self init]) {
21  }
22  return self;
23}
24
25- (id) initWithInt: (int) i {
26  if (self = [self initWithInt: i]) {
27  }
28  if (self.uid = 100) { // expected-warning {{using the result of an assignment as a condition without parentheses}} \
29                        // expected-note {{place parentheses around the assignment to silence this warning}} \
30                        // expected-note {{use '==' to turn this assignment into an equality comparison}}
31        // ...
32  }
33  return self;
34}
35
36- (id) myInit {
37  if (self = [self myInit]) {
38  }
39  return self;
40}
41
42- (void) iterate: (id) coll {
43  id cur;
44  while (cur = [coll nextObject]) {
45  }
46}
47
48- (id) nextObject {
49  return self;
50}
51@end
52