Skip to content

Commit

Permalink
[lldb][test] Add test for no_unique_address when mixed with bitfields
Browse files Browse the repository at this point in the history
This is the root-cause for the LLDB failures that started
occurring after llvm#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.
  • Loading branch information
Michael137 committed Sep 11, 2024
1 parent d2f25e5 commit ab898a3
Showing 1 changed file with 30 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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;

0 comments on commit ab898a3

Please sign in to comment.