diff options
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/Analysis/Inputs/system-header-simulator-for-nullability.h | 42 | ||||
| -rw-r--r-- | clang/test/Analysis/nullability.mm | 58 | ||||
| -rw-r--r-- | clang/test/Analysis/nullability_nullonly.mm | 41 |
3 files changed, 91 insertions, 50 deletions
diff --git a/clang/test/Analysis/Inputs/system-header-simulator-for-nullability.h b/clang/test/Analysis/Inputs/system-header-simulator-for-nullability.h new file mode 100644 index 00000000000..9bb2786bd7f --- /dev/null +++ b/clang/test/Analysis/Inputs/system-header-simulator-for-nullability.h @@ -0,0 +1,42 @@ +#pragma clang system_header + +#define nil 0 +#define BOOL int + +#define NS_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin") +#define NS_ASSUME_NONNULL_END _Pragma("clang assume_nonnull end") + +NS_ASSUME_NONNULL_BEGIN + +typedef struct _NSZone NSZone; + +@protocol NSObject ++ (id)alloc; +- (id)init; +@end + +@protocol NSCopying +- (id)copyWithZone:(nullable NSZone *)zone; +@end + +@protocol NSMutableCopying +- (id)mutableCopyWithZone:(nullable NSZone *)zone; +@end + +__attribute__((objc_root_class)) +@interface +NSObject<NSObject> +@end + +@interface NSString : NSObject<NSCopying> +- (BOOL)isEqualToString : (NSString *)aString; +- (NSString *)stringByAppendingString:(NSString *)aString; +@end + +void NSSystemFunctionTakingNonnull(NSString *s); + +@interface NSSystemClass : NSObject +- (void) takesNonnull:(NSString *)s; +@end + +NS_ASSUME_NONNULL_END diff --git a/clang/test/Analysis/nullability.mm b/clang/test/Analysis/nullability.mm index 220a38118aa..0a3ae7a1968 100644 --- a/clang/test/Analysis/nullability.mm +++ b/clang/test/Analysis/nullability.mm @@ -1,38 +1,7 @@ -// RUN: %clang_cc1 -fblocks -analyze -analyzer-checker=core,nullability -verify %s +// RUN: %clang_cc1 -fblocks -analyze -analyzer-checker=core,nullability -DNOSYSTEMHEADERS=0 -verify %s +// RUN: %clang_cc1 -fblocks -analyze -analyzer-checker=core,nullability -analyzer-config nullability:NoDiagnoseCallsToSystemHeaders=true -DNOSYSTEMHEADERS=1 -verify %s -#define nil 0 -#define BOOL int - -#define NS_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin") -#define NS_ASSUME_NONNULL_END _Pragma("clang assume_nonnull end") - -typedef struct _NSZone NSZone; - -@protocol NSObject -+ (id)alloc; -- (id)init; -@end - -NS_ASSUME_NONNULL_BEGIN -@protocol NSCopying -- (id)copyWithZone:(nullable NSZone *)zone; - -@end - -@protocol NSMutableCopying -- (id)mutableCopyWithZone:(nullable NSZone *)zone; -@end -NS_ASSUME_NONNULL_END - -__attribute__((objc_root_class)) -@interface -NSObject<NSObject> -@end - -@interface NSString : NSObject<NSCopying> -- (BOOL)isEqualToString : (NSString *_Nonnull)aString; -- (NSString *)stringByAppendingString:(NSString *_Nonnull)aString; -@end +#include "Inputs/system-header-simulator-for-nullability.h" @interface TestObject : NSObject - (int *_Nonnull)returnsNonnull; @@ -419,3 +388,24 @@ Dummy *_Nonnull testDefensiveInlineChecks(Dummy * p) { return newInstance; } @end + +NSString * _Nullable returnsNullableString(); + +void callFunctionInSystemHeader() { + NSString *s = returnsNullableString(); + + NSSystemFunctionTakingNonnull(s); + #if !NOSYSTEMHEADERS + // expected-warning@-2{{Nullable pointer is passed to a callee that requires a non-null 1st parameter}} + #endif +} + +void callMethodInSystemHeader() { + NSString *s = returnsNullableString(); + + NSSystemClass *sc = [[NSSystemClass alloc] init]; + [sc takesNonnull:s]; + #if !NOSYSTEMHEADERS + // expected-warning@-2{{Nullable pointer is passed to a callee that requires a non-null 1st parameter}} + #endif +} diff --git a/clang/test/Analysis/nullability_nullonly.mm b/clang/test/Analysis/nullability_nullonly.mm index d82105cf5b5..9671877719f 100644 --- a/clang/test/Analysis/nullability_nullonly.mm +++ b/clang/test/Analysis/nullability_nullonly.mm @@ -1,20 +1,7 @@ -// RUN: %clang_cc1 -analyze -fobjc-arc -analyzer-checker=core,nullability.NullPassedToNonnull,nullability.NullReturnedFromNonnull -verify %s +// RUN: %clang_cc1 -analyze -fobjc-arc -analyzer-checker=core,nullability.NullPassedToNonnull,nullability.NullReturnedFromNonnull -DNOSYSTEMHEADERS=0 -verify %s +// RUN: %clang_cc1 -analyze -fobjc-arc -analyzer-checker=core,nullability.NullPassedToNonnull,nullability.NullReturnedFromNonnull -analyzer-config nullability:NoDiagnoseCallsToSystemHeaders=true -DNOSYSTEMHEADERS=1 -verify %s -#define nil 0 -#define BOOL int - -@protocol NSObject -+ (id)alloc; -- (id)init; -@end - -@protocol NSCopying -@end - -__attribute__((objc_root_class)) -@interface -NSObject<NSObject> -@end +#include "Inputs/system-header-simulator-for-nullability.h" int getRandom(); @@ -159,3 +146,25 @@ TestObject * _Nonnull returnsNilObjCInstanceDirectlyWithSuppressingCast() { return p; // no-warning } @end + + +void callFunctionInSystemHeader() { + NSString *s; + s = nil; + + NSSystemFunctionTakingNonnull(s); + #if !NOSYSTEMHEADERS + // expected-warning@-2{{Null passed to a callee that requires a non-null 1st parameter}} + #endif +} + +void callMethodInSystemHeader() { + NSString *s; + s = nil; + + NSSystemClass *sc = [[NSSystemClass alloc] init]; + [sc takesNonnull:s]; + #if !NOSYSTEMHEADERS + // expected-warning@-2{{Null passed to a callee that requires a non-null 1st parameter}} + #endif +} |

