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