[AMDGPU][AsmParser][NFC] Get rid of custom default operand handlers.
[llvm-project.git] / clang / test / Analysis / properties.mm
blobcad92e47e6980445bd1d75fb09a1518942254f18
1 // RUN: %clang_analyze_cc1 -analyzer-checker=core,osx.cocoa.RetainCount,debug.ExprInspection -verify -Wno-objc-root-class %s
2 // RUN: %clang_analyze_cc1 -analyzer-checker=core,osx.cocoa.RetainCount,debug.ExprInspection -verify -Wno-objc-root-class -fobjc-arc %s
4 void clang_analyzer_eval(bool);
5 void clang_analyzer_checkInlined(bool);
7 @interface IntWrapper
8 @property (readonly) int &value;
9 @end
11 @implementation IntWrapper
12 @synthesize value;
13 @end
15 void testReferenceConsistency(IntWrapper *w) {
16   clang_analyzer_eval(w.value == w.value); // expected-warning{{TRUE}}
17   clang_analyzer_eval(&w.value == &w.value); // expected-warning{{TRUE}}
19   if (w.value != 42)
20     return;
22   clang_analyzer_eval(w.value == 42); // expected-warning{{TRUE}}
25 void testReferenceAssignment(IntWrapper *w) {
26   w.value = 42;
27   clang_analyzer_eval(w.value == 42); // expected-warning{{TRUE}}
31 struct IntWrapperStruct {
32   int value;
35 @interface StructWrapper
36 @property IntWrapperStruct inner;
37 @end
39 @implementation StructWrapper
40 @synthesize inner;
41 @end
43 void testConsistencyStruct(StructWrapper *w) {
44   clang_analyzer_eval(w.inner.value == w.inner.value); // expected-warning{{TRUE}}
46   int origValue = w.inner.value;
47   if (origValue != 42)
48     return;
50   clang_analyzer_eval(w.inner.value == 42); // expected-warning{{TRUE}}
54 class CustomCopy {
55 public:
56   CustomCopy() : value(0) {}
57   CustomCopy(const CustomCopy &other) : value(other.value) {
58     clang_analyzer_checkInlined(true); // expected-warning{{TRUE}}
59   }
60   int value;
63 @interface CustomCopyWrapper
64 @property CustomCopy inner;
65 @end
67 @implementation CustomCopyWrapper
68 //@synthesize inner;
69 @end
71 void testConsistencyCustomCopy(CustomCopyWrapper *w) {
72   clang_analyzer_eval(w.inner.value == w.inner.value); // expected-warning{{TRUE}}
74   int origValue = w.inner.value;
75   if (origValue != 42)
76     return;
78   clang_analyzer_eval(w.inner.value == 42); // expected-warning{{TRUE}}
81 @protocol NoDirectPropertyDecl
82 @property IntWrapperStruct inner;
83 @end
84 @interface NoDirectPropertyDecl <NoDirectPropertyDecl>
85 @end
86 @implementation NoDirectPropertyDecl
87 @synthesize inner;
88 @end
90 // rdar://67416721
91 void testNoDirectPropertyDecl(NoDirectPropertyDecl *w) {
92   clang_analyzer_eval(w.inner.value == w.inner.value); // expected-warning{{TRUE}}
94   int origValue = w.inner.value;
95   if (origValue != 42)
96     return;
98   clang_analyzer_eval(w.inner.value == 42); // expected-warning{{TRUE}}