[Parse] Let declarations follow labels in -fms-extensions mode

MSVC permits declarations in these places as conforming extension (it is
a constraint violation otherwise).

This fixes PR28782.

llvm-svn: 277352
This commit is contained in:
David Majnemer 2016-08-01 16:39:29 +00:00
parent 431368a9e6
commit 6ac7dd19f7
2 changed files with 11 additions and 1 deletions

View File

@ -206,7 +206,8 @@ Retry:
}
default: {
if ((getLangOpts().CPlusPlus || Allowed == ACK_Any) &&
if ((getLangOpts().CPlusPlus || getLangOpts().MicrosoftExt ||
Allowed == ACK_Any) &&
isDeclarationStatement()) {
SourceLocation DeclStart = Tok.getLocation(), DeclEnd;
DeclGroupPtrTy Decl = ParseDeclaration(Declarator::BlockContext,

View File

@ -106,3 +106,12 @@ __declspec(align(16)) struct align_before_key3 {} *align_before_key3_var;
_Static_assert(__alignof(struct align_before_key1) == 16, "");
_Static_assert(__alignof(struct align_before_key2) == 16, "");
_Static_assert(__alignof(struct align_before_key3) == 16, "");
void PR28782(int i) {
foo:
int n;
switch (i) {
case 0:
int m;
}
}