diff --git a/clang/lib/Parse/ParseTentative.cpp b/clang/lib/Parse/ParseTentative.cpp index dd75319b28d8..11df2f45cea3 100644 --- a/clang/lib/Parse/ParseTentative.cpp +++ b/clang/lib/Parse/ParseTentative.cpp @@ -624,6 +624,12 @@ Parser::TPResult Parser::isCXXDeclarationSpecifier() { case tok::kw__Complex: case tok::kw___attribute: return TPResult::True(); + + // Microsoft + case tok::kw___cdecl: + case tok::kw___stdcall: + case tok::kw___fastcall: + return PP.getLangOptions().Microsoft ? TPResult::True() : TPResult::False(); // The ambiguity resides in a simple-type-specifier/typename-specifier // followed by a '('. The '(' could either be the start of: diff --git a/clang/test/Parser/MicrosoftExtensions.c b/clang/test/Parser/MicrosoftExtensions.c index 0ff59f75aa46..6b097ab7a8de 100644 --- a/clang/test/Parser/MicrosoftExtensions.c +++ b/clang/test/Parser/MicrosoftExtensions.c @@ -1,4 +1,4 @@ -// RUN: clang -fsyntax-only -verify -fms-extensions %s +// RUN: clang -fsyntax-only -verify -fms-extensions -x=objective-c++ %s __stdcall int func0(); int __stdcall func(); typedef int (__cdecl *tptr)();