diff options
author | JF Bastien <jfbastien@apple.com> | 2018-07-18 18:01:41 +0000 |
---|---|---|
committer | JF Bastien <jfbastien@apple.com> | 2018-07-18 18:01:41 +0000 |
commit | 7d60a0f118b4ad23df106c8fcf69bcb1e951c180 (patch) | |
tree | eed35d20b9d803746995b5c27a4a12a88298a2dc /clang/test/CodeGen/atomic-ops.c | |
parent | a747d3ca6011db00cb21489d1a4fa8b6cbcd2878 (diff) | |
download | bcm5719-llvm-7d60a0f118b4ad23df106c8fcf69bcb1e951c180.tar.gz bcm5719-llvm-7d60a0f118b4ad23df106c8fcf69bcb1e951c180.zip |
Support implicit _Atomic struct load / store
Summary:
Using _Atomic to do implicit load / store is just a seq_cst atomic_load / atomic_store. Stores currently assert in Sema::ImpCastExprToType with 'can't implicitly cast lvalue to rvalue with this cast kind', but that's erroneous. The codegen is fine as the test shows.
While investigating I found that Richard had found the problem here: https://reviews.llvm.org/D46112#1113557
<rdar://problem/40347123>
Reviewers: dexonsmith
Subscribers: cfe-commits, efriedma, rsmith, aaron.ballman
Differential Revision: https://reviews.llvm.org/D49458
llvm-svn: 337410
Diffstat (limited to 'clang/test/CodeGen/atomic-ops.c')
-rw-r--r-- | clang/test/CodeGen/atomic-ops.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/clang/test/CodeGen/atomic-ops.c b/clang/test/CodeGen/atomic-ops.c index db97706c5d4..500939f6fd7 100644 --- a/clang/test/CodeGen/atomic-ops.c +++ b/clang/test/CodeGen/atomic-ops.c @@ -183,6 +183,18 @@ struct S { double x; }; +void implicit_store(_Atomic(struct S) *a, struct S s) { + // CHECK-LABEL: @implicit_store( + // CHECK: store atomic i64 %{{.*}}, i64* %{{.*}} seq_cst, align 8 + *a = s; +} + +struct S implicit_load(_Atomic(struct S) *a) { + // CHECK-LABEL: @implicit_load( + // CHECK: load atomic i64, i64* %{{.*}} seq_cst, align 8 + return *a; +} + struct S fd1(struct S *a) { // CHECK-LABEL: @fd1 // CHECK: [[RETVAL:%.*]] = alloca %struct.S, align 4 |