diff options
-rw-r--r-- | lib/CodeGen/CGCall.cpp | 12 | ||||
-rw-r--r-- | lib/CodeGen/CodeGenModule.cpp | 2 |
2 files changed, 9 insertions, 5 deletions
diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index 7069fee460..a1c3c33462 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -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, diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index d237598e28..2ce22d890b 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -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, |