https://github.com/Michael137 created https://github.com/llvm/llvm-project/pull/108155
This is the root-cause for the LLDB failures that started occurring after https://github.com/llvm/llvm-project/pull/105865. The DWARFASTParserClang has logic to try derive unnamed bitfields from DWARF offsets. In this case we treat `padding` as a 1-byte size field that would overlap with `flag`, and decide we need to introduce an unnamed bitfield into the AST, which is incorrect. >From ab898a3e176d0366fc15f6aad4b627d6e999753d Mon Sep 17 00:00:00 2001 From: Michael Buch <michaelbuc...@gmail.com> Date: Wed, 11 Sep 2024 01:15:21 +0100 Subject: [PATCH] [lldb][test] Add test for no_unique_address when mixed with bitfields This is the root-cause for the LLDB failures that started occurring after https://github.com/llvm/llvm-project/pull/105865. The DWARFASTParserClang has logic to try derive unnamed bitfields from DWARF offsets. In this case we treat `padding` as a 1-byte size field that would overlap with `flag`, and decide we need to introduce an unnamed bitfield into the AST, which is incorrect. --- .../no_unique_address-with-bitfields.cpp | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 lldb/test/Shell/SymbolFile/DWARF/no_unique_address-with-bitfields.cpp diff --git a/lldb/test/Shell/SymbolFile/DWARF/no_unique_address-with-bitfields.cpp b/lldb/test/Shell/SymbolFile/DWARF/no_unique_address-with-bitfields.cpp new file mode 100644 index 00000000000000..950bd9585baa22 --- /dev/null +++ b/lldb/test/Shell/SymbolFile/DWARF/no_unique_address-with-bitfields.cpp @@ -0,0 +1,30 @@ +// LLDB currently erroneously adds an unnamed bitfield +// into the AST when a overlapping no_unique_address +// field precedes a bitfield. + +// XFAIL: * + +// RUN: %clangxx_host -gdwarf -o %t %s +// RUN: %lldb %t \ +// RUN: -o "target var global" \ +// RUN: -o "image dump ast" \ +// RUN: -o exit | FileCheck %s + +// CHECK: (lldb) image dump ast +// CHECK-NEXT: CXXRecordDecl {{.*}} struct Foo definition +// CHECK: |-FieldDecl {{.*}} data 'char[5]' +// CHECK-NEXT: |-FieldDecl {{.*}} padding 'Empty' +// CHECK-NEXT: |-FieldDecl {{.*}} 'int' +// CHECK-NEXT: | `-IntegerLiteral {{.*}} 'int' 8 +// CHECK-NEXT: `-FieldDecl {{.*}} sloc> mem 'unsigned long' +// CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 1 + +struct Empty {}; + +struct Foo { + char data[5]; + [[no_unique_address]] Empty padding; + unsigned long flag : 1; +}; + +Foo global; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits