aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorherbelin2012-12-18 07:00:50 +0000
committerherbelin2012-12-18 07:00:50 +0000
commit7f4b6b875daaf1d31ff74a58d8916c2a4889cf3a (patch)
tree4c932205d7eb8ad6306ac1d708ee64874856f8d1
parent693b8a7a4dc4535d2aa2912deec2cb21deb39c75 (diff)
Taking into account the possibility of having a type of type which is
an evar in typing.ml. Thanks to HoTT people for noticing the problem. Fixed behavior of e_typing git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@16092 85f007b7-540e-0410-9357-904b9bb8a0f7
-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.