使__attribute__((annotate("xxx")))能作用于OC函数

diff -Naur orig/llvm-3.7.0.src/tools/clang/lib/CodeGen/CGBlocks.cpp llvm-3.7.0.src/tools/clang/lib/CodeGen/CGBlocks.cpp 
--- orig/llvm-3.7.0.src/tools/clang/lib/CodeGen/CGBlocks.cpp    2015-06-23 01:07:51.000000000 +0200 
+++ llvm-3.7.0.src/tools/clang/lib/CodeGen/CGBlocks.cpp 2015-11-13 13:05:44.000000000 +0100 
@@ -1157,6 +1157,10 @@ 
       fnLLVMType, llvm::GlobalValue::InternalLinkage, name, &CGM.getModule()); 
   CGM.SetInternalFunctionAttributes(blockDecl, fn, fnInfo); 

+  // Emit annotation attributes for ObjC blocks. 
+  if (blockDecl->hasAttr<AnnotateAttr>()) 
+    CGM.AddGlobalAnnotations(blockDecl, fn); 

   // Begin generating the function. 
   StartFunction(blockDecl, fnType->getReturnType(), fn, fnInfo, args, 
                 blockDecl->getLocation(), 
diff -Naur orig/llvm-3.7.0.src/tools/clang/lib/CodeGen/CGObjC.cpp llvm-3.7.0.src/tools/clang/lib/CodeGen/CGObjC.cpp 
--- orig/llvm-3.7.0.src/tools/clang/lib/CodeGen/CGObjC.cpp      2015-07-14 19:27:39.000000000 +0200 
+++ llvm-3.7.0.src/tools/clang/lib/CodeGen/CGObjC.cpp   2015-11-13 13:02:48.000000000 +0100 
@@ -491,6 +491,10 @@ 

   llvm::Function *Fn = CGM.getObjCRuntime().GenerateMethod(OMD, CD); 

+  // Emit annotation attributes for ObjC methods. 
+  if (OMD->hasAttr<AnnotateAttr>()) 
+    CGM.AddGlobalAnnotations(OMD, Fn); 

   const CGFunctionInfo &FI = CGM.getTypes().arrangeObjCMethodDeclaration(OMD); 
   CGM.SetInternalFunctionAttributes(OMD, Fn, FI); 

diff -Naur orig/llvm-3.7.0.src/tools/clang/lib/CodeGen/CodeGenModule.cpp llvm-3.7.0.src/tools/clang/lib/CodeGen/CodeGenModule.cpp 
--- orig/llvm-3.7.0.src/tools/clang/lib/CodeGen/CodeGenModule.cpp       2015-07-14 00:54:53.000000000 +0200 
+++ llvm-3.7.0.src/tools/clang/lib/CodeGen/CodeGenModule.cpp    2015-11-13 13:08:55.000000000 +0100 
@@ -1193,7 +1193,7 @@ 
   return llvm::ConstantStruct::getAnon(Fields); 
 } 

-void CodeGenModule::AddGlobalAnnotations(const ValueDecl *D, 
+void CodeGenModule::AddGlobalAnnotations(const Decl *D, 
                                          llvm::GlobalValue *GV) { 
   assert(D->hasAttr<AnnotateAttr>() && "no annotate attribute"); 
   // Get the struct elements for these annotations. 
diff -Naur orig/llvm-3.7.0.src/tools/clang/lib/CodeGen/CodeGenModule.h llvm-3.7.0.src/tools/clang/lib/CodeGen/CodeGenModule.h 
--- orig/llvm-3.7.0.src/tools/clang/lib/CodeGen/CodeGenModule.h 2015-07-09 21:56:14.000000000 +0200 
+++ llvm-3.7.0.src/tools/clang/lib/CodeGen/CodeGenModule.h      2015-11-13 13:08:29.000000000 +0100 
@@ -1078,7 +1078,7 @@ 

   /// Add global annotations that are set on D, for the global GV. Those 
   /// annotations are emitted during finalization of the LLVM code. 
-  void AddGlobalAnnotations(const ValueDecl *D, llvm::GlobalValue *GV); 
+  void AddGlobalAnnotations(const Decl *D, llvm::GlobalValue *GV); 


   bool isInSanitizerBlacklist(llvm::Function *Fn, SourceLocation Loc) const; 

评论

此博客中的热门博文

viewWillAppear不执行的解决办法

iOS中使用xpc/xpc.h