Index: include/clang/Basic/TokenKinds.def
===================================================================
--- include/clang/Basic/TokenKinds.def	(revision 156043)
+++ include/clang/Basic/TokenKinds.def	(working copy)
@@ -496,6 +496,9 @@
 KEYWORD(__int64                   , KEYMS)
 KEYWORD(__if_exists               , KEYMS)
 KEYWORD(__if_not_exists           , KEYMS)
+KEYWORD(__single_inheritance      , KEYMS)
+KEYWORD(__multiple_inheritance    , KEYMS)
+KEYWORD(__virtual_inheritance     , KEYMS)
 ALIAS("__int8"       , char       , KEYMS)
 ALIAS("__int16"      , short      , KEYMS)
 ALIAS("__int32"      , int        , KEYMS)
Index: lib/Parse/ParseDecl.cpp
===================================================================
--- lib/Parse/ParseDecl.cpp	(revision 156043)
+++ lib/Parse/ParseDecl.cpp	(working copy)
@@ -338,6 +338,10 @@
          Tok.is(tok::kw___thiscall) || Tok.is(tok::kw___cdecl)   ||
          Tok.is(tok::kw___ptr64) || Tok.is(tok::kw___w64) ||
          Tok.is(tok::kw___ptr32) ||
+         // FIXME: Support inheritance attributes properly!
+         Tok.is(tok::kw___single_inheritance) ||
+         Tok.is(tok::kw___multiple_inheritance) ||
+         Tok.is(tok::kw___virtual_inheritance) ||
          Tok.is(tok::kw___unaligned)) {
     IdentifierInfo *AttrName = Tok.getIdentifierInfo();
     SourceLocation AttrNameLoc = ConsumeToken();
Index: lib/Parse/ParseDeclCXX.cpp
===================================================================
--- lib/Parse/ParseDeclCXX.cpp	(revision 156043)
+++ lib/Parse/ParseDeclCXX.cpp	(working copy)
@@ -981,6 +981,12 @@
   while (Tok.is(tok::kw___declspec))
     ParseMicrosoftDeclSpec(attrs);
 
+  // Parse inheritance specifiers.
+  if (Tok.is(tok::kw___single_inheritance) ||
+      Tok.is(tok::kw___multiple_inheritance) ||
+      Tok.is(tok::kw___virtual_inheritance))
+      ParseMicrosoftTypeAttributes(attrs);
+
   // If C++0x attributes exist here, parse them.
   // FIXME: Are we consistent with the ordering of parsing of different
   // styles of attributes?
Index: test/Parser/MicrosoftExtensions.cpp
===================================================================
--- test/Parser/MicrosoftExtensions.cpp	(revision 156043)
+++ test/Parser/MicrosoftExtensions.cpp	(working copy)
@@ -217,30 +217,30 @@
 
 int __if_exists_init_list() {
 
-  int array1[] = {
-    0, 
-    __if_exists(IF_EXISTS::Type) {2, }
-    3
-  };
+  int array1[] = {
+    0, 
+    __if_exists(IF_EXISTS::Type) {2, }
+    3
+  };
 
-  int array2[] = {
-    0, 
-    __if_exists(IF_EXISTS::Type_not) { this wont compile }
-    3
-  };
-
-  int array3[] = {
-    0, 
-    __if_not_exists(IF_EXISTS::Type_not) {2, }
-    3
-  };
+  int array2[] = {
+    0, 
+    __if_exists(IF_EXISTS::Type_not) { this wont compile }
+    3
+  };
 
-  int array4[] = {
-    0, 
-    __if_not_exists(IF_EXISTS::Type) { this wont compile }
-    3
-  };
+  int array3[] = {
+    0, 
+    __if_not_exists(IF_EXISTS::Type_not) {2, }
+    3
+  };
 
+  int array4[] = {
+    0, 
+    __if_not_exists(IF_EXISTS::Type) { this wont compile }
+    3
+  };
+
 }
 
 
@@ -286,26 +286,36 @@
 
 
 
-
-namespace access_protected_PTM {
-
-class A {
-protected:
-  void f(); // expected-note {{must name member using the type of the current context 'access_protected_PTM::B'}}
-};
-
-class B : public A{
-public:
-  void test_access();
-  static void test_access_static();
-};
-
-void B::test_access() {
-  &A::f; // expected-error {{'f' is a protected member of 'access_protected_PTM::A'}}
-}
-
-void B::test_access_static() {
-  &A::f;
-}
-
-}
\ No newline at end of file
+
+namespace access_protected_PTM {
+
+class A {
+protected:
+  void f(); // expected-note {{must name member using the type of the current context 'access_protected_PTM::B'}}
+};
+
+class B : public A{
+public:
+  void test_access();
+  static void test_access_static();
+};
+
+void B::test_access() {
+  &A::f; // expected-error {{'f' is a protected member of 'access_protected_PTM::A'}}
+}
+
+void B::test_access_static() {
+  &A::f;
+}
+
+}
+
+/* Microsoft inheritance keyword tests */
+
+namespace Inhetirance_test {
+
+class __single_inheritance A;
+class __multiple_inheritance B;
+class __virtual_inheritance C;
+
+} 
\ No newline at end of file
