diff --git a/tests/tactics.v b/tests/tactics.v
index 34f00ed7bf0dbe51e3eacbe42c9a6daeb85b5fdc..b91a47339b2dab2a042a985aae239ad53ed6629e 100644
--- a/tests/tactics.v
+++ b/tests/tactics.v
@@ -60,6 +60,20 @@ Lemma naive_solver_issue_115 (P : nat → Prop) (x : nat) :
   (∀ x', P x' → x' = 10) → P x → x + 1 = 11.
 Proof. naive_solver. Qed.
 
+(** [mk_evar] works on things that coerce to types. *)
+(** This is a feature when we have packed structures, for example Iris's [ofe]
+(fields other than the carrier omitted). *)
+Structure ofe := Ofe { ofe_car :> Type }.
+Goal ∀ A : ofe, True.
+intros A.
+let x := mk_evar A in idtac.
+Abort.
+(** More surprisingly, it also works for other coercions into a
+universe, like [Is_true : bool → Prop]. *)
+Goal True.
+let x := mk_evar true in idtac.
+Abort.
+
 (** Make sure that [done] is not called recursively when solving [is_Some],
 which might leave an unresolved evar before performing ex falso. *)
 Goal False → is_Some (@None nat).
diff --git a/theories/tactics.v b/theories/tactics.v
index 6ed5877f2f3d257943cd021c8f2e9fa7b3b42d4b..6ec949e0612abbc35a2c2ca994a7c028c850617f 100644
--- a/theories/tactics.v
+++ b/theories/tactics.v
@@ -231,6 +231,7 @@ trick described at
 <https://stackoverflow.com/questions/45949064/check-for-evars-in-a-tactic-that-returns-a-value/46178884#46178884>
 to work around that: wrap the side-effect in a [match goal]. *)
 Ltac mk_evar T :=
+  let T := constr:(T : Type) in
   let e := fresh in
   let _ := match goal with _ => evar (e:T) end in
   let e' := eval unfold e in e in