From: Eli Friedman Date: Tue, 9 Oct 2012 22:46:54 +0000 (+0000) Subject: People put pragmas in crazy places; add more handling. PR14046. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8b2bfdda35de8239df0ff4a588214d5876a38d28;p=clang 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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165558 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Parse/ParseStmt.cpp b/lib/Parse/ParseStmt.cpp index 635f61b821..d008b037b0 100644 --- a/lib/Parse/ParseStmt.cpp +++ b/lib/Parse/ParseStmt.cpp @@ -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(); diff --git a/test/CodeGen/pragma-weak.c b/test/CodeGen/pragma-weak.c index 7ad2b77d8e..2efc2ebc28 100644 --- a/test/CodeGen/pragma-weak.c +++ b/test/CodeGen/pragma-weak.c @@ -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