[PATCH] D80463: Debug Info: Mark os_log helper functions as artificial

Adrian Prantl via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri May 22 17:42:19 PDT 2020


aprantl created this revision.
aprantl added reviewers: vsk, ahatanak, JDevlieghere, friss.
aprantl added a project: debug-info.
Herald added a subscriber: dexonsmith.
aprantl edited the summary of this revision.

The os_log helper functions are linkonce_odr and supposed to be uniqued across TUs, so attachine a DW_AT_decl_line on it is highly misleading. By setting the function decl to implicit, CGDebugInfo properly marks the functions as artificial and uses a default file / line 0 location for the function.

rdar://problem/63450824


https://reviews.llvm.org/D80463

Files:
  clang/lib/CodeGen/CGBuiltin.cpp
  clang/test/CodeGen/debug-info-oslog.c


Index: clang/test/CodeGen/debug-info-oslog.c
===================================================================
--- /dev/null
+++ clang/test/CodeGen/debug-info-oslog.c
@@ -0,0 +1,15 @@
+// RUN: %clang_cc1 -triple x86_64-darwin-apple -debug-info-kind=limited \
+// RUN:   %s -emit-llvm -o -  | FileCheck %s
+void test_builtin_os_log(void *buf, int i, const char *data) {
+  __builtin_os_log_format(buf, "%d", i);
+}
+
+// CHECK: define linkonce_odr {{.*}}@__os_log_helper_1_0_1_4_0(
+// CHECK-SAME:   !dbg ![[OS_LOG_HELPER:[0-9]+]]
+
+// This helper is going to be uniqued, so it should not have a line
+// number between file and type.
+
+// CHECK: distinct !DISubprogram(name: "__os_log_helper_1_0_1_4_0",
+// CHECK-SAME:                   file: !{{[0-9+]}}, type
+// CHECK-SAME:                   flags: DIFlagArtificial
Index: clang/lib/CodeGen/CGBuiltin.cpp
===================================================================
--- clang/lib/CodeGen/CGBuiltin.cpp
+++ clang/lib/CodeGen/CGBuiltin.cpp
@@ -1271,6 +1271,8 @@
   FunctionDecl *FD = FunctionDecl::Create(
       Ctx, Ctx.getTranslationUnitDecl(), SourceLocation(), SourceLocation(), II,
       FuncionTy, nullptr, SC_PrivateExtern, false, false);
+  // Avoid generating debug location info for the function.
+  FD->setImplicit();
 
   StartFunction(FD, ReturnTy, Fn, FI, Args);
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D80463.265824.patch
Type: text/x-patch
Size: 1344 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200523/ccc59a02/attachment.bin>


More information about the cfe-commits mailing list