[PATCH] D23168: emit_DW_AT_noreturn flag

Victor via cfe-commits cfe-commits at lists.llvm.org
Thu Aug 4 09:13:22 PDT 2016


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


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D23168.66817.patch
Type: text/x-patch
Size: 1264 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160804/2ffdebed/attachment-0001.bin>


More information about the cfe-commits mailing list