[microsoft] Move missing typename warning from -fms-extensions to -fms-compatibility. Also allow the missing typename warning at function scope.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140240 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/SemaCXX/MicrosoftCompatibility.cpp b/test/SemaCXX/MicrosoftCompatibility.cpp
index 4179ed8..788fcfb 100644
--- a/test/SemaCXX/MicrosoftCompatibility.cpp
+++ b/test/SemaCXX/MicrosoftCompatibility.cpp
@@ -90,3 +90,47 @@
 }

 

 

+namespace MissingTypename {

+

+template<class T> class A {

+public:

+	 typedef int TYPE;

+};

+

+template<class T> class B {

+public:

+	 typedef int TYPE;

+};

+

+

+template<class T, class U>

+class C : private A<T>, public B<U> {

+public:

+   typedef A<T> Base1;

+   typedef B<U> Base2;

+   typedef A<U> Base3;

+

+   A<T>::TYPE a1; // expected-warning {{missing 'typename' prior to dependent type name}}

+   Base1::TYPE a2; // expected-warning {{missing 'typename' prior to dependent type name}}

+

+   B<U>::TYPE a3; // expected-warning {{missing 'typename' prior to dependent type name}}

+   Base2::TYPE a4; // expected-warning {{missing 'typename' prior to dependent type name}}

+

+   A<U>::TYPE a5; // expected-error {{missing 'typename' prior to dependent type name}}

+   Base3::TYPE a6; // expected-error {{missing 'typename' prior to dependent type name}}

+ };

+

+class D {

+public:

+    typedef int Type;

+};

+

+template <class T>

+void function_missing_typename()

+{

+    const T::Type var = 2; // expected-warning {{missing 'typename' prior to dependent type name}}

+}

+

+template void function_missing_typename<D>();

+

+}