• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -w -emit-llvm -o - %s -fsanitize=builtin | FileCheck %s
2 // RUN: %clang_cc1 -triple arm64-none-linux-gnu -w -emit-llvm -o - %s -fsanitize=builtin | FileCheck %s --check-prefix=NOT-UB
3 
4 // NOT-UB-NOT: __ubsan_handle_invalid_builtin
5 
6 // CHECK: define void @check_ctz
check_ctz(int n)7 void check_ctz(int n) {
8   // CHECK: [[NOT_ZERO:%.*]] = icmp ne i32 [[N:%.*]], 0, !nosanitize
9   // CHECK-NEXT: br i1 [[NOT_ZERO]]
10   //
11   // Handler block:
12   // CHECK: call void @__ubsan_handle_invalid_builtin
13   // CHECK-NEXT: unreachable
14   //
15   // Continuation block:
16   // CHECK: call i32 @llvm.cttz.i32(i32 [[N]], i1 true)
17   __builtin_ctz(n);
18 
19   // CHECK: call void @__ubsan_handle_invalid_builtin
20   __builtin_ctzl(n);
21 
22   // CHECK: call void @__ubsan_handle_invalid_builtin
23   __builtin_ctzll(n);
24 }
25 
26 // CHECK: define void @check_clz
check_clz(int n)27 void check_clz(int n) {
28   // CHECK: [[NOT_ZERO:%.*]] = icmp ne i32 [[N:%.*]], 0, !nosanitize
29   // CHECK-NEXT: br i1 [[NOT_ZERO]]
30   //
31   // Handler block:
32   // CHECK: call void @__ubsan_handle_invalid_builtin
33   // CHECK-NEXT: unreachable
34   //
35   // Continuation block:
36   // CHECK: call i32 @llvm.ctlz.i32(i32 [[N]], i1 true)
37   __builtin_clz(n);
38 
39   // CHECK: call void @__ubsan_handle_invalid_builtin
40   __builtin_clzl(n);
41 
42   // CHECK: call void @__ubsan_handle_invalid_builtin
43   __builtin_clzll(n);
44 }
45