]> granicus.if.org Git - clang/commitdiff
People put pragmas in crazy places; add more handling. PR14046.
authorEli Friedman <eli.friedman@gmail.com>
Tue, 9 Oct 2012 22:46:54 +0000 (22:46 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Tue, 9 Oct 2012 22:46:54 +0000 (22:46 +0000)
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

lib/Parse/ParseStmt.cpp
test/CodeGen/pragma-weak.c

index 635f61b82135355ec3ba5ab9e9cdd07357654fdd..d008b037b0e01b613f87a3c9442f6303fc4a64a6 100644 (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();
index 7ad2b77d8e7e3e8fd0cace5b923f5ee9d00e5618..2efc2ebc28d84034f7a5ee4587b956e84a0e81c0 100644 (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