1// { dg-do assemble  }
2// Testcase for proper unification of code involving references.
3
4template<class T>
5struct A
6{
7    void foo();
8};
9
10template<class T> void A<T>::foo() { }
11
12template class A<int&>;
13
14const int& f1 ();
15int& f2 ();
16int f3 ();
17
18template <class T> void g1 (const T&);
19template <class T> void g2 (T&);
20template <class T> void g3 (T);
21
22int main()
23{
24  g1 (f1 ());
25  g1 (f2 ());
26  g1 (f3 ());
27  g2 (f2 ());
28  g3 (f1 ());
29  g3 (f2 ());
30  g3 (f3 ());
31}
32