mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 00:56:06 +00:00

RFC https://discourse.llvm.org/t/rfc-dwarfdebug-fix-and-improve-handling-imported-entities-types-and-static-local-in-subprogram-and-lexical-block-scopes/68544 Currently, `retainedNodes` tracks function-local variables and labels. To support function-local import, types and static variables (which are globals in LLVM IR), subsequent patches use the same field. So this patch makes preliminary refactoring of the code tracking local entities to apply future functional changes lucidly and cleanly. No functional changes intended. Differential Revision: https://reviews.llvm.org/D143984
46 lines
1.4 KiB
C++
46 lines
1.4 KiB
C++
// RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm-only -std=c++14 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s
|
|
|
|
// CHECK: imports: [[IMPS:![0-9]*]]
|
|
|
|
// CHECK: [[IMPS]] = !{[[IMP:![0-9]*]]}
|
|
// CHECK: [[IMP]] = !DIImportedEntity(
|
|
// CHECK-SAME: entity: [[F3:![0-9]*]]
|
|
// CHECK: [[F3]] = distinct !DISubprogram(name: "f3"
|
|
// CHECK-SAME: type: [[SUBROUTINE_TYPE:![0-9]*]]
|
|
// CHECK: [[SUBROUTINE_TYPE]] = !DISubroutineType(types: [[TYPE_LIST:![0-9]*]])
|
|
// CHECK: [[TYPE_LIST]] = !{[[INT:![0-9]*]]}
|
|
// CHECK: [[INT]] = !DIBasicType(name: "int"
|
|
|
|
// CHECK: [[FOO:![0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "foo",
|
|
// CHECK-SAME: elements: [[EMPTY:![0-9]*]]
|
|
// CHECK: [[EMPTY]] = !{}
|
|
|
|
// FIXME: The context of this definition should be the CU/file scope, not the class.
|
|
// CHECK: !DISubprogram(name: "func", {{.*}} scope: [[FOO]]
|
|
// CHECK-SAME: type: [[SUBROUTINE_TYPE]]
|
|
// CHECK-SAME: DISPFlagDefinition
|
|
// CHECK-SAME: declaration: [[FUNC_DECL:![0-9]*]]
|
|
// CHECK: [[FUNC_DECL]] = !DISubprogram(name: "func",
|
|
// CHECK-SAME: scope: [[FOO]]
|
|
// CHECK-SAME: type: [[SUBROUTINE_TYPE]]
|
|
// CHECK-SAME: spFlags: 0
|
|
|
|
struct foo {
|
|
static auto func();
|
|
};
|
|
|
|
foo f;
|
|
|
|
auto foo::func() {
|
|
return 1;
|
|
}
|
|
|
|
namespace ns {
|
|
auto f2();
|
|
auto f3() {
|
|
return 0;
|
|
}
|
|
}
|
|
using ns::f2;
|
|
using ns::f3;
|