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
test_overloading(int i,float f,_Atomic (int)ai,_Atomic (float)af,long l,_Atomic (long)al,A const * const * acc,A const ** ac,A ** a)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