The ability to specify alignment was recently added, and it's an important property which we should ensure is set as expected by Clang. (Especially before making further changes to Clang's code in this area.) But, because it's on the end of the lines, the existing tests all ignore it. Therefore, update all the tests to also verify the expected alignment for atomicrmw and cmpxchg. While I was in there, I also updated uses of 'load atomic' and 'store atomic', and added the memory ordering, where that was missing.
35 lines
1.0 KiB
Objective-C
35 lines
1.0 KiB
Objective-C
// RUN: %clang_cc1 -triple x86_64-apple-macosx10 -emit-llvm -x objective-c %s -o - | FileCheck %s
|
|
|
|
// CHECK: define internal zeroext i1 @"\01-[A0 p]"(
|
|
// CHECK: %[[ATOMIC_LOAD:.*]] = load atomic i8, i8* %{{.*}} seq_cst, align 1
|
|
// CHECK: %[[TOBOOL:.*]] = trunc i8 %[[ATOMIC_LOAD]] to i1
|
|
// CHECK: ret i1 %[[TOBOOL]]
|
|
|
|
// CHECK: define internal void @"\01-[A0 setP:]"({{.*}} i1 zeroext {{.*}})
|
|
// CHECK: store atomic i8 %{{.*}}, i8* %{{.*}} seq_cst, align 1
|
|
// CHECK: ret void
|
|
|
|
// CHECK: define internal zeroext i1 @"\01-[A1 p]"(
|
|
// CHECK: %[[ATOMIC_LOAD:.*]] = load atomic i8, i8* %{{.*}} unordered, align 1
|
|
// CHECK: %[[TOBOOL:.*]] = trunc i8 %load to i1
|
|
// CHECK: ret i1 %[[TOBOOL]]
|
|
|
|
// CHECK: define internal void @"\01-[A1 setP:]"({{.*}} i1 zeroext %p)
|
|
// CHECK: store atomic i8 %{{.*}}, i8* %{{.*}} unordered, align 1
|
|
// CHECK: ret void
|
|
|
|
@interface A0
|
|
@property(nonatomic) _Atomic(_Bool) p;
|
|
@end
|
|
@implementation A0
|
|
@end
|
|
|
|
@interface A1 {
|
|
_Atomic(_Bool) p;
|
|
}
|
|
@property _Atomic(_Bool) p;
|
|
@end
|
|
@implementation A1
|
|
@synthesize p;
|
|
@end
|