Bug in AST copying would make operator overloading like += compile incorrectly #2217

This commit is contained in:
Christoffer Lerno
2025-06-17 16:01:44 +02:00
parent 95137db64b
commit 99e29bff8d
4 changed files with 38 additions and 5 deletions

View File

@@ -0,0 +1,32 @@
// #target: macos-aarch64
module test;
typedef Foo = int;
macro Foo Foo.add(self1, Foo other) @operator(+) => self1;
macro Foo Foo.add_self(&self, Foo other) @operator(+=) => *self = *self + other;
macro Foo Foo.test(&self2) => *self2 += (Foo)0;
fn int main()
{
Foo b;
defer b.test();
return 0;
}
/* #expect: test.ll
define i32 @main() #0 {
entry:
%b = alloca i32, align 4
%self1 = alloca i32, align 4
store i32 0, ptr %b, align 4
%neq = icmp ne ptr %b, null
call void @llvm.assume(i1 %neq)
%neq1 = icmp ne ptr %b, null
call void @llvm.assume(i1 %neq1)
%0 = load i32, ptr %b, align 4
store i32 %0, ptr %self1, align 4
%1 = load i32, ptr %self1, align 4
store i32 %1, ptr %b, align 4
ret i32 0
}