1 // RUN: %clang_cc1 -verify %s 2 3 template<typename T> struct atomic { 4 _Atomic(T) value; 5 }; 6 7 template<typename T> struct user { 8 struct inner { char n[sizeof(T)]; }; 9 atomic<inner> i; 10 }; 11 12 user<int> u; 13 14 // Test overloading behavior of atomics. 15 struct A { }; 16 17 int &ovl1(_Atomic(int)); 18 long &ovl1(_Atomic(long)); 19 float &ovl1(_Atomic(float)); 20 double &ovl1(_Atomic(A const *const *)); 21 short &ovl1(_Atomic(A **)); 22 23 void 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