llvm-project/llvm/test/DebugInfo/accel-imported-declaration.test
Michael Buch 657672667f [llvm][DebugInfo] Add DW_TAG_imported_declaration to accelerator tables
**Summary**

After this patch, `DW_TAG_imported_declaration`s will be emitted into
the DWARF accelerator tables (under `.apple_namespaces`)

**Motivation**

Currently LLDB expression evaluation doesn't see through namespace
aliases. This is because LLDB only considers namespaces that are
part of `.apple_namespaces` when building a nested namespace
identifier for C++, which currently doesn't include import
declarations. The alternative to putting imports into accelerator
tables is to do a linear scan of a `DW_TAG_namespace` and look
for import declarations that look like they would satisfy the lookup
request, which is prohibitively expensive.

**Testing**

* Added unit-test

Differential Revision: https://reviews.llvm.org/D143397
2023-02-10 01:33:51 +00:00

38 lines
1.2 KiB
Plaintext

RUN: llvm-dwarfdump -v %p/Inputs/accel-imported-declaration.macho-arm64.o | FileCheck %s
RUN: llvm-dwarfdump -verify %p/Inputs/accel-imported-declaration.macho-arm64.o | FileCheck %s --check-prefix=VERIFY
Gather some DIE indexes to verify the accelerator table contents.
CHECK: .debug_info contents
CHECK: {{.*}}DW_TAG_namespace
CHECK: DW_AT_name{{.*}}"A"
CHECK: {{.*}}DW_TAG_namespace
CHECK: DW_AT_name{{.*}}"B"
CHECK: [[NAMESPACE:0x[0-9a-f]*]]:{{.*}}DW_TAG_namespace
CHECK: DW_AT_name{{.*}}"C"
CHECK: [[IMPORTED:0x[0-9a-f]*]]:{{.*}}DW_TAG_imported_declaration
CHECK: DW_AT_name{{.*}}"C"
Check that the .apple_namespaces section contains two entries for "namespace C"
CHECK: .apple_namespaces contents:
CHECK: Bucket 1 [
CHECK-NEXT: Hash {{.*}} [
CHECK-NEXT: Name{{.*}} {
CHECK-NEXT: String: {{.*}} "C"
CHECK-NEXT: Data 0 [
CHECK-NEXT: Atom[0]: [[NAMESPACE]]
CHECK-NEXT: ]
CHECK-NEXT: Data 1 [
CHECK-NEXT: Atom[0]: [[IMPORTED]]
CHECK-NEXT: ]
CHECK-NEXT: }
CHECK-NEXT: ]
CHECK-NEXT: ]
VERIFY: Verifying .apple_names...
VERIFY-NEXT: Verifying .apple_types...
VERIFY-NEXT: Verifying .apple_namespaces...
VERIFY-NEXT: Verifying .apple_objc...
VERIFY-NEXT: No errors.