1 // RUN: %clang_cc1 -std=gnu++11 -emit-llvm -triple=x86_64-linux-gnu -o - %s | FileCheck %s 2 3 _Atomic unsigned an_atomic_uint; 4 5 enum { an_enum_value = 1 }; 6 7 // CHECK-LABEL: define {{.*}}void @_Z5enum1v() 8 void enum1() { 9 an_atomic_uint += an_enum_value; 10 // CHECK: atomicrmw add ptr 11 } 12 13 // CHECK-LABEL: define {{.*}}void @_Z5enum2v() 14 void enum2() { 15 an_atomic_uint |= an_enum_value; 16 // CHECK: atomicrmw or ptr 17 } 18 19 // CHECK-LABEL: define {{.*}}void @_Z5enum3RU7_Atomicj({{.*}}) 20 void enum3(_Atomic unsigned &an_atomic_uint_param) { 21 an_atomic_uint_param += an_enum_value; 22 // CHECK: atomicrmw add ptr 23 } 24 25 // CHECK-LABEL: define {{.*}}void @_Z5enum4RU7_Atomicj({{.*}}) 26 void enum4(_Atomic unsigned &an_atomic_uint_param) { 27 an_atomic_uint_param |= an_enum_value; 28 // CHECK: atomicrmw or ptr 29 } 30 31 volatile _Atomic unsigned an_volatile_atomic_uint; 32 33 // CHECK-LABEL: define {{.*}}void @_Z5enum5v() 34 void enum5() { 35 an_volatile_atomic_uint += an_enum_value; 36 // CHECK: atomicrmw add ptr 37 } 38 39 // CHECK-LABEL: define {{.*}}void @_Z5enum6v() 40 void enum6() { 41 an_volatile_atomic_uint |= an_enum_value; 42 // CHECK: atomicrmw or ptr 43 } 44 45 // CHECK-LABEL: define {{.*}}void @_Z5enum7RVU7_Atomicj({{.*}}) 46 void enum7(volatile _Atomic unsigned &an_volatile_atomic_uint_param) { 47 an_volatile_atomic_uint_param += an_enum_value; 48 // CHECK: atomicrmw add ptr 49 } 50 51 // CHECK-LABEL: define {{.*}}void @_Z5enum8RVU7_Atomicj({{.*}}) 52 void enum8(volatile _Atomic unsigned &an_volatile_atomic_uint_param) { 53 an_volatile_atomic_uint_param |= an_enum_value; 54 // CHECK: atomicrmw or ptr 55 } 56