49 lines · plain
1// RUN: %clang_cc1 -x objective-c -emit-llvm -triple x86_64-apple-macosx10.10.0 -fsanitize=nonnull-attribute %s -o - -w | FileCheck %s2 3@interface A4 5-(void) one_arg: (__attribute__((nonnull)) int *) arg1;6 7-(void) varargs: (__attribute__((nonnull)) int *) arg1, ...;8 9+(void) clsmethod: (__attribute__((nonnull)) int *) arg1;10 11@end12 13@implementation A14 15// CHECK-LABEL: define internal void @"\01-[A one_arg:]"16// CHECK-SAME: ptr noundef nonnull17-(void) one_arg: (__attribute__((nonnull)) int *) arg1 {}18 19// CHECK-LABEL: define internal void @"\01-[A varargs:]"20// CHECK-SAME: ptr noundef nonnull21-(void) varargs: (__attribute__((nonnull)) int *) arg1, ... {}22 23// CHECK-LABEL: define internal void @"\01+[A clsmethod:]"24// CHECK-SAME: ptr noundef nonnull25+(void) clsmethod: (__attribute__((nonnull)) int *) arg1 {}26 27@end28 29// CHECK-LABEL: define{{.*}} void @call_A30void call_A(A *a, int *p) {31 // CHECK: [[ICMP:%.*]] = icmp ne ptr [[P1:%.*]], null, !nosanitize32 // CHECK: br i1 [[ICMP]], {{.*}}, !nosanitize33 // CHECK: call void @__ubsan_handle_nonnull_arg{{.*}} !nosanitize34 // CHECK: call void @objc_msgSend({{.*}}, ptr noundef [[P1]])35 [a one_arg: p];36 37 // CHECK: [[ICMP:%.*]] = icmp ne ptr [[P2:%.*]], null, !nosanitize38 // CHECK: br i1 [[ICMP]], {{.*}}, !nosanitize39 // CHECK: call void @__ubsan_handle_nonnull_arg{{.*}} !nosanitize40 // CHECK: call void (ptr, ptr, ptr, ...) @objc_msgSend({{.*}}, ptr noundef [[P2]], {{.*}})41 [a varargs: p, p];42 43 // CHECK: [[ICMP:%.*]] = icmp ne ptr [[P3:%.*]], null, !nosanitize44 // CHECK: br i1 [[ICMP]], {{.*}}, !nosanitize45 // CHECK: call void @__ubsan_handle_nonnull_arg{{.*}} !nosanitize46 // CHECK: call void @objc_msgSend({{.*}}, ptr noundef [[P3]])47 [A clsmethod: p];48}49