aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorherbelin2011-11-17 22:19:25 +0000
committerherbelin2011-11-17 22:19:25 +0000
commite0dfeeba32d84d57157da699e9e622992e7ed258 (patch)
tree02205e32b796e273b16d31544aaa92ed9ffd2ca3
parent292f55ed41ed1de9ed45c75266b37b6c4dba4140 (diff)
Fixing new bug introduced in r14665 when fixing bug #1834.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@14674 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--pretyping/cases.ml1
-rw-r--r--test-suite/success/CasesDep.v13
2 files changed, 14 insertions, 0 deletions
diff --git a/pretyping/cases.ml b/pretyping/cases.ml
index 12a0ecac78..0454d4dcb9 100644
--- a/pretyping/cases.ml
+++ b/pretyping/cases.ml
@@ -898,6 +898,7 @@ let rec extract_predicate ccl = function
let pred = extract_predicate ccl tms in
if dep<>Anonymous then subst1 cur pred else pred
| Pushed ((cur,IsInd (_,IndType(_,realargs),_)),_,(dep,_))::tms ->
+ let realargs = List.rev realargs in
let k = if dep<>Anonymous then 1 else 0 in
let tms = lift_tomatch_stack (List.length realargs + k) tms in
let pred = extract_predicate ccl tms in
diff --git a/test-suite/success/CasesDep.v b/test-suite/success/CasesDep.v
index af6e2cd336..8fde93c1ba 100644
--- a/test-suite/success/CasesDep.v
+++ b/test-suite/success/CasesDep.v
@@ -513,3 +513,16 @@ Definition test (s:step E E) :=
Inductive K : nat -> Type := KC : forall (p q:nat), K p.
Definition get : K O -> nat := fun x => match x with KC p q => q end.
+
+(* Checking correct order of substitution of realargs *)
+(* (was broken from revision 14664 to 14669) *)
+(* Example extracted from contrib CoLoR *)
+
+Inductive EQ : nat -> nat -> Prop := R x y : EQ x y.
+
+Check fun e t (d1 d2:EQ e t) =>
+ match d1 in EQ e1 t1, d2 in EQ e2 t2 return
+ (e1,t1) = (e2,t2) -> (e1,t1) = (e,t) -> 0=0
+ with
+ | R _ _, R _ _ => fun _ _ => eq_refl
+ end.