compiler.cfg.write-barrier: fix soundness issue with ##copy that never came up but probably should've been fixed anyway

db4
Slava Pestov 2010-09-06 17:01:44 -07:00
parent a605d5c9c9
commit a67c7c5739
2 changed files with 62 additions and 1 deletions

View File

@ -91,3 +91,64 @@ IN: compiler.cfg.write-barrier.tests
T{ ##write-barrier-imm f 1 }
} write-barriers-step
] unit-test
! ##copy instructions
[
V{
T{ ##copy f 2 1 }
T{ ##set-slot-imm f 3 1 }
T{ ##write-barrier-imm f 2 }
}
] [
V{
T{ ##copy f 2 1 }
T{ ##set-slot-imm f 3 1 }
T{ ##write-barrier-imm f 2 }
} write-barriers-step
] unit-test
[
V{
T{ ##copy f 2 1 }
T{ ##set-slot-imm f 3 2 }
T{ ##write-barrier-imm f 1 }
}
] [
V{
T{ ##copy f 2 1 }
T{ ##set-slot-imm f 3 2 }
T{ ##write-barrier-imm f 1 }
} write-barriers-step
] unit-test
[
V{
T{ ##copy f 2 1 }
T{ ##copy f 3 2 }
T{ ##set-slot-imm f 3 1 }
T{ ##write-barrier-imm f 2 }
}
] [
V{
T{ ##copy f 2 1 }
T{ ##copy f 3 2 }
T{ ##set-slot-imm f 3 1 }
T{ ##write-barrier-imm f 2 }
} write-barriers-step
] unit-test
[
V{
T{ ##copy f 2 1 }
T{ ##copy f 3 2 }
T{ ##set-slot-imm f 4 1 }
T{ ##write-barrier-imm f 3 }
}
] [
V{
T{ ##copy f 2 1 }
T{ ##copy f 3 2 }
T{ ##set-slot-imm f 4 1 }
T{ ##write-barrier-imm f 3 }
} write-barriers-step
] unit-test

View File

@ -50,7 +50,7 @@ M: gc-map-insn eliminate-write-barrier
fresh-allocations get clear-assoc ;
M: ##copy eliminate-write-barrier
[ src>> ] [ dst>> ] bi copies get set-at t ;
[ src>> resolve-copy ] [ dst>> ] bi copies get set-at t ;
M: insn eliminate-write-barrier drop t ;