Mercurial > hg > CbC > CbC_llvm
view clang/test/Analysis/objc-indirect-copy-restore.m @ 236:c4bab56944e8 llvm-original
LLVM 16
author | kono |
---|---|
date | Wed, 09 Nov 2022 17:45:10 +0900 |
parents | 79ff65ed7e25 |
children |
line wrap: on
line source
// RUN: %clang_analyze_cc1 -fobjc-arc -analyzer-checker=core,debug.ExprInspection -verify %s void clang_analyzer_eval(int); void clang_analyzer_warnIfReached(void); extern void __assert_fail (__const char *__assertion, __const char *__file, unsigned int __line, __const char *__function) __attribute__ ((__noreturn__)); #define assert(expr) \ ((expr) ? (void)(0) : __assert_fail (#expr, __FILE__, __LINE__, __func__)) @protocol NSObject + (nonnull instancetype)alloc; - (nonnull instancetype)init; @end @interface NSObject <NSObject> {} @end @interface NSError : NSObject { @public int x; } @end @interface SomeClass : NSObject + (int)doSomethingWithError:(NSError *__autoreleasing *)error; @end @implementation SomeClass + (int)doSomethingWithError:(NSError *__autoreleasing *)error { if (error) { NSError *e = [[NSError alloc] init]; assert(e); e->x = 5; *error = e; clang_analyzer_eval(*error != 0); // expected-warning{{TRUE}} } return 0; } @end void testStrongOutParam(void) { NSError *error; clang_analyzer_eval(error != 0); // expected-warning{{FALSE}} int ok = [SomeClass doSomethingWithError:&error]; clang_analyzer_eval(ok); // expected-warning{{FALSE}} clang_analyzer_eval(error != 0); // expected-warning{{TRUE}} clang_analyzer_eval(error->x == 5); // expected-warning{{TRUE}} } void testAutoreleasingOutParam(void) { NSError *__autoreleasing error; clang_analyzer_eval(error != 0); // expected-warning{{FALSE}} int ok = [SomeClass doSomethingWithError:&error]; clang_analyzer_eval(ok); // expected-warning{{FALSE}} clang_analyzer_eval(error != 0); // expected-warning{{TRUE}} clang_analyzer_eval(error->x == 5); // expected-warning{{TRUE}} } void testNilOutParam(void) { int ok = [SomeClass doSomethingWithError:(void *)0]; clang_analyzer_eval(ok); // expected-warning{{FALSE}} }