Clang Project

clang_source_code/test/CodeGen/sanitize-atomic-int-overflow.c
1// RUN: %clang_cc1 -triple x86_64-apple-macosx10.14.0 -fsanitize=unsigned-integer-overflow %s -emit-llvm -o - | FileCheck %s
2
3_Atomic(unsigned) atomic;
4
5// CHECK-LABEL: define void @cmpd_assign
6void cmpd_assign() {
7  // CHECK: br label %[[LOOP_START:.*]]
8
9  // CHECK: [[LOOP_START]]:
10  // CHECK-NEXT: phi i32 {{.*}}, [ {{.*}}, %[[INCOMING_BLOCK:.*]] ]
11
12  // CHECK: [[INCOMING_BLOCK]]:
13  // CHECK-NEXT: cmpxchg
14  // CHECK-NEXT: extractvalue
15  // CHECK-NEXT: extractvalue
16  // CHECK-NEXT: br i1 %8, label %{{.*}}, label %[[LOOP_START]]
17  atomic += 1;
18}
19
20// CHECK-LABEL: define void @inc
21void inc() {
22  // CHECK: br label %[[LOOP_START:.*]]
23
24  // CHECK: [[LOOP_START]]:
25  // CHECK-NEXT: phi i32 {{.*}}, [ {{.*}}, %[[INCOMING_BLOCK:.*]] ]
26
27  // CHECK: [[INCOMING_BLOCK]]:
28  // CHECK-NEXT: cmpxchg
29  // CHECK-NEXT: extractvalue
30  // CHECK-NEXT: extractvalue
31  // CHECK-NEXT: br i1 %8, label %{{.*}}, label %[[LOOP_START]]
32  atomic++;
33}
34