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() enum1()8void enum1() { 9 an_atomic_uint += an_enum_value; 10 // CHECK: atomicrmw add ptr 11 } 12 13 // CHECK-LABEL: define {{.*}}void @_Z5enum2v() enum2()14void enum2() { 15 an_atomic_uint |= an_enum_value; 16 // CHECK: atomicrmw or ptr 17 } 18 19 // CHECK-LABEL: define {{.*}}void @_Z5enum3RU7_Atomicj({{.*}}) enum3(_Atomic unsigned & an_atomic_uint_param)20void 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({{.*}}) enum4(_Atomic unsigned & an_atomic_uint_param)26void 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() enum5()34void enum5() { 35 an_volatile_atomic_uint += an_enum_value; 36 // CHECK: atomicrmw add ptr 37 } 38 39 // CHECK-LABEL: define {{.*}}void @_Z5enum6v() enum6()40void enum6() { 41 an_volatile_atomic_uint |= an_enum_value; 42 // CHECK: atomicrmw or ptr 43 } 44 45 // CHECK-LABEL: define {{.*}}void @_Z5enum7RVU7_Atomicj({{.*}}) enum7(volatile _Atomic unsigned & an_volatile_atomic_uint_param)46void 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({{.*}}) enum8(volatile _Atomic unsigned & an_volatile_atomic_uint_param)52void 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