People put pragmas in crazy places; add more handling. PR14046.

I think our general framework for parser pragmas needs a bit more work,
but I'm not planning on working on it at the moment.

llvm-svn: 165558
This commit is contained in:
Eli Friedman 2012-10-09 22:46:54 +00:00
parent a5d3ba008b
commit bbbbac6012
2 changed files with 29 additions and 0 deletions

View File

@ -254,11 +254,31 @@ Retry:
HandlePragmaPack();
return StmtEmpty();
case tok::annot_pragma_msstruct:
ProhibitAttributes(Attrs);
HandlePragmaMSStruct();
return StmtEmpty();
case tok::annot_pragma_align:
ProhibitAttributes(Attrs);
HandlePragmaAlign();
return StmtEmpty();
case tok::annot_pragma_weak:
ProhibitAttributes(Attrs);
HandlePragmaWeak();
return StmtEmpty();
case tok::annot_pragma_weakalias:
ProhibitAttributes(Attrs);
HandlePragmaWeakAlias();
return StmtEmpty();
case tok::annot_pragma_redefine_extname:
ProhibitAttributes(Attrs);
HandlePragmaRedefineExtname();
return StmtEmpty();
case tok::annot_pragma_fp_contract:
ProhibitAttributes(Attrs);
HandlePragmaFPContract();

View File

@ -157,6 +157,15 @@ void PR10878() { SHA384Pad(0); }
// CHECK: call void @SHA384Pad(i8* null)
// PR14046: Parse #pragma weak in function-local context
extern int PR14046e(void);
void PR14046f() {
#pragma weak PR14046e
PR14046e();
}
// CHECK: declare extern_weak i32 @PR14046e()
///////////// TODO: stuff that still doesn't work
// due to the fact that disparate TopLevelDecls cannot affect each other