File tree Expand file tree Collapse file tree 3 files changed +20
-3
lines changed
test/Interop/Cxx/class/inheritance Expand file tree Collapse file tree 3 files changed +20
-3
lines changed Original file line number Diff line number Diff line change @@ -338,16 +338,18 @@ namespace {
338
338
339
339
if (auto cxxRecord = dyn_cast<clang::CXXRecordDecl>(ClangDecl)) {
340
340
for (auto base : cxxRecord->bases ()) {
341
- auto baseRecord = cast<clang::RecordType>(base.getType ())->getDecl ();
341
+ auto baseType = base.getType ().getCanonicalType ();
342
+
343
+ auto baseRecord = cast<clang::RecordType>(baseType)->getDecl ();
342
344
auto baseCxxRecord = cast<clang::CXXRecordDecl>(baseRecord);
343
345
344
346
if (baseCxxRecord->isEmpty ())
345
347
continue ;
346
348
347
349
auto offset = layout.getBaseClassOffset (baseCxxRecord);
348
350
auto size =
349
- ClangDecl->getASTContext ().getTypeSizeInChars (base. getType () );
350
- fn (base. getType () , offset, size);
351
+ ClangDecl->getASTContext ().getTypeSizeInChars (baseType );
352
+ fn (baseType , offset, size);
351
353
}
352
354
}
353
355
}
Original file line number Diff line number Diff line change @@ -46,3 +46,12 @@ struct NonTrivialHasOneField {
46
46
struct NonTrivialDerivedFromAll : NonTrivialHasOneField, NonTrivialDerivedWithOneField {
47
47
int f = 6 ;
48
48
};
49
+
50
+ // Templates:
51
+
52
+ template <class T >
53
+ struct ClassTemplate {
54
+ T value;
55
+ };
56
+
57
+ struct DerivedFromClassTemplate : ClassTemplate<int > {};
Original file line number Diff line number Diff line change @@ -52,4 +52,10 @@ FieldsTestSuite.test("Fields from derived from non trivial") {
52
52
expectEqual ( mutable. f, 48 )
53
53
}
54
54
55
+ FieldsTestSuite . test ( " Derived from class template " ) {
56
+ var derived = DerivedFromClassTemplate ( )
57
+ derived. value = 42
58
+ expectEqual ( derived. value, 42 )
59
+ }
60
+
55
61
runAllTests ( )
You can’t perform that action at this time.
0 commit comments