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
…llvm#108155)

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 authored Sep 11, 2024
1 parent e1ee07d commit da69449
Showing 1 changed file with 28 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// LLDB currently erroneously adds an unnamed bitfield
// into the AST when an overlapping no_unique_address
// field precedes a bitfield.

// RUN: %clang --target=x86_64-apple-macosx -c -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: 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> flag '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 da69449

Please sign in to comment.