[Parser] Handle #pragma pack/align inside C structs.

Fixes PR13580. Patch by Serge Pavlov!

llvm-svn: 179743
This commit is contained in:
Argyrios Kyrtzidis 2013-04-18 01:42:35 +00:00
parent e089497121
commit 71c12fb4a3
3 changed files with 36 additions and 0 deletions

View File

@ -3230,6 +3230,16 @@ void Parser::ParseStructUnionBody(SourceLocation RecordLoc,
continue;
}
if (Tok.is(tok::annot_pragma_pack)) {
HandlePragmaPack();
continue;
}
if (Tok.is(tok::annot_pragma_align)) {
HandlePragmaAlign();
continue;
}
if (!Tok.is(tok::at)) {
struct CFieldCallback : FieldCallback {
Parser &P;

View File

@ -20,3 +20,15 @@
#pragma align=reset
#pragma align=mac68k
#pragma align=power
// PR13580
struct S
{
char a[3];
#pragma align=packed
struct T
{
char b;
int c;
} d;
};

View File

@ -30,3 +30,17 @@
_Pragma("pack(push)")
/* expected-warning {{expected integer or identifier in '#pragma pack'}}*/ _Pragma("pack(push,)")
// PR13580
struct S
{
char a[3];
#pragma pack(1)
struct T
{
char b;
int c;
} d;
#pragma pack()
int e;
};