Parsing and AST support for using declarations, from John Thompson!


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@73812 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/Parser/cxx-using-declaration.cpp b/test/Parser/cxx-using-declaration.cpp
new file mode 100644
index 0000000..de0e6f1
--- /dev/null
+++ b/test/Parser/cxx-using-declaration.cpp
@@ -0,0 +1,45 @@
+// RUN: clang-cc -fsyntax-only -verify %s

+

+namespace A {

+    int VA;

+    void FA() {}

+    struct SA { int V; };

+}

+

+using A::VA;

+using A::FA;

+using typename A::SA;

+

+void main()

+{

+    VA = 1;

+    FA();

+    SA x;   //Still needs handling.

+}

+

+struct B {

+    void f(char){};

+    void g(char){};

+};

+struct D : B {

+    using B::f;

+    void f(int);

+    void g(int);

+};

+void D::f(int) { f('c'); } // calls B::f(char)

+void D::g(int) { g('c'); } // recursively calls D::g(int)

+

+namespace E {

+    template <typename TYPE> int funcE(TYPE arg) { return(arg); }

+}

+

+using E::funcE<int>; // expected-error{{use of template specialization in using directive not allowed}}

+

+namespace F {

+    struct X;

+}

+

+using F::X;

+// Should have some errors here.  Waiting for implementation.

+void X(int);

+struct X *x;

diff --git a/test/Parser/cxx-using-directive.cpp b/test/Parser/cxx-using-directive.cpp
index 676f4e6..504d026 100644
--- a/test/Parser/cxx-using-directive.cpp
+++ b/test/Parser/cxx-using-directive.cpp
@@ -13,8 +13,7 @@
   
   class C {
     
-    using namespace B ; // expected-error{{expected member name or ';' after declaration specifiers}}
-    //FIXME: this needs better error message
+    using namespace B ; // expected-error{{not allowed}}
   };
   
   namespace B {}