Skip to content

Commit f241166

Browse files
authored
Fix #4790: Make sure TypeInfo_Class.base is always a TypeInfo_Class ref (#4796)
I.e., ignore all modifiers of the base class.
1 parent 1df61f1 commit f241166

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

ir/irclass.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "dmd/target.h"
1818
#include "gen/abi/abi.h"
1919
#include "gen/arrays.h"
20+
#include "gen/classes.h"
2021
#include "gen/funcgenstate.h"
2122
#include "gen/functions.h"
2223
#include "gen/irstate.h"
@@ -389,7 +390,8 @@ LLConstant *IrClass::getClassInfoInit() {
389390
// TypeInfo_Class base
390391
assert(!isInterface || !cd->baseClass);
391392
if (cd->baseClass) {
392-
b.push_typeinfo(cd->baseClass->type);
393+
DtoResolveClass(cd->baseClass);
394+
b.push(getIrAggr(cd->baseClass)->getClassInfoSymbol());
393395
} else {
394396
b.push_null(cinfoType);
395397
}

tests/codegen/gh4790.d

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// RUN: %ldc -run %s
2+
3+
shared class A {
4+
}
5+
6+
shared class B : A {
7+
}
8+
9+
void main() {
10+
shared A a1 = cast(shared A) A.classinfo.create();
11+
shared A a2 = cast(shared A) B.classinfo.create();
12+
}

0 commit comments

Comments
 (0)