| 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 |
| 6 | void 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 |
| 21 | void 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 | |