[clang] 428583d - [DebugInfo] Fix debug-info generation for block invocations so that we set the LinkageName

via cfe-commits cfe-commits at lists.llvm.org
Wed Feb 5 11:07:47 PST 2020


Author: shafik
Date: 2020-02-05T11:07:30-08:00
New Revision: 428583dd22fdc8f789390822e7b8ef4a5534721d

URL: https://github.com/llvm/llvm-project/commit/428583dd22fdc8f789390822e7b8ef4a5534721d
DIFF: https://github.com/llvm/llvm-project/commit/428583dd22fdc8f789390822e7b8ef4a5534721d.diff

LOG: [DebugInfo] Fix debug-info generation for block invocations so that we set the LinkageName

Currently when generating debug-info for a BlockDecl we are setting the Name to the mangled name and not setting the LinkageName.
This means we see the mangled name for block invcations ends up in DW_AT_Name and not in DW_AT_linkage_name.

This patch fixes this case so that we also set the LinkageName as well.

Differential Revision: https://reviews.llvm.org/D73282

Added: 
    clang/test/CodeGenCXX/debug-info-block-invocation-linkage-name.cpp

Modified: 
    clang/lib/CodeGen/CGDebugInfo.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp
index 99af4e222b9a..0e54e9419356 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -3665,8 +3665,11 @@ void CGDebugInfo::EmitFunctionStart(GlobalDecl GD, SourceLocation Loc,
     Name = getDynamicInitializerName(cast<VarDecl>(D), GD.getDynamicInitKind(),
                                      Fn);
   } else {
-    // Use llvm function name.
     Name = Fn->getName();
+
+    if (const auto *BD = dyn_cast<BlockDecl>(D))
+      LinkageName = Name;
+
     Flags |= llvm::DINode::FlagPrototyped;
   }
   if (Name.startswith("\01"))

diff  --git a/clang/test/CodeGenCXX/debug-info-block-invocation-linkage-name.cpp b/clang/test/CodeGenCXX/debug-info-block-invocation-linkage-name.cpp
new file mode 100644
index 000000000000..5fadae9b439f
--- /dev/null
+++ b/clang/test/CodeGenCXX/debug-info-block-invocation-linkage-name.cpp
@@ -0,0 +1,15 @@
+// RUN: %clang_cc1 -emit-llvm -debug-info-kind=standalone -fblocks -triple %itanium_abi_triple %s -o - | FileCheck %s
+
+// CHECK: !DISubprogram(name: "___Z1fU13block_pointerFviE_block_invoke", linkageName: "___Z1fU13block_pointerFviE_block_invoke"
+void g(void (^call)(int));
+
+void f(void (^callback)(int)) {
+  g(^(int x) {
+    callback(x);
+  });
+}
+
+void h() {
+  f(^(int x){
+  });
+}


        


More information about the cfe-commits mailing list