aboutsummaryrefslogtreecommitdiff
path: root/src/test/run-pass/alt-pattern-drop.rs
blob: a59248ebfa8eb699171d256d190f7308fa5d72a8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// -*- rust -*-

use std;
import std::_str;

// FIXME: import std::dbg.const_refcount. Currently
// cross-crate const references don't work.
const uint const_refcount = 0x7bad_face_u;

tag t {
  make_t(str);
  clam;
}

fn foo(str s) {
  let t x = make_t(s);  // ref up

  alt (x) {
    case (make_t(?y)) { log y; }  // ref up then down
    case (_) { log "?"; fail; }
  }

  log _str::refcount(s);
  assert (_str::refcount(s) == const_refcount);
}

fn main() {
  let str s = "hi";     // ref up
  foo(s);               // ref up then down
  log _str::refcount(s);
  assert (_str::refcount(s) == const_refcount);
}