diff --git a/include/clang/Basic/TokenKinds.def b/include/clang/Basic/TokenKinds.def
index bcf0f31..0dbff81 100644
--- a/include/clang/Basic/TokenKinds.def
+++ b/include/clang/Basic/TokenKinds.def
@@ -524,6 +524,7 @@ KEYWORD(__interface                   , KEYMS)
 ALIAS("__int8"           , char       , KEYMS)
 ALIAS("__int16"          , short      , KEYMS)
 ALIAS("__int32"          , int        , KEYMS)
+ALIAS("__wchar_t"        , wchar_t    , KEYMS)
 ALIAS("_asm"             , asm        , KEYMS)
 ALIAS("_alignof"         , __alignof  , KEYMS)
 ALIAS("__builtin_alignof", __alignof  , KEYMS)
diff --git a/test/Lexer/ms-extensions.c b/test/Lexer/ms-extensions.c
index 377d2d5..0b687cc 100644
--- a/test/Lexer/ms-extensions.c
+++ b/test/Lexer/ms-extensions.c
@@ -41,3 +41,6 @@ x1234e+1;
 x1234e+1;                      
 }
 
+// pr15815
+wchar_t wide_char_literal = L'a'; // expected-error{{unknown type name 'wchar_t'}}
+__wchar_t wide_char_literal = L'a'; // No error.
diff --git a/test/Lexer/ms-extensions.cpp b/test/Lexer/ms-extensions.cpp
index 7e18a6c..dd28b5b 100644
--- a/test/Lexer/ms-extensions.cpp
+++ b/test/Lexer/ms-extensions.cpp
@@ -4,3 +4,7 @@
 const char * f() {
   return "foo"bar("bar")"baz";    /*expected-warning {{identifier after literal will be treated as a reserved user-defined literal suffix in C++11}} */
 }
+
+// pr15815
+void foo(__wchar_t x) { } // expected-note {{previous definition is here}}
+void foo(wchar_t y) { } // expected-error {{redefinition of 'foo'}} (Because __wchar_t and wchar_t are the same type.)
