// RUN: %clang_cc1 %s -std=c++14 -emit-llvm -o - -triple=x86_64-linux-gnu | FileCheck %s
structAM{int f1, f2;};alignas(8) AM m;
AM load1(){
AM am;// m is declared to align to 8bytes, so generate load atomic instead
// of libcall.
// CHECK-LABEL: @_Z5load1v
// CHECK: load atomic {{.*}} monotonic, align 8
__atomic_load(&m,&am,0);return am;}structBM{int f1;alignas(8)AM f2;};
BM bm;
AM load2(){
AM am;// BM::f2 is declared to align to 8bytes, so generate load atomic instead
// of libcall.
// CHECK-LABEL: @_Z5load2v
// CHECK: load atomic {{.*}} monotonic, align 8
__atomic_load(&bm.f2,&am,0);return am;}namespacestd{template<class _Tp>inlineconstexpr__attribute__((__visibility__("hidden"), __internal_linkage__))
_Tp*__addressof(_Tp&__x)noexcept{return__builtin_addressof(__x);}}
AM load3(){
AM am;// m is declared to align to 8bytes, so generate load atomic instead
// of libcall.
// CHECK-LABEL: @_Z5load3v
// CHECK: load atomic {{.*}} monotonic, align 8
__atomic_load(std::__addressof(m),&am,0);return am;}