aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Herbelin2017-06-27 11:31:02 +0200
committerHugo Herbelin2017-06-28 12:31:11 +0200
commitd01e3b07470ab326f5754332ac812f21794721bc (patch)
tree0a6c2db31cd1987f6ef18633974c6c20148b00dd
parentebfed8fc20c6cad1eddd5057d191905b42630b4e (diff)
A fix for #5598 (no discharge of Existing Classes referring to local variables).
-rw-r--r--pretyping/typeclasses.ml3
-rw-r--r--test-suite/bugs/closed/5598.v8
2 files changed, 11 insertions, 0 deletions
diff --git a/pretyping/typeclasses.ml b/pretyping/typeclasses.ml
index 24a3811797..0ad940acac 100644
--- a/pretyping/typeclasses.ml
+++ b/pretyping/typeclasses.ml
@@ -98,6 +98,8 @@ let new_instance cl info glob poly impl =
if glob then Some (Lib.sections_depth ())
else None
in
+ if match global with Some n -> n>0 && isVarRef impl | _ -> false then
+ CErrors.user_err (Pp.str "Cannot set Global an instance referring to a section variable.");
{ is_class = cl.cl_impl;
is_info = info ;
is_global = global ;
@@ -358,6 +360,7 @@ let discharge_instance (_, (action, inst)) =
match inst.is_global with
| None -> None
| Some n ->
+ assert (not (isVarRef inst.is_impl));
Some (action,
{ inst with
is_global = Some (pred n);
diff --git a/test-suite/bugs/closed/5598.v b/test-suite/bugs/closed/5598.v
new file mode 100644
index 0000000000..55fef1a575
--- /dev/null
+++ b/test-suite/bugs/closed/5598.v
@@ -0,0 +1,8 @@
+(* Checking when discharge of an existing class is possible *)
+Section foo.
+ Context {T} (a : T) (b : T).
+ Let k := eq_refl a.
+ Existing Class eq.
+ Fail Global Existing Instance k.
+ Existing Instance k.
+End foo.