1 // RUN: %clang_cc1 %s -std=c++11 -emit-llvm -o - -triple=x86_64-linux-gnu | FileCheck %s
2 
3 struct AM {
4   int f1, f2;
5 };
6 alignas(8) AM m;
load1()7 AM load1() {
8   AM am;
9   // m is declared to align to 8bytes, so generate load atomic instead
10   // of libcall.
11   // CHECK-LABEL: @_Z5load1v
12   // CHECK: load atomic {{.*}} monotonic, align 8
13   __atomic_load(&m, &am, 0);
14   return am;
15 }
16 
17 struct BM {
18   int f1;
19   alignas(8) AM f2;
20 };
21 BM bm;
load2()22 AM load2() {
23   AM am;
24   // BM::f2 is declared to align to 8bytes, so generate load atomic instead
25   // of libcall.
26   // CHECK-LABEL: @_Z5load2v
27   // CHECK: load atomic {{.*}} monotonic, align 8
28   __atomic_load(&bm.f2, &am, 0);
29   return am;
30 }
31