99 lines · plain
1// RUN: %clang_analyze_cc1 -analyzer-checker=core,osx.cocoa.RetainCount,debug.ExprInspection -verify -Wno-objc-root-class %s2// RUN: %clang_analyze_cc1 -analyzer-checker=core,osx.cocoa.RetainCount,debug.ExprInspection -verify -Wno-objc-root-class -fobjc-arc %s3 4void clang_analyzer_eval(bool);5void clang_analyzer_checkInlined(bool);6 7@interface IntWrapper8@property (readonly) int &value;9@end10 11@implementation IntWrapper12@synthesize value;13@end14 15void 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}}18 19 if (w.value != 42)20 return;21 22 clang_analyzer_eval(w.value == 42); // expected-warning{{TRUE}}23}24 25void testReferenceAssignment(IntWrapper *w) {26 w.value = 42;27 clang_analyzer_eval(w.value == 42); // expected-warning{{TRUE}}28}29 30 31struct IntWrapperStruct {32 int value;33};34 35@interface StructWrapper36@property IntWrapperStruct inner;37@end38 39@implementation StructWrapper40@synthesize inner;41@end42 43void testConsistencyStruct(StructWrapper *w) {44 clang_analyzer_eval(w.inner.value == w.inner.value); // expected-warning{{TRUE}}45 46 int origValue = w.inner.value;47 if (origValue != 42)48 return;49 50 clang_analyzer_eval(w.inner.value == 42); // expected-warning{{TRUE}}51}52 53 54class CustomCopy {55public:56 CustomCopy() : value(0) {}57 CustomCopy(const CustomCopy &other) : value(other.value) {58 clang_analyzer_checkInlined(true); // expected-warning{{TRUE}}59 }60 int value;61};62 63@interface CustomCopyWrapper64@property CustomCopy inner;65@end66 67@implementation CustomCopyWrapper68//@synthesize inner;69@end70 71void testConsistencyCustomCopy(CustomCopyWrapper *w) {72 clang_analyzer_eval(w.inner.value == w.inner.value); // expected-warning{{TRUE}}73 74 int origValue = w.inner.value;75 if (origValue != 42)76 return;77 78 clang_analyzer_eval(w.inner.value == 42); // expected-warning{{TRUE}}79}80 81@protocol NoDirectPropertyDecl82@property IntWrapperStruct inner;83@end84@interface NoDirectPropertyDecl <NoDirectPropertyDecl>85@end86@implementation NoDirectPropertyDecl87@synthesize inner;88@end89 90void testNoDirectPropertyDecl(NoDirectPropertyDecl *w) {91 clang_analyzer_eval(w.inner.value == w.inner.value); // expected-warning{{TRUE}}92 93 int origValue = w.inner.value;94 if (origValue != 42)95 return;96 97 clang_analyzer_eval(w.inner.value == 42); // expected-warning{{TRUE}}98}99