diff options
author | Andrey Bokhanko <andreybokhanko@gmail.com> | 2016-05-06 11:47:55 +0000 |
---|---|---|
committer | Andrey Bokhanko <andreybokhanko@gmail.com> | 2016-05-06 11:47:55 +0000 |
commit | ba0d7540e3fd6540c7067ad1fa2a20f205d2c8c0 (patch) | |
tree | 7c46e4f472861f49066d71401da4eeacd7410984 /clang/lib/Parse/ParseDecl.cpp | |
parent | 5f10a137d070a07ee6712facc5d0855aa6148df8 (diff) | |
download | bcm5719-llvm-ba0d7540e3fd6540c7067ad1fa2a20f205d2c8c0.tar.gz bcm5719-llvm-ba0d7540e3fd6540c7067ad1fa2a20f205d2c8c0.zip |
[MSVC] Implementation of __unaligned as a proper type qualifier
This patch implements __unaligned (MS extension) as a proper type qualifier
(before that, it was implemented as an ignored attribute).
It also fixes PR27367.
Differential Revision: http://reviews.llvm.org/D19654
llvm-svn: 268727
Diffstat (limited to 'clang/lib/Parse/ParseDecl.cpp')
-rw-r--r-- | clang/lib/Parse/ParseDecl.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index 6b7ffb64fae..404f0a592a3 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -609,7 +609,6 @@ void Parser::ParseMicrosoftTypeAttributes(ParsedAttributes &attrs) { case tok::kw___ptr64: case tok::kw___w64: case tok::kw___ptr32: - case tok::kw___unaligned: case tok::kw___sptr: case tok::kw___uptr: { IdentifierInfo *AttrName = Tok.getIdentifierInfo(); @@ -3087,6 +3086,11 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS, break; } + case tok::kw___unaligned: + isInvalid = DS.SetTypeQual(DeclSpec::TQ_unaligned, Loc, PrevSpec, DiagID, + getLangOpts()); + break; + case tok::kw___sptr: case tok::kw___uptr: case tok::kw___ptr64: @@ -3097,7 +3101,6 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS, case tok::kw___fastcall: case tok::kw___thiscall: case tok::kw___vectorcall: - case tok::kw___unaligned: ParseMicrosoftTypeAttributes(DS.getAttributes()); continue; @@ -4791,6 +4794,10 @@ void Parser::ParseTypeQualifierListOpt(DeclSpec &DS, unsigned AttrReqs, ParseOpenCLQualifiers(DS.getAttributes()); break; + case tok::kw___unaligned: + isInvalid = DS.SetTypeQual(DeclSpec::TQ_unaligned, Loc, PrevSpec, DiagID, + getLangOpts()); + break; case tok::kw___uptr: // GNU libc headers in C mode use '__uptr' as an identifer which conflicts // with the MS modifier keyword. @@ -4808,7 +4815,6 @@ void Parser::ParseTypeQualifierListOpt(DeclSpec &DS, unsigned AttrReqs, case tok::kw___fastcall: case tok::kw___thiscall: case tok::kw___vectorcall: - case tok::kw___unaligned: if (AttrReqs & AR_DeclspecAttributesParsed) { ParseMicrosoftTypeAttributes(DS.getAttributes()); continue; @@ -5031,7 +5037,8 @@ void Parser::ParseDeclaratorInternal(Declarator &D, DS.getConstSpecLoc(), DS.getVolatileSpecLoc(), DS.getRestrictSpecLoc(), - DS.getAtomicSpecLoc()), + DS.getAtomicSpecLoc(), + DS.getUnalignedSpecLoc()), DS.getAttributes(), SourceLocation()); else |