forked from OSchip/llvm-project
fix codegen support for functions that are nothrow and noreturn.
llvm-svn: 47838
This commit is contained in:
parent
8496639787
commit
65079bd9be
|
@ -82,18 +82,17 @@ void CodeGenFunction::GenerateCode(const FunctionDecl *FD) {
|
||||||
// FIXME: else handle -fvisibility
|
// FIXME: else handle -fvisibility
|
||||||
|
|
||||||
|
|
||||||
llvm::ParamAttrsVector ParamAttrsVec;
|
unsigned FuncAttrs = 0;
|
||||||
|
|
||||||
if (FD->getAttr<NoThrowAttr>())
|
if (FD->getAttr<NoThrowAttr>())
|
||||||
ParamAttrsVec.push_back(
|
FuncAttrs |= llvm::ParamAttr::NoUnwind;
|
||||||
llvm::ParamAttrsWithIndex::get(ParamAttrsVec.size(), llvm::ParamAttr::NoUnwind));
|
|
||||||
if (FD->getAttr<NoReturnAttr>())
|
if (FD->getAttr<NoReturnAttr>())
|
||||||
ParamAttrsVec.push_back(
|
FuncAttrs |= llvm::ParamAttr::NoReturn;
|
||||||
llvm::ParamAttrsWithIndex::get(ParamAttrsVec.size(), llvm::ParamAttr::NoReturn));
|
|
||||||
|
if (FuncAttrs) {
|
||||||
if (!ParamAttrsVec.empty())
|
llvm::ParamAttrsVector ParamAttrsVec;
|
||||||
|
ParamAttrsVec.push_back(llvm::ParamAttrsWithIndex::get(0, FuncAttrs));
|
||||||
CurFn->setParamAttrs(llvm::ParamAttrsList::get(ParamAttrsVec));
|
CurFn->setParamAttrs(llvm::ParamAttrsList::get(ParamAttrsVec));
|
||||||
|
}
|
||||||
|
|
||||||
llvm::BasicBlock *EntryBB = new llvm::BasicBlock("entry", CurFn);
|
llvm::BasicBlock *EntryBB = new llvm::BasicBlock("entry", CurFn);
|
||||||
|
|
||||||
|
|
|
@ -19,3 +19,8 @@ int t5 __attribute__((weak)) = 2;
|
||||||
|
|
||||||
// RUN: clang -emit-llvm < %s | grep 't6.*protected'
|
// RUN: clang -emit-llvm < %s | grep 't6.*protected'
|
||||||
int t6 __attribute__((visibility(protected)));
|
int t6 __attribute__((visibility(protected)));
|
||||||
|
|
||||||
|
// RUN: clang -emit-llvm < %s | grep 't7.*noreturn'
|
||||||
|
// RUN: clang -emit-llvm < %s | grep 't7.*nothrow'
|
||||||
|
void t7() __attribute__((noreturn, nothrow));
|
||||||
|
void t7() {}
|
||||||
|
|
Loading…
Reference in New Issue