aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/boot/me/semant.ml2
-rw-r--r--src/boot/util/common.ml7
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.