Skip to content

Commit b3ca752

Browse files
jyasskingraydon
authored andcommitted
More destruction ordering tests.
1 parent 7dd464f commit b3ca752

File tree

1 file changed

+52
-2
lines changed

1 file changed

+52
-2
lines changed

Diff for: src/test/run-pass/destructor-ordering.rs

+52-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,58 @@ obj dorder(@order_tracker tracker, int order, str message) {
2222
}
2323
}
2424

25-
fn main() {
25+
fn test_simple() {
2626
auto tracker = @order_tracker(0);
2727
dorder(tracker, 1, "Reverse decl order");
2828
dorder(tracker, 0, "Reverse decl order");
29-
}
29+
}
30+
31+
fn test_block() {
32+
auto tracker = @order_tracker(0);
33+
dorder(tracker, 2, "Before block");
34+
{
35+
dorder(tracker, 0, "Inside block");
36+
}
37+
dorder(tracker, 1, "After block");
38+
}
39+
40+
fn test_decl_v_init() {
41+
auto tracker = @order_tracker(0);
42+
auto var1;
43+
auto var2;
44+
var2 = dorder(tracker, 0, "decl, not init");
45+
var1 = dorder(tracker, 1, "decl, not init");
46+
}
47+
48+
fn test_overwritten_obj() {
49+
auto tracker = @order_tracker(0);
50+
auto var1 = dorder(tracker, 0, "overwritten object destroyed first");
51+
auto var2 = dorder(tracker, 2, "destroyed at end of scope");
52+
var1 = dorder(tracker, 3, "overwriter deleted in rev decl order");
53+
{
54+
dorder(tracker, 1, "overwritten object destroyed before end of scope");
55+
}
56+
}
57+
58+
// Used to embed dorder objects into an expression. Note that the
59+
// parameters don't get destroyed.
60+
fn combine_dorders(dorder d1, dorder d2) -> int {
61+
ret 1;
62+
}
63+
fn test_expression_destroyed_right_to_left() {
64+
auto tracker = @order_tracker(0);
65+
combine_dorders(dorder(tracker, 4, ""), dorder(tracker, 3, ""))
66+
/ combine_dorders(dorder(tracker, 2, ""), dorder(tracker, 1, ""));
67+
{
68+
dorder(tracker, 0,
69+
"expression objects live to end of block, not statement");
70+
}
71+
}
72+
73+
fn main() {
74+
test_simple();
75+
test_block();
76+
test_decl_v_init();
77+
test_overwritten_obj();
78+
test_expression_destroyed_right_to_left();
79+
}

0 commit comments

Comments
 (0)