1// RUN: %clang_cc1 -verify %s 2 3template<typename T> struct atomic { 4 _Atomic(T) value; 5}; 6 7template<typename T> struct user { 8 struct inner { char n[sizeof(T)]; }; 9 atomic<inner> i; 10}; 11 12user<int> u; 13 14// Test overloading behavior of atomics. 15struct A { }; 16 17int &ovl1(_Atomic(int)); 18long &ovl1(_Atomic(long)); 19float &ovl1(_Atomic(float)); 20double &ovl1(_Atomic(A const *const *)); 21short &ovl1(_Atomic(A **)); 22 23void test_overloading(int i, float f, _Atomic(int) ai, _Atomic(float) af, 24 long l, _Atomic(long) al, A const *const *acc, 25 A const ** ac, A **a) { 26 int& ir1 = ovl1(i); 27 int& ir2 = ovl1(ai); 28 long& lr1 = ovl1(l); 29 long& lr2 = ovl1(al); 30 float &fr1 = ovl1(f); 31 float &fr2 = ovl1(af); 32 double &dr1 = ovl1(acc); 33 double &dr2 = ovl1(ac); 34 short &sr1 = ovl1(a); 35} 36