This affects functions with the C++11 [[ noreturn ]] and C11 _Noreturn
specifiers.
Patch by Victor Leschuk!
https://reviews.llvm.org/D23168
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@278942
91177308-0d34-0410-b5e6-
96231b3b80d8
}
bool FunctionDecl::isNoReturn() const {
- return hasAttr<NoReturnAttr>() || hasAttr<CXX11NoReturnAttr>() ||
- hasAttr<C11NoReturnAttr>() ||
- getType()->getAs<FunctionType>()->getNoReturnAttr();
+ bool HasNoReturnAttr = hasAttr<NoReturnAttr>() || hasAttr<CXX11NoReturnAttr>()
+ || hasAttr<C11NoReturnAttr>();
+ const auto *FuncType = getType()->getAs<FunctionType>();
+ bool TypeHasNoReturnAttr = false;
+ if (FuncType)
+ TypeHasNoReturnAttr = FuncType->getNoReturnAttr();
+ return HasNoReturnAttr || TypeHasNoReturnAttr;
}
void
llvm::DIScope *Mod = getParentModuleOrNull(RDecl);
FDContext = getContextDescriptor(RDecl, Mod ? Mod : TheCU);
}
+ // Check if it is a noreturn-marked function
+ if (FD->isNoReturn())
+ Flags |= llvm::DINode::FlagNoReturn;
// Collect template parameters.
TParamsArray = CollectFunctionTemplateParams(FD, Unit);
}