[clang] [clang][RISCV] Fix clang dwarf info generation for unprtototyped function (PR #150022)
Georgiy Samoylov via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 29 03:30:10 PDT 2025
https://github.com/sga-sc updated https://github.com/llvm/llvm-project/pull/150022
>From 7c08ebd3a3959e56799474bbad29a417f8859e93 Mon Sep 17 00:00:00 2001
From: Georgiy Samoylov <g.samoylov at syntacore.com>
Date: Tue, 29 Jul 2025 13:28:59 +0300
Subject: [PATCH 1/2] [clang][DebugInfo] Changed way of getting callee function
---
clang/lib/CodeGen/CGDebugInfo.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp
index a371b6755f74d..cf9e25e1d0127 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -4805,7 +4805,7 @@ void CGDebugInfo::EmitFuncDeclForCallSite(llvm::CallBase *CallOrInvoke,
const FunctionDecl *CalleeDecl) {
if (!CallOrInvoke)
return;
- auto *Func = CallOrInvoke->getCalledFunction();
+ auto *Func = dyn_cast_or_null<llvm::Function>(CallOrInvoke->getCalledOperand());
if (!Func)
return;
if (Func->getSubprogram())
>From 3807705757060be29f897996221859ef9d4a6a73 Mon Sep 17 00:00:00 2001
From: Georgiy Samoylov <g.samoylov at syntacore.com>
Date: Thu, 17 Jul 2025 18:35:02 +0300
Subject: [PATCH 2/2] [clang][test] Added test for EmitFuncDeclForCallSite
---
.../CodeGen/RISCV/debug-info-emit-func-decl.c | 27 +++++++++++++++++++
.../RISCV/debug-info-emit-func-decl.cpp | 27 +++++++++++++++++++
2 files changed, 54 insertions(+)
create mode 100644 clang/test/CodeGen/RISCV/debug-info-emit-func-decl.c
create mode 100644 clang/test/CodeGen/RISCV/debug-info-emit-func-decl.cpp
diff --git a/clang/test/CodeGen/RISCV/debug-info-emit-func-decl.c b/clang/test/CodeGen/RISCV/debug-info-emit-func-decl.c
new file mode 100644
index 0000000000000..e580cb2702047
--- /dev/null
+++ b/clang/test/CodeGen/RISCV/debug-info-emit-func-decl.c
@@ -0,0 +1,27 @@
+// REQUIRES: riscv-registered-target
+// RUN: %clang_cc1 -triple riscv64 -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -O2 -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK-RV64
+// RUN: %clang_cc1 -triple riscv64 -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=lldb -O2 -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK-RV64
+// RUN: %clang_cc1 -triple riscv64 -debug-info-kind=limited -dwarf-version=5 -O2 -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK-RV64
+
+// RUN: %clang_cc1 -triple riscv32 -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -O2 -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK-RV32
+// RUN: %clang_cc1 -triple riscv32 -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=lldb -O2 -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK-RV32
+// RUN: %clang_cc1 -triple riscv32 -debug-info-kind=limited -dwarf-version=5 -O2 -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK-RV32
+
+// CHECK-RV64: declare !dbg ![[FOO:[0-9]+]] void @foo(...) local_unnamed_addr #[[ATTR0:[0-9]+]]
+// CHECK-RV32: declare !dbg ![[FOO:[0-9]+]] void @foo(...) local_unnamed_addr #[[ATTR0:[0-9]+]]
+void foo();
+
+// CHECK-RV64: declare !dbg ![[BAR:[0-9]+]] void @bar() local_unnamed_addr #[[ATTR0:[0-9]+]]
+// CHECK-RV32: declare !dbg ![[BAR:[0-9]+]] void @bar() local_unnamed_addr #[[ATTR0:[0-9]+]]
+void bar(void);
+
+// CHECK-RV64: declare !dbg ![[BAZ:[0-9]+]] void @baz(i32 noundef signext, ...) local_unnamed_addr #[[ATTR0:[0-9]+]]
+// CHECK-RV32: declare !dbg ![[BAZ:[0-9]+]] void @baz(i32 noundef, ...) local_unnamed_addr #[[ATTR0:[0-9]+]]
+void baz(int a, ...);
+
+int main() {
+ foo();
+ bar();
+ baz(1);
+ return 0;
+}
diff --git a/clang/test/CodeGen/RISCV/debug-info-emit-func-decl.cpp b/clang/test/CodeGen/RISCV/debug-info-emit-func-decl.cpp
new file mode 100644
index 0000000000000..48f5540b4be78
--- /dev/null
+++ b/clang/test/CodeGen/RISCV/debug-info-emit-func-decl.cpp
@@ -0,0 +1,27 @@
+// REQUIRES: riscv-registered-target
+// RUN: %clang_cc1 -triple riscv64 -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -O2 -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK-RV64
+// RUN: %clang_cc1 -triple riscv64 -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=lldb -O2 -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK-RV64
+// RUN: %clang_cc1 -triple riscv64 -debug-info-kind=limited -dwarf-version=5 -O2 -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK-RV64
+
+// RUN: %clang_cc1 -triple riscv32 -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=gdb -O2 -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK-RV32
+// RUN: %clang_cc1 -triple riscv32 -debug-info-kind=limited -dwarf-version=4 -debugger-tuning=lldb -O2 -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK-RV32
+// RUN: %clang_cc1 -triple riscv32 -debug-info-kind=limited -dwarf-version=5 -O2 -emit-llvm %s -o - | FileCheck %s --check-prefix=CHECK-RV32
+
+// CHECK-RV64: declare !dbg ![[FOO:[0-9]+]] void @_Z3foov() local_unnamed_addr #[[ATTR0:[0-9]+]]
+// CHECK-RV32: declare !dbg ![[FOO:[0-9]+]] void @_Z3foov() local_unnamed_addr #[[ATTR0:[0-9]+]]
+void foo();
+
+// CHECK-RV64: declare !dbg ![[BAR:[0-9]+]] void @_Z3barv() local_unnamed_addr #[[ATTR0:[0-9]+]]
+// CHECK-RV32: declare !dbg ![[BAR:[0-9]+]] void @_Z3barv() local_unnamed_addr #[[ATTR0:[0-9]+]]
+void bar(void);
+
+// CHECK-RV64: declare !dbg ![[BAZ:[0-9]+]] void @_Z3baziz(i32 noundef signext, ...) local_unnamed_addr #[[ATTR0:[0-9]+]]
+// CHECK-RV32: declare !dbg ![[BAZ:[0-9]+]] void @_Z3baziz(i32 noundef, ...) local_unnamed_addr #[[ATTR0:[0-9]+]]
+void baz(int a, ...);
+
+int main() {
+ foo();
+ bar();
+ baz(1);
+ return 0;
+}
More information about the cfe-commits
mailing list