1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only -verify %s
2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaonamespace A {
4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    int VA;
5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    void FA() {}
6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    struct SA { int V; };
7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaousing A::VA;
10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaousing A::FA;
11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaousing typename A::SA;
12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoint main()
14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao{
15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    VA = 1;
16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    FA();
17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    SA x;   //Still needs handling.
18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct B {
21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    void f(char){};
22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    void g(char){};
23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao};
24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct D : B {
25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    using B::f;
26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    void f(int);
27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    void g(int);
28ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao};
29ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid D::f(int) { f('c'); } // calls B::f(char)
30ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid D::g(int) { g('c'); } // recursively calls D::g(int)
31ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
32ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaonamespace E {
33ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    template <typename TYPE> int funcE(TYPE arg) { return(arg); }
34ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
35ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
36ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaousing E::funcE<int>; // expected-error{{using declaration can not refer to a template specialization}}
37ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
38ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaonamespace F {
39ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    struct X;
40ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
41ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
42ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaousing F::X;
43ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// Should have some errors here.  Waiting for implementation.
44ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid X(int);
45ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaostruct X *x;
46