diff options
| author | Patrick Walton <[email protected]> | 2010-12-21 15:58:17 -0800 |
|---|---|---|
| committer | Patrick Walton <[email protected]> | 2010-12-21 15:59:14 -0800 |
| commit | d7cbeba731716f176f4c116cfe92f3ec246e1396 (patch) | |
| tree | 6f4693f2689e63f5beeb46cc0b6854833ea4aad8 /src | |
| parent | Add std.sort, with a simple mergesort. (diff) | |
| download | rust-d7cbeba731716f176f4c116cfe92f3ec246e1396.tar.xz rust-d7cbeba731716f176f4c116cfe92f3ec246e1396.zip | |
rustboot: Only bottom out at opaque IL types after finding two cycles. DON'T ASK ME WHY THIS WORKS.
Diffstat (limited to 'src')
| -rw-r--r-- | src/boot/me/semant.ml | 2 | ||||
| -rw-r--r-- | src/boot/util/common.ml | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/boot/me/semant.ml b/src/boot/me/semant.ml index cea0b479..019cd13e 100644 --- a/src/boot/me/semant.ml +++ b/src/boot/me/semant.ml @@ -2425,7 +2425,7 @@ and referent_type Some parent_tags when boxed && parent_tags <> [] - && List.mem ttag parent_tags + && (list_count ttag parent_tags) > 1 && is_back_edge ttag (List.hd parent_tags) -> Il.StructTy [| word; Il.OpaqueTy |] | _ -> tag ttag diff --git a/src/boot/util/common.ml b/src/boot/util/common.ml index 7a95573c..f9b18246 100644 --- a/src/boot/util/common.ml +++ b/src/boot/util/common.ml @@ -380,6 +380,13 @@ let rec list_drop n ls = else list_drop (n-1) (List.tl ls) ;; +let rec list_count elem lst = + match lst with + [] -> 0 + | h::t when h = elem -> 1 + (list_count elem t) + | _::t -> list_count elem t +;; + (* * Auxiliary pair functions. |