1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s
28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics
369be8d60ded8bbfbd30facf0590c97920a074f46Douglas Gregor
469be8d60ded8bbfbd30facf0590c97920a074f46Douglas Gregornamespace N1 {
569be8d60ded8bbfbd30facf0590c97920a074f46Douglas Gregor  struct X { };
669be8d60ded8bbfbd30facf0590c97920a074f46Douglas Gregor  int& f(void*);
769be8d60ded8bbfbd30facf0590c97920a074f46Douglas Gregor}
869be8d60ded8bbfbd30facf0590c97920a074f46Douglas Gregor
969be8d60ded8bbfbd30facf0590c97920a074f46Douglas Gregornamespace N2 {
1069be8d60ded8bbfbd30facf0590c97920a074f46Douglas Gregor  template<typename T> struct Y { };
1169be8d60ded8bbfbd30facf0590c97920a074f46Douglas Gregor}
1269be8d60ded8bbfbd30facf0590c97920a074f46Douglas Gregor
1369be8d60ded8bbfbd30facf0590c97920a074f46Douglas Gregornamespace N3 {
1469be8d60ded8bbfbd30facf0590c97920a074f46Douglas Gregor  void test() {
1569be8d60ded8bbfbd30facf0590c97920a074f46Douglas Gregor    int &ir = f((N2::Y<N1::X>*)0);
1669be8d60ded8bbfbd30facf0590c97920a074f46Douglas Gregor  }
1769be8d60ded8bbfbd30facf0590c97920a074f46Douglas Gregor}
18daa439a6c47d3299157b94a496bf22389bbc77a3Douglas Gregor
19daa439a6c47d3299157b94a496bf22389bbc77a3Douglas Gregorint g(void *);
20daa439a6c47d3299157b94a496bf22389bbc77a3Douglas Gregorlong g(N1::X);
21daa439a6c47d3299157b94a496bf22389bbc77a3Douglas Gregor
22daa439a6c47d3299157b94a496bf22389bbc77a3Douglas Gregornamespace N1 {
23daa439a6c47d3299157b94a496bf22389bbc77a3Douglas Gregor  void h(int (*)(void *));
24daa439a6c47d3299157b94a496bf22389bbc77a3Douglas Gregor}
25daa439a6c47d3299157b94a496bf22389bbc77a3Douglas Gregor
26daa439a6c47d3299157b94a496bf22389bbc77a3Douglas Gregorvoid test() {
27daa439a6c47d3299157b94a496bf22389bbc77a3Douglas Gregor  h((&g));
28daa439a6c47d3299157b94a496bf22389bbc77a3Douglas Gregor}
29