summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/Decl.cpp
diff options
context:
space:
mode:
authorAdrian Prantl <aprantl@apple.com>2016-08-17 16:20:32 +0000
committerAdrian Prantl <aprantl@apple.com>2016-08-17 16:20:32 +0000
commitfd5ac8a0ea6a13029aadc8feb37e5d021583f87f (patch)
tree7484f4c3d09491621f450ca1d7c653840648f40a /clang/lib/AST/Decl.cpp
parent002981baca64d923330af6d77022bdd0bbfaf2c6 (diff)
downloadbcm5719-llvm-fd5ac8a0ea6a13029aadc8feb37e5d021583f87f.tar.gz
bcm5719-llvm-fd5ac8a0ea6a13029aadc8feb37e5d021583f87f.zip
Debug info: Mark noreturn functions with DIFlagNoReturn.
This affects functions with the C++11 [[ noreturn ]] and C11 _Noreturn specifiers. Patch by Victor Leschuk! https://reviews.llvm.org/D23168 llvm-svn: 278942
Diffstat (limited to 'clang/lib/AST/Decl.cpp')
-rw-r--r--clang/lib/AST/Decl.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp
index 98711822a51..cf34c7ab8d4 100644
--- a/clang/lib/AST/Decl.cpp
+++ b/clang/lib/AST/Decl.cpp
@@ -2657,9 +2657,13 @@ bool FunctionDecl::isGlobal() const {
}
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
OpenPOWER on IntegriCloud