vleschuk created this revision.
vleschuk added a reviewer: asl.
vleschuk added a subscriber: cfe-commits.
Emit DWARF DW_AT_noreturn for C++ [[ noreturn ]] and C _Noreturn specifiers.
Corresponding LLVM patch: https://reviews.llvm.org/D23167
https://reviews.llvm.org/D23168
Files:
lib/AST/Decl.cpp
lib/CodeGen/CGDebugInfo.cpp
Index: lib/CodeGen/CGDebugInfo.cpp
===================================================================
--- lib/CodeGen/CGDebugInfo.cpp
+++ lib/CodeGen/CGDebugInfo.cpp
@@ -2641,6 +2641,9 @@
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);
}
Index: lib/AST/Decl.cpp
===================================================================
--- lib/AST/Decl.cpp
+++ lib/AST/Decl.cpp
@@ -2653,9 +2653,12 @@
}
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
Index: lib/CodeGen/CGDebugInfo.cpp
===================================================================
--- lib/CodeGen/CGDebugInfo.cpp
+++ lib/CodeGen/CGDebugInfo.cpp
@@ -2641,6 +2641,9 @@
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);
}
Index: lib/AST/Decl.cpp
===================================================================
--- lib/AST/Decl.cpp
+++ lib/AST/Decl.cpp
@@ -2653,9 +2653,12 @@
}
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
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits