Skip to content

Commit adbc02c

Browse files
authored
Merge pull request #3914 from augusto2112/calculate-stride
[lldb] Calculate stride of clang types on emplaceClangTypeInfo.
2 parents 29d94d4 + 0b9c2a7 commit adbc02c

File tree

5 files changed

+32
-2
lines changed

5 files changed

+32
-2
lines changed

lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeDynamicTypeResolution.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -664,17 +664,22 @@ SwiftLanguageRuntimeImpl::emplaceClangTypeInfo(
664664
m_clang_type_info.insert({clang_type.GetOpaqueQualType(), llvm::None});
665665
return nullptr;
666666
}
667+
assert(*bit_align % 8 == 0 && "Bit alignment no a multiple of 8!");
668+
auto byte_align = *bit_align / 8;
669+
// The stride is the size rounded up to alignment.
670+
size_t byte_stride = llvm::alignTo(*byte_size, byte_align);
667671
if (fields.empty()) {
668672
auto it_b = m_clang_type_info.insert(
669673
{clang_type.GetOpaqueQualType(),
670674
swift::reflection::TypeInfo(swift::reflection::TypeInfoKind::Builtin,
671-
*byte_size, *bit_align / 8, 0, 0, true)});
675+
*byte_size, byte_align, byte_stride, 0,
676+
true)});
672677
return &*it_b.first->second;
673678
}
674679
auto it_b = m_clang_record_type_info.insert(
675680
{clang_type.GetOpaqueQualType(),
676681
swift::reflection::RecordTypeInfo(
677-
*byte_size, *bit_align / 8, 0, 0, false,
682+
*byte_size, byte_align, byte_stride, 0, false,
678683
swift::reflection::RecordKind::Struct, fields)});
679684
return &*it_b.first->second;
680685
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
SWIFT_SOURCES := main.swift
2+
SWIFT_BRIDGING_HEADER := bridging-header.h
3+
SWIFT_OBJC_INTEROP := 1
4+
include Makefile.rules
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import lldbsuite.test.lldbinline as lldbinline
2+
from lldbsuite.test.decorators import *
3+
4+
lldbinline.MakeInlineTest(__file__, globals(), decorators=[swiftTest, skipUnlessFoundation])
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#ifndef bridging_header_h
2+
#define bridging_header_h
3+
4+
#import <Foundation/Foundation.h>
5+
6+
typedef NS_CLOSED_ENUM(NSInteger, SampleEnum) {
7+
SampleEnumZero,
8+
SampleEnumOne,
9+
SampleEnumTwo,
10+
SampleEnumThree,
11+
};
12+
#endif /* bridging_header_h */
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
let array = [SampleEnum.zero, SampleEnum.one, SampleEnum.two, SampleEnum.three]
2+
print(array) //%self.expect('frame variable array[0]', substrs=['[0]', '.SampleEnumZero'])
3+
//%self.expect('frame variable array[1]', substrs=['[1]', '.SampleEnumOne'])
4+
//%self.expect('frame variable array[2]', substrs=['[2]', '.SampleEnumTwo'])
5+
//FIXME: frame variable array[3] returns [.SampleEnumOne, .SampleEnumTwo]

0 commit comments

Comments
 (0)