mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 09:23:44 +00:00
We previously discovered a problem with the direct_arg_in_out.m pass. When a closure is constructed from a procedure that would be cloned and transformed, the clone procedure gains additional arguments but the type and inst of the closure variable would still match the arguments of the original procedure. This led to an abort in the float registers pass. I looked into fixing the inconsistencies but it would involve far too much work for such a rare case; see the discussion on mercury-reviews starting from Message-ID: <20210125172531.GH1330@lucy.localdomain> compiler/direct_arg_in_out.m: Abort if we would construct a closure from a daio-cloned procedure. tests/hard_coded/gh72.exp: tests/hard_coded/gh72.m: Delete higher order tests.
95 lines
2.6 KiB
Plaintext
95 lines
2.6 KiB
Plaintext
f1(package(fill1, a))
|
|
f2(package(fill2, b))
|
|
f3(package(fill3, c))
|
|
f4(package(start4, d))
|
|
|
|
disj_test_init(f1)
|
|
10: 10, f1(package(fill1, 110)) | f1(package(fill1, 110))
|
|
10: 10; f1(package(fill1, 110)) | f1(package(fill1, 110))
|
|
11: 11, f1(package(fill1, a11)) | f1(package(fill1, a11))
|
|
12: 12, no_t | f1(package(fill1, 12))
|
|
disj_test_init(f2)
|
|
10: 10, f2(package(fill2, 210)) | f2(package(fill2, 210))
|
|
10: 10; f2(package(fill2, 210)) | f2(package(fill2, 210))
|
|
11: 11, f2(package(fill2, b11)) | f2(package(fill2, b11))
|
|
12: 12, no_t | f2(package(fill2, 12))
|
|
disj_test_init(f3)
|
|
10: 10, f3(package(fill3, 310)) | f3(package(fill3, 310))
|
|
10: 10; f3(package(fill3, 310)) | f3(package(fill3, 310))
|
|
11: 11, f3(package(fill3, b11)) | f3(package(fill3, b11))
|
|
12: 12, no_t | f3(package(fill3, 12))
|
|
end
|
|
|
|
switch_test_init(10, f1)
|
|
10, f1(package(fill1, 110)) | f1(package(fill1, 110))
|
|
10; f1(package(fill1, 110)) | f1(package(fill1, 110))
|
|
switch_test_init(10, f2)
|
|
10, f2(package(fill2, 210)) | f2(package(fill2, 210))
|
|
10; f2(package(fill2, 210)) | f2(package(fill2, 210))
|
|
switch_test_init(10, f3)
|
|
10, f3(package(fill3, 310)) | f3(package(fill3, 310))
|
|
10; f3(package(fill3, 310)) | f3(package(fill3, 310))
|
|
end
|
|
|
|
switch_test_init(11, f1)
|
|
11, f1(package(fill1, a11)) | f1(package(fill1, a11))
|
|
switch_test_init(11, f2)
|
|
11, f2(package(fill2, b11)) | f2(package(fill2, b11))
|
|
switch_test_init(11, f3)
|
|
11, f3(package(fill3, b11)) | f3(package(fill3, b11))
|
|
end
|
|
|
|
switch_test_init(12, f1)
|
|
12, no_t | f1(package(fill1, 12))
|
|
switch_test_init(12, f2)
|
|
12, no_t | f2(package(fill2, 12))
|
|
switch_test_init(12, f3)
|
|
12, no_t | f3(package(fill3, 12))
|
|
end
|
|
|
|
switch_test_init(13, f1)
|
|
switch_test_init(13, f2)
|
|
switch_test_init(13, f3)
|
|
end
|
|
|
|
ite_test_init(10, f1)
|
|
10, f1(package(fill1, 110)) | f1(package(fill1, 110))
|
|
ite_test_init(10, f2)
|
|
10, f2(package(fill2, 210)) | f2(package(fill2, 210))
|
|
ite_test_init(10, f3)
|
|
10, f3(package(fill3, 310)) | f3(package(fill3, 310))
|
|
end
|
|
|
|
ite_test_init(11, f1)
|
|
11, f1(package(fill1, a11)) | f1(package(fill1, a11))
|
|
ite_test_init(11, f2)
|
|
11, f2(package(fill2, b11)) | f2(package(fill2, b11))
|
|
ite_test_init(11, f3)
|
|
11, f3(package(fill3, b11)) | f3(package(fill3, b11))
|
|
end
|
|
|
|
ite_test_init(12, f1)
|
|
12, no_t | f1(package(fill1, 12))
|
|
ite_test_init(12, f2)
|
|
12, no_t | f2(package(fill2, 12))
|
|
ite_test_init(12, f3)
|
|
12, no_t | f3(package(fill3, 12))
|
|
end
|
|
|
|
ite_test_init(13, f1)
|
|
ite_test_init(13, f2)
|
|
ite_test_init(13, f3)
|
|
end
|
|
|
|
method test string
|
|
p1 f1(package(fill1, hij))
|
|
p2 f2(package(test2, test2))
|
|
p3 f3(package(test3, test3))
|
|
p4 f4(package(test4, test4))
|
|
|
|
method test int
|
|
p1 f1(package(fill1, 53))
|
|
p2 f2(package(test2, test2))
|
|
p3 f3(package(test3, test3))
|
|
p4 f4(package(test4, test4))
|