aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml14
-rw-r--r--Makefile.dune12
-rw-r--r--doc/sphinx/proof-engine/tactics.rst4
-rw-r--r--dune4
-rw-r--r--dune-project2
-rw-r--r--dune-workspace6
-rw-r--r--ide/ideutils.ml17
-rw-r--r--lib/system.ml7
-rw-r--r--plugins/ltac/extraargs.ml420
-rw-r--r--proofs/pfedit.ml4
-rw-r--r--test-suite/bugs/closed/7795.v65
11 files changed, 126 insertions, 29 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 7f770feded..693a0b6bf0 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -89,6 +89,7 @@ after_script:
- set +e
.dune-template: &dune-template
+ dependencies: []
stage: build
artifacts:
name: "$CI_JOB_NAME"
@@ -97,9 +98,7 @@ after_script:
expire_in: 1 week
script:
- set -e
- - echo 'start:coq.dune'
- - make -f Makefile.dune world
- - echo 'end:coq.dune'
+ - make -f Makefile.dune "$DUNE_TARGET"
- set +e
# every non build job must set dependencies otherwise all build
@@ -217,10 +216,11 @@ build:edge+flambda:
COQ_EXTRA_CONF: "-native-compiler yes -coqide opt -flambda-opts "
COQ_EXTRA_CONF_QUOTE: "-O3 -unbox-closures"
-build:egde:dune:
+build:egde:dune:dev:
<<: *dune-template
variables:
OPAM_SWITCH: edge
+ DUNE_TARGET: world
windows64:
<<: *windows-template
@@ -234,6 +234,12 @@ windows32:
except:
- /^pr-.*$/
+pkg:dune-release:
+ <<: *dune-template
+ stage: test
+ variables:
+ OPAM_SWITCH: edge
+ DUNE_TARGET: release
pkg:nix:
image: nixorg/nix:latest # Minimal NixOS image which doesn't even contain git
diff --git a/Makefile.dune b/Makefile.dune
index 6056151c0d..f90f555557 100644
--- a/Makefile.dune
+++ b/Makefile.dune
@@ -10,10 +10,11 @@ BUILD_CONTEXT=_build/default
help:
@echo "Welcome to Coq's Dune-based build system. Targets are:"
- @echo " - states: build a minimal functional coqtop"
- @echo " - world: build all binaries and libraries"
- @echo " - clean: remove build directory and autogenerated files"
- @echo " - help: show this message"
+ @echo " - states: build a minimal functional coqtop"
+ @echo " - world: build all binaries and libraries"
+ @echo " - release: build Coq in release mode"
+ @echo " - clean: remove build directory and autogenerated files"
+ @echo " - help: show this message"
voboot:
dune build $(DUNEOPT) @vodeps
@@ -25,6 +26,9 @@ states: voboot
world: voboot
dune build $(DUNEOPT) @install
+release: voboot
+ dune build $(DUNEOPT) -p coq
+
clean:
dune clean
diff --git a/doc/sphinx/proof-engine/tactics.rst b/doc/sphinx/proof-engine/tactics.rst
index 241cdf5eea..62a482096c 100644
--- a/doc/sphinx/proof-engine/tactics.rst
+++ b/doc/sphinx/proof-engine/tactics.rst
@@ -1345,8 +1345,8 @@ name of the variable (here :g:`n`) is chosen based on :g:`T`.
changes in the goal, its use is strongly discouraged.
.. tacv:: instantiate ( @num := @term ) in @ident
-.. tacv:: instantiate ( @num := @term ) in ( Value of @ident )
-.. tacv:: instantiate ( @num := @term ) in ( Type of @ident )
+.. tacv:: instantiate ( @num := @term ) in ( value of @ident )
+.. tacv:: instantiate ( @num := @term ) in ( type of @ident )
These allow to refer respectively to existential variables occurring in a
hypothesis or in the body or the type of a local definition.
diff --git a/dune b/dune
index 2a77d62a16..b758fc7b56 100644
--- a/dune
+++ b/dune
@@ -9,7 +9,3 @@
(name vodeps)
(deps tools/coq_dune.exe .vfiles.d))
; (action (run coq_dune .vfiles.d))))
-
-; Add custom flags here. Default developer profile is `dev`
-(env
- (dev (flags :standard -rectypes -w -9-27-50)))
diff --git a/dune-project b/dune-project
index b98bfa1013..6ce4ec4717 100644
--- a/dune-project
+++ b/dune-project
@@ -1,3 +1,3 @@
-(lang dune 1.0)
+(lang dune 1.1)
(name coq-devel)
diff --git a/dune-workspace b/dune-workspace
new file mode 100644
index 0000000000..682631e7dc
--- /dev/null
+++ b/dune-workspace
@@ -0,0 +1,6 @@
+(lang dune 1.1)
+
+; Add custom flags here. Default developer profile is `dev`
+(env
+ (dev (flags :standard -rectypes -w -9-27-50))
+ (release (flags :standard -rectypes)))
diff --git a/ide/ideutils.ml b/ide/ideutils.ml
index 960beb8455..7044263b94 100644
--- a/ide/ideutils.ml
+++ b/ide/ideutils.ml
@@ -71,15 +71,15 @@ let insert_xml ?(mark = `INSERT) ?(tags = []) (buf : #GText.buffer_skel) msg =
let rmark = `MARK (buf#create_mark buf#start_iter) in
(* insert the string, but don't apply diff highlights to white space at the begin/end of line *)
let rec insert_str tags s =
+ let etags = try List.hd !dtags :: tags with hd -> tags in
try
- let _ = Str.search_forward nl_white_regex s 0 in
+ let start = Str.search_forward nl_white_regex s 0 in
+ insert_with_tags buf mark rmark etags (String.sub s 0 start);
insert_with_tags buf mark rmark tags (Str.matched_group 1 s);
let mend = Str.match_end () in
insert_str tags (String.sub s mend (String.length s - mend))
- with Not_found -> begin
- let etags = try List.hd !dtags :: tags with hd -> tags in
+ with Not_found ->
insert_with_tags buf mark rmark etags s
- end
in
let rec insert tags = function
| PCData s -> insert_str tags s
@@ -328,15 +328,18 @@ let coqtop_path () =
| None ->
try
let new_prog = System.get_toplevel_path "coqidetop" in
- if Sys.file_exists new_prog then new_prog
+ (* The file exists or it is to be found by path *)
+ if Sys.file_exists new_prog ||
+ CString.equal Filename.(basename new_prog) new_prog
+ then new_prog
else
let in_macos_bundle =
Filename.concat
(Filename.dirname new_prog)
(Filename.concat "../Resources/bin" (Filename.basename new_prog))
in if Sys.file_exists in_macos_bundle then in_macos_bundle
- else "coqidetop"
- with Not_found -> "coqidetop"
+ else "coqidetop.opt"
+ with Not_found -> "coqidetop.opt"
in file
(* In win32, when a command-line is to be executed via cmd.exe
diff --git a/lib/system.ml b/lib/system.ml
index eef65a4e3d..902a4f2506 100644
--- a/lib/system.ml
+++ b/lib/system.ml
@@ -301,8 +301,11 @@ let with_time ~batch f x =
Feedback.msg_info (str msg ++ fmt_time_difference tstart tend ++ str msg2);
raise e
+(* We use argv.[0] as we don't want to resolve symlinks *)
let get_toplevel_path top =
- let dir = Filename.dirname Sys.executable_name in
+ let open Filename in
+ let dir = if String.equal (basename Sys.argv.(0)) Sys.argv.(0)
+ then "" else dirname Sys.argv.(0) ^ dir_sep in
let exe = if Sys.(os_type = "Win32" || os_type = "Cygwin") then ".exe" else "" in
let eff = if Dynlink.is_native then ".opt" else ".byte" in
- dir ^ Filename.dir_sep ^ top ^ eff ^ exe
+ dir ^ top ^ eff ^ exe
diff --git a/plugins/ltac/extraargs.ml4 b/plugins/ltac/extraargs.ml4
index d779951180..38600695dc 100644
--- a/plugins/ltac/extraargs.ml4
+++ b/plugins/ltac/extraargs.ml4
@@ -199,9 +199,9 @@ let pr_gen_place pr_id = function
ConclLocation () -> Pp.mt ()
| HypLocation (id,InHyp) -> str "in " ++ pr_id id
| HypLocation (id,InHypTypeOnly) ->
- str "in (Type of " ++ pr_id id ++ str ")"
+ str "in (type of " ++ pr_id id ++ str ")"
| HypLocation (id,InHypValueOnly) ->
- str "in (Value of " ++ pr_id id ++ str ")"
+ str "in (value of " ++ pr_id id ++ str ")"
let pr_loc_place _ _ _ = pr_gen_place (fun { CAst.v = id } -> Id.print id)
let pr_place _ _ _ = pr_gen_place Id.print
@@ -220,6 +220,14 @@ let interp_place ist gl p =
let subst_place subst pl = pl
+let warn_deprecated_instantiate_syntax =
+ CWarnings.create ~name:"deprecated-instantiate-syntax" ~category:"deprecated"
+ (fun (v,v',id) ->
+ let s = Id.to_string id in
+ Pp.strbrk
+ ("Syntax \"in (" ^ v ^ " of " ^ s ^ ")\" is deprecated; use \"in (" ^ v' ^ " of " ^ s ^ ")\".")
+ )
+
ARGUMENT EXTEND hloc
PRINTED BY pr_place
INTERPRETED BY interp_place
@@ -234,8 +242,14 @@ ARGUMENT EXTEND hloc
| [ "in" ident(id) ] ->
[ HypLocation ((CAst.make id),InHyp) ]
| [ "in" "(" "Type" "of" ident(id) ")" ] ->
- [ HypLocation ((CAst.make id),InHypTypeOnly) ]
+ [ warn_deprecated_instantiate_syntax ("Type","type",id);
+ HypLocation ((CAst.make id),InHypTypeOnly) ]
| [ "in" "(" "Value" "of" ident(id) ")" ] ->
+ [ warn_deprecated_instantiate_syntax ("Value","value",id);
+ HypLocation ((CAst.make id),InHypValueOnly) ]
+| [ "in" "(" "type" "of" ident(id) ")" ] ->
+ [ HypLocation ((CAst.make id),InHypTypeOnly) ]
+| [ "in" "(" "value" "of" ident(id) ")" ] ->
[ HypLocation ((CAst.make id),InHypValueOnly) ]
END
diff --git a/proofs/pfedit.ml b/proofs/pfedit.ml
index 678c3ea3f7..d971c28a26 100644
--- a/proofs/pfedit.ml
+++ b/proofs/pfedit.ml
@@ -173,8 +173,8 @@ let build_by_tactic ?(side_eff=true) env sigma ?(poly=false) typ tac =
const_entry_body = Future.chain ce.const_entry_body
(fun (pt, _) -> pt, ()) } in
let (cb, ctx), () = Future.force ce.const_entry_body in
- let univs' = Evd.merge_context_set Evd.univ_rigid (Evd.from_ctx univs) ctx in
- cb, status, Evd.evar_universe_context univs'
+ let univs = UState.merge ~sideff:side_eff ~extend:true Evd.univ_rigid univs ctx in
+ cb, status, univs
let refine_by_tactic env sigma ty tac =
(** Save the initial side-effects to restore them afterwards. We set the
diff --git a/test-suite/bugs/closed/7795.v b/test-suite/bugs/closed/7795.v
new file mode 100644
index 0000000000..5db0f81cc5
--- /dev/null
+++ b/test-suite/bugs/closed/7795.v
@@ -0,0 +1,65 @@
+
+
+Definition fwd (b: bool) A (e2: A): A. Admitted.
+
+Ltac destruct_refinement_aux T :=
+ let m := fresh "mres" in
+ let r := fresh "r" in
+ let P := fresh "P" in
+ pose T as m;
+ destruct m as [ r P ].
+
+Ltac destruct_refinement :=
+ match goal with
+ | |- context[proj1_sig ?T] => destruct_refinement_aux T
+ end.
+
+Ltac t_base := discriminate || destruct_refinement.
+
+
+Inductive List (T: Type) :=
+| Cons_construct: T -> List T -> List T
+| Nil_construct: List T.
+
+Definition t (T: Type): List T. Admitted.
+Definition size (T: Type) (src: List T): nat. Admitted.
+Definition filter1_rt1_type (T: Type): Type := { res: List T | false = true }.
+Definition filter1 (T: Type): filter1_rt1_type T. Admitted.
+
+Definition hh_1:
+ forall T : Type,
+ (forall (T0 : Type),
+ False -> filter1_rt1_type T0) ->
+ False.
+Admitted.
+
+Definition hh_2:
+ forall (T : Type),
+ filter1_rt1_type T ->
+ filter1_rt1_type T.
+Admitted.
+
+Definition hh:
+ forall (T : Type) (f1 : forall (T0 : Type), False -> filter1_rt1_type T0),
+ fwd
+ (Nat.leb
+ (size T
+ (fwd false (List T)
+ (fwd false (List T)
+ (proj1_sig
+ (hh_2 T
+ (f1 T (hh_1 T f1))))))) 0) bool
+ false = true.
+Admitted.
+
+Set Program Mode. (* removing this line prevents the bug *)
+Obligation Tactic := repeat t_base.
+
+Goal
+ forall T (h17: T),
+ filter1 T =
+ exist
+ _
+ (Nil_construct T)
+ (hh T (fun (T : Type) (_ : False) => filter1 T)).
+Abort.