Interfaces not correctly copied with generics #1545.

This commit is contained in:
Christoffer Lerno
2024-10-11 13:26:22 +02:00
parent 8e24f15d58
commit efeb9e627e
4 changed files with 34 additions and 0 deletions

View File

@@ -29,6 +29,7 @@
- Improved error message on invalid subscript index type #1535.
- Improved error message when declaring a variable `void!`.
- Cannot use void as a generic parameter #1546
- Interfaces not correctly copied with generics #1545
### Stdlib changes
- Remove unintended print of `char[]` as String

View File

@@ -941,6 +941,7 @@ Decl *copy_decl(CopyStruct *c, Decl *decl)
case DECL_ERASED:
break;
case DECL_INTERFACE:
copy_decl_type(copy);
MACRO_COPY_TYPE_LIST(copy->interfaces);
MACRO_COPY_DECL_LIST(copy->methods);
MACRO_COPY_DECL_LIST(copy->interface_methods);

View File

@@ -1,3 +1,4 @@
// #target: macos-aarch64
module gen(<Type>);
fn Type mult(Type x)

View File

@@ -0,0 +1,31 @@
// #target: macos-aarch64
module base;
module test(<MyType>);
import base;
interface Zzz
{
fn void zzz(MyType t);
}
struct TestStruct (Zzz)
{
String data;
}
fn void TestStruct.zzz(&self, MyType t) @dynamic { }
module app;
import test;
fn int main()
{
TestStruct(<int>) ts;
return 0;
}
/* #expect: app.ll
define i32 @main() #0 {
entry:
%ts = alloca %TestStruct, align 8
call void @llvm.memset.p0.i64(ptr align 8 %ts, i8 0, i64 16, i1 false)
ret i32 0
}