diff --git a/compiler/GHC/HsToCore/PmCheck/Oracle.hs b/compiler/GHC/HsToCore/PmCheck/Oracle.hs
index 1b5c5b24c8fbdd7d97bed1f9c7adc4ec664adbdf..63a05467c21103f71077f4929f223480335d5370 100644
--- a/compiler/GHC/HsToCore/PmCheck/Oracle.hs
+++ b/compiler/GHC/HsToCore/PmCheck/Oracle.hs
@@ -508,7 +508,7 @@ nameTyCt (TyCt pred_ty) = do
   unique <- getUniqueM
   let occname = mkVarOccFS (fsLit ("pm_"++show unique))
       idname  = mkInternalName unique occname noSrcSpan
-  return (mkLocalId idname pred_ty)
+  return (mkLocalIdOrCoVar idname pred_ty)
 
 -- | Add some extra type constraints to the 'TyState'; return 'Nothing' if we
 -- find a contradiction (e.g. @Int ~ Bool@).
diff --git a/compiler/basicTypes/Id.hs b/compiler/basicTypes/Id.hs
index 2af33050f39ce1b247d684541bf8c9868e85a172..067b8d0d359819d4a407b8960efbf061090b9efa 100644
--- a/compiler/basicTypes/Id.hs
+++ b/compiler/basicTypes/Id.hs
@@ -266,9 +266,10 @@ mkVanillaGlobalWithInfo = mkGlobalId VanillaId
 
 
 -- | For an explanation of global vs. local 'Id's, see "Var#globalvslocal"
-mkLocalId :: Name -> Type -> Id
-mkLocalId name ty = ASSERT( not (isCoVarType ty) )
+mkLocalId :: HasCallStack => Name -> Type -> Id
+mkLocalId name ty = if( not (isCoVarType ty) ) then
                     mkLocalIdWithInfo name ty vanillaIdInfo
+                    else pprPanic "mkLocalId" (ppr name <+> ppr ty)
 
 -- | Same as 'mkLocalId' but without the assertion; used when the
 -- type is a panic, search for invented_id