diff options
| author | herbelin | 2012-12-18 07:00:50 +0000 |
|---|---|---|
| committer | herbelin | 2012-12-18 07:00:50 +0000 |
| commit | 7f4b6b875daaf1d31ff74a58d8916c2a4889cf3a (patch) | |
| tree | 4c932205d7eb8ad6306ac1d708ee64874856f8d1 | |
| parent | 693b8a7a4dc4535d2aa2912deec2cb21deb39c75 (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.ml | 9 | ||||
| -rw-r--r-- | test-suite/success/Cases.v | 6 |
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. |
