https://github.com/sga-sc updated https://github.com/llvm/llvm-project/pull/150022
>From 4c5fb008e121531558a7a9d106642f8e954e91dc Mon Sep 17 00:00:00 2001 From: Georgiy Samoylov <g.samoy...@syntacore.com> Date: Tue, 29 Jul 2025 12:46:31 +0300 Subject: [PATCH 1/2] [DebugInfo] Changed way for getting callee function --- clang/lib/CodeGen/CGDebugInfo.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index a371b6755f74d..14803c6c52cd3 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -43,6 +43,7 @@ #include "llvm/IR/Constants.h" #include "llvm/IR/DataLayout.h" #include "llvm/IR/DerivedTypes.h" +#include "llvm/IR/Function.h" #include "llvm/IR/Instruction.h" #include "llvm/IR/Instructions.h" #include "llvm/IR/Intrinsics.h" @@ -4805,7 +4806,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 238b68d6b84795f961f7801e419344f5b4d7cbfa Mon Sep 17 00:00:00 2001 From: Georgiy Samoylov <g.samoy...@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; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits