From be76b6af359ea61bc71e59efb4802ff01cce728c Mon Sep 17 00:00:00 2001 From: herbelin Date: Sat, 27 Mar 2010 15:57:02 +0000 Subject: Fixing bug #2279 (printing nested let-in was in exponential time) git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@12887 85f007b7-540e-0410-9357-904b9bb8a0f7 --- pretyping/detyping.ml | 3 ++- test-suite/complexity/lettuple.v | 29 +++++++++++++++++++++++++++++ test-suite/complexity/ring2.v | 2 +- 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 test-suite/complexity/lettuple.v diff --git a/pretyping/detyping.ml b/pretyping/detyping.ml index 905bb49e0b..6560f7b48d 100644 --- a/pretyping/detyping.ml +++ b/pretyping/detyping.ml @@ -327,7 +327,6 @@ let detype_case computable detype detype_eqns testdep avoid data p c bl = n, aliastyp, Some typ in let constructs = Array.init (Array.length bl) (fun i -> (indsp,i+1)) in - let eqnl = detype_eqns constructs consnargsl bl in let tag = try if !Flags.raw_print then @@ -355,8 +354,10 @@ let detype_case computable detype detype_eqns testdep avoid data p c bl = RIf (dl,tomatch,(alias,pred), Option.get nondepbrs.(0),Option.get nondepbrs.(1)) else + let eqnl = detype_eqns constructs consnargsl bl in RCases (dl,tag,pred,[tomatch,(alias,aliastyp)],eqnl) | _ -> + let eqnl = detype_eqns constructs consnargsl bl in RCases (dl,tag,pred,[tomatch,(alias,aliastyp)],eqnl) let detype_sort = function diff --git a/test-suite/complexity/lettuple.v b/test-suite/complexity/lettuple.v new file mode 100644 index 0000000000..f97decf0ae --- /dev/null +++ b/test-suite/complexity/lettuple.v @@ -0,0 +1,29 @@ +(* This example checks if printing nested let-in's stays in linear time *) +(* Expected time < 1.00s *) + +Definition f (x : nat * nat) := + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + let (a,b) := x in + 0. + +Timeout 5 Print f. diff --git a/test-suite/complexity/ring2.v b/test-suite/complexity/ring2.v index af678a2e1f..ab57afdbba 100644 --- a/test-suite/complexity/ring2.v +++ b/test-suite/complexity/ring2.v @@ -1,4 +1,4 @@ -(* This example, checks the efficiency of the abstract machine used by ring *) +(* This example checks the efficiency of the abstract machine used by ring *) (* Expected time < 1.00s *) Require Import BinInt Zbool. -- cgit v1.2.3