aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pretyping/typing.ml9
-rw-r--r--test-suite/success/Cases.v6
2 files changed, 13 insertions, 2 deletions
diff --git a/pretyping/typing.ml b/pretyping/typing.ml
index 09ba88bb9d..bff9bb4997 100644
--- a/pretyping/typing.ml
+++ b/pretyping/typing.ml
@@ -41,6 +41,11 @@ let e_type_judgment env evdref j =
evdref := evd; { utj_val = j.uj_val; utj_type = s }
| _ -> error_not_type env j
+let e_assumption_of_judgment env evdref j =
+ try (e_type_judgment env evdref j).utj_val
+ with TypeError _ ->
+ error_assumption env j
+
let e_judge_of_apply env evdref funj argjv =
let rec apply_rec n typ = function
| [] ->
@@ -149,7 +154,7 @@ let rec execute env evdref cstr =
| Evar ev ->
let ty = Evd.existential_type !evdref ev in
let jty = execute env evdref (whd_evar !evdref ty) in
- let jty = assumption_of_judgment env jty in
+ let jty = e_assumption_of_judgment env evdref jty in
{ uj_val = cstr; uj_type = jty }
| Rel n ->
@@ -242,7 +247,7 @@ let rec execute env evdref cstr =
and execute_recdef env evdref (names,lar,vdef) =
let larj = execute_array env evdref lar in
- let lara = Array.map (assumption_of_judgment env) larj in
+ let lara = Array.map (e_assumption_of_judgment env evdref) larj in
let env1 = push_rec_types (names,lara,vdef) env in
let vdefj = execute_array env1 evdref vdef in
let vdefv = Array.map j_val vdefj in
diff --git a/test-suite/success/Cases.v b/test-suite/success/Cases.v
index f445ca8eac..c9a3c08efe 100644
--- a/test-suite/success/Cases.v
+++ b/test-suite/success/Cases.v
@@ -1865,3 +1865,9 @@ Type (fun n => match n with
| Z0 => true
| _ => false
end).
+
+(* Check that types with unknown sort, as A below, are not fatal to
+ the pattern-matching compilation *)
+
+Definition transport {A} (P : A->Type) {x y : A} (p : x=y) (u : P x) : P y :=
+ match p with eq_refl => u end.