diff options
author | Adrian Prantl <aprantl@apple.com> | 2016-08-17 16:20:32 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2016-08-17 16:20:32 +0000 |
commit | fd5ac8a0ea6a13029aadc8feb37e5d021583f87f (patch) | |
tree | 7484f4c3d09491621f450ca1d7c653840648f40a /clang/lib/AST/Decl.cpp | |
parent | 002981baca64d923330af6d77022bdd0bbfaf2c6 (diff) | |
download | bcm5719-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.cpp | 10 |
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 |