]> granicus.if.org Git - clang/commitdiff
Now Attributes are divided in three groups
authorDevang Patel <dpatel@apple.com>
Fri, 26 Sep 2008 22:53:57 +0000 (22:53 +0000)
committerDevang Patel <dpatel@apple.com>
Fri, 26 Sep 2008 22:53:57 +0000 (22:53 +0000)
- return attributes - inreg, zext and sext
- parameter attributes
- function attributes - nounwind, readonly, readnone, noreturn

Return attributes use 0 as the index.
Function attributes use ~0U as the index.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56705 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGCall.cpp
lib/CodeGen/CodeGenModule.cpp

index 7069fee4602326b7529e7e894eb6e0e880beb71e..a1c3c33462d3682d7e104ade885037de02375a31 100644 (file)
@@ -513,6 +513,7 @@ void CodeGenModule::ConstructAttributeList(const Decl *TargetDecl,
                                            ArgTypeIterator end,
                                            AttributeListType &PAL) {
   unsigned FuncAttrs = 0;
+  unsigned RetAttrs = 0;
 
   if (TargetDecl) {
     if (TargetDecl->getAttr<NoThrowAttr>())
@@ -528,9 +529,9 @@ void CodeGenModule::ConstructAttributeList(const Decl *TargetDecl,
   case ABIArgInfo::Default:
     if (RetTy->isPromotableIntegerType()) {
       if (RetTy->isSignedIntegerType()) {
-        FuncAttrs |= llvm::Attribute::SExt;
+        RetAttrs |= llvm::Attribute::SExt;
       } else if (RetTy->isUnsignedIntegerType()) {
-        FuncAttrs |= llvm::Attribute::ZExt;
+        RetAttrs |= llvm::Attribute::ZExt;
       }
     }
     break;
@@ -550,8 +551,8 @@ void CodeGenModule::ConstructAttributeList(const Decl *TargetDecl,
     assert(0 && "Invalid ABI kind for return argument");    
   }
 
-  if (FuncAttrs)
-    PAL.push_back(llvm::AttributeWithIndex::get(0, FuncAttrs));
+  if (RetAttrs)
+    PAL.push_back(llvm::AttributeWithIndex::get(0, RetAttrs));
   for (++begin; begin != end; ++begin) {
     QualType ParamType = *begin;
     unsigned Attributes = 0;
@@ -592,6 +593,9 @@ void CodeGenModule::ConstructAttributeList(const Decl *TargetDecl,
       PAL.push_back(llvm::AttributeWithIndex::get(Index, Attributes));
     ++Index;
   }
+  if (FuncAttrs)
+    PAL.push_back(llvm::AttributeWithIndex::get(~0, FuncAttrs));
+
 }
 
 void CodeGenFunction::EmitFunctionProlog(llvm::Function *Fn,
index d237598e28104f8f36730df3c4943a303b5020c2..2ce22d890b26cee45bd7bad0cb60e4c62b3bb96a 100644 (file)
@@ -240,7 +240,7 @@ void CodeGenModule::SetFunctionAttributesForDefinition(const Decl *D,
   }
                              
   if (!Features.Exceptions)
-    F->addAttribute(0, llvm::Attribute::NoUnwind);  
+    F->addAttribute(~0, llvm::Attribute::NoUnwind);  
 }
 
 void CodeGenModule::SetMethodAttributes(const ObjCMethodDecl *MD,