diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2016-08-01 16:39:29 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2016-08-01 16:39:29 +0000 |
| commit | 6ac7dd19f7c3b2deb0450a349152bf75a92e987a (patch) | |
| tree | b81e2b7fc101a0e3a073657eb3ef3fb7924e14ac /clang | |
| parent | 431368a9e6443b6d868a75dca7d54d874899ccb4 (diff) | |
| download | bcm5719-llvm-6ac7dd19f7c3b2deb0450a349152bf75a92e987a.tar.gz bcm5719-llvm-6ac7dd19f7c3b2deb0450a349152bf75a92e987a.zip | |
[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
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Parse/ParseStmt.cpp | 3 | ||||
| -rw-r--r-- | clang/test/Parser/MicrosoftExtensions.c | 9 |
2 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp index 9043ebb9a2b..d0557b8a62b 100644 --- a/clang/lib/Parse/ParseStmt.cpp +++ b/clang/lib/Parse/ParseStmt.cpp @@ -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, diff --git a/clang/test/Parser/MicrosoftExtensions.c b/clang/test/Parser/MicrosoftExtensions.c index 39ab51f31fa..2af6c421bcc 100644 --- a/clang/test/Parser/MicrosoftExtensions.c +++ b/clang/test/Parser/MicrosoftExtensions.c @@ -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; + } +} |

