annotate clang/test/CodeGenObjC/ubsan-bool.m @ 180:680fa57a2f20

fix compile errors.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 30 May 2020 17:44:06 +0900
parents 1d019706d866
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: %clang_cc1 -x objective-c -emit-llvm -triple x86_64-apple-macosx10.10.0 -fsanitize=bool %s -o - -w | FileCheck %s -check-prefixes=SHARED,OBJC
anatofuz
parents:
diff changeset
2 // RUN: %clang_cc1 -x objective-c++ -emit-llvm -triple x86_64-apple-macosx10.10.0 -fsanitize=bool %s -o - -w | FileCheck %s -check-prefixes=SHARED,OBJC
anatofuz
parents:
diff changeset
3 // RUN: %clang_cc1 -x c -emit-llvm -triple x86_64-apple-macosx10.10.0 -fsanitize=bool %s -o - | FileCheck %s -check-prefixes=SHARED,C
anatofuz
parents:
diff changeset
4
anatofuz
parents:
diff changeset
5 typedef signed char BOOL;
anatofuz
parents:
diff changeset
6
anatofuz
parents:
diff changeset
7 // SHARED-LABEL: f1
anatofuz
parents:
diff changeset
8 BOOL f1() {
anatofuz
parents:
diff changeset
9 // OBJC: call void @__ubsan_handle_load_invalid_value
anatofuz
parents:
diff changeset
10 // C-NOT: call void @__ubsan_handle_load_invalid_value
anatofuz
parents:
diff changeset
11 BOOL a = 2;
anatofuz
parents:
diff changeset
12 return a + 1;
anatofuz
parents:
diff changeset
13 // SHARED: ret i8
anatofuz
parents:
diff changeset
14 }
anatofuz
parents:
diff changeset
15
anatofuz
parents:
diff changeset
16 struct S1 {
anatofuz
parents:
diff changeset
17 BOOL b1 : 1;
anatofuz
parents:
diff changeset
18 };
anatofuz
parents:
diff changeset
19
anatofuz
parents:
diff changeset
20 // SHARED-LABEL: f2
anatofuz
parents:
diff changeset
21 BOOL f2(struct S1 *s) {
anatofuz
parents:
diff changeset
22 // OBJC: [[LOAD:%.*]] = load i8, i8* {{.*}}
anatofuz
parents:
diff changeset
23 // OBJC: [[SHL:%.*]] = shl i8 [[LOAD]], 7
anatofuz
parents:
diff changeset
24 // OBJC: [[ASHR:%.*]] = ashr i8 [[SHL]], 7
anatofuz
parents:
diff changeset
25 // OBJC: icmp ule i8 [[ASHR]], 1, !nosanitize
anatofuz
parents:
diff changeset
26 // OBJC: call void @__ubsan_handle_load_invalid_value
anatofuz
parents:
diff changeset
27
anatofuz
parents:
diff changeset
28 // C-NOT: call void @__ubsan_handle_load_invalid_value
anatofuz
parents:
diff changeset
29 return s->b1;
anatofuz
parents:
diff changeset
30 // SHARED: ret i8
anatofuz
parents:
diff changeset
31 }
anatofuz
parents:
diff changeset
32
anatofuz
parents:
diff changeset
33 #ifdef __OBJC__
anatofuz
parents:
diff changeset
34 @interface I1 {
anatofuz
parents:
diff changeset
35 @public
anatofuz
parents:
diff changeset
36 BOOL b1 : 1;
anatofuz
parents:
diff changeset
37 }
anatofuz
parents:
diff changeset
38 @property (nonatomic) BOOL b1;
anatofuz
parents:
diff changeset
39 @end
anatofuz
parents:
diff changeset
40 @implementation I1
anatofuz
parents:
diff changeset
41 @synthesize b1;
anatofuz
parents:
diff changeset
42 @end
anatofuz
parents:
diff changeset
43
anatofuz
parents:
diff changeset
44 // Check the synthesized getter.
anatofuz
parents:
diff changeset
45 // OBJC-LABEL: define internal signext i8 @"\01-[I1 b1]"
anatofuz
parents:
diff changeset
46 // OBJC: [[IVAR:%.*]] = load i64, i64* @"OBJC_IVAR_$_I1.b1"
anatofuz
parents:
diff changeset
47 // OBJC: [[ADDR:%.*]] = getelementptr inbounds i8, i8* {{.*}}, i64 [[IVAR]]
anatofuz
parents:
diff changeset
48 // OBJC: [[LOAD:%.*]] = load i8, i8* {{.*}}
anatofuz
parents:
diff changeset
49 // OBJC: [[SHL:%.*]] = shl i8 [[LOAD]], 7
anatofuz
parents:
diff changeset
50 // OBJC: [[ASHR:%.*]] = ashr i8 [[SHL]], 7
anatofuz
parents:
diff changeset
51 // OBJC: icmp ule i8 [[ASHR]], 1, !nosanitize
anatofuz
parents:
diff changeset
52 // OBJC: call void @__ubsan_handle_load_invalid_value
anatofuz
parents:
diff changeset
53
anatofuz
parents:
diff changeset
54 // Also check direct accesses to the ivar.
anatofuz
parents:
diff changeset
55 // OBJC-LABEL: f3
anatofuz
parents:
diff changeset
56 BOOL f3(I1 *i) {
anatofuz
parents:
diff changeset
57 // OBJC: [[LOAD:%.*]] = load i8, i8* {{.*}}
anatofuz
parents:
diff changeset
58 // OBJC: [[SHL:%.*]] = shl i8 [[LOAD]], 7
anatofuz
parents:
diff changeset
59 // OBJC: [[ASHR:%.*]] = ashr i8 [[SHL]], 7
anatofuz
parents:
diff changeset
60 // OBJC: icmp ule i8 [[ASHR]], 1, !nosanitize
anatofuz
parents:
diff changeset
61 // OBJC: call void @__ubsan_handle_load_invalid_value
anatofuz
parents:
diff changeset
62
anatofuz
parents:
diff changeset
63 return i->b1;
anatofuz
parents:
diff changeset
64 // OBJC: ret i8
anatofuz
parents:
diff changeset
65 }
anatofuz
parents:
diff changeset
66 #endif /* __OBJC__ */