Home | History | Annotate | Download | only in SemaCXX
      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