diff --git include/clang/Basic/Attr.td include/clang/Basic/Attr.td
index fb1eb58..43ce353 100644
--- include/clang/Basic/Attr.td
+++ include/clang/Basic/Attr.td
@@ -1814,7 +1814,7 @@ def TypeTagForDatatype : InheritableAttr {
 
 // Microsoft-related attributes
 
-def MSNoVTable : InheritableAttr {
+def MSNoVTable : InheritableAttr, TargetSpecificAttr<TargetWindows> {
   let Spellings = [Declspec<"novtable">];
   let Subjects = SubjectList<[CXXRecord]>;
   let Documentation = [MSNoVTableDocs];
diff --git test/SemaCXX/ms-novtable.cpp test/SemaCXX/ms-novtable.cpp
index 2d55c48..31975b3 100644
--- test/SemaCXX/ms-novtable.cpp
+++ test/SemaCXX/ms-novtable.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 %s -fsyntax-only -verify -fms-extensions -Wno-microsoft -std=c++11
+// RUN: %clang_cc1 -triple i386-pc-win32 %s -fsyntax-only -verify -fms-extensions -Wno-microsoft -std=c++11
 
 struct __declspec(novtable) S {};
 enum __declspec(novtable) E {}; // expected-warning{{'novtable' attribute only applies to classes}}
diff --git test/SemaCXX/ms-unsupported.cpp test/SemaCXX/ms-unsupported.cpp
new file mode 100644
index 0000000..4ad398f
--- /dev/null
+++ test/SemaCXX/ms-unsupported.cpp
@@ -0,0 +1,4 @@
+// RUN: %clang_cc1 -triple x86_64-apple-osx %s -fsyntax-only -verify -fms-extensions -Wno-microsoft -std=c++11
+
+// The __declspec(novtable) attribute is ignored except on Windows.
+struct __declspec(novtable) S {}; // expected-warning{{__declspec attribute 'novtable' is not supported}}
