• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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