diff --git a/src/cargo/util/semver_ext.rs b/src/cargo/util/semver_ext.rs
index 5ad61f5787f..7863ba15d1f 100644
--- a/src/cargo/util/semver_ext.rs
+++ b/src/cargo/util/semver_ext.rs
@@ -76,12 +76,6 @@ impl OptVersionReq {
     }
 
     pub fn update_precise(&mut self, version: &Version) {
-        assert!(
-            self.matches(version),
-            "cannot update_precise {} to {}",
-            self,
-            version
-        );
         use OptVersionReq::*;
         let version = version.clone();
         *self = match self {
diff --git a/tests/testsuite/update.rs b/tests/testsuite/update.rs
index 8a58e4c801c..e636435b00e 100644
--- a/tests/testsuite/update.rs
+++ b/tests/testsuite/update.rs
@@ -391,6 +391,60 @@ fn update_precise() {
         .run();
 }
 
+#[cargo_test]
+fn update_precise_mismatched() {
+    Package::new("serde", "1.2.0").publish();
+    Package::new("serde", "1.2.1").publish();
+    Package::new("serde", "1.6.0").publish();
+
+    let p = project()
+        .file(
+            "Cargo.toml",
+            r#"
+                [package]
+                name = "bar"
+                version = "0.0.1"
+                authors = []
+
+                [dependencies]
+                serde = "~1.2"
+            "#,
+        )
+        .file("src/lib.rs", "")
+        .build();
+
+    p.cargo("check").run();
+
+    // `1.6.0` does not match `"~1.2"`
+    p.cargo("update serde:1.2 --precise 1.6.0")
+        .with_stderr(
+            "\
+[UPDATING] `[..]` index
+[ERROR] failed to select a version for the requirement `serde = \"~1.2\"`
+candidate versions found which didn't match: 1.6.0
+location searched: `[..]` index (which is replacing registry `crates-io`)
+required by package `bar v0.0.1 ([..]/foo)`
+perhaps a crate was updated and forgotten to be re-vendored?
+",
+        )
+        .with_status(101)
+        .run();
+
+    // `1.9.0` does not exist
+    p.cargo("update serde:1.2 --precise 1.9.0")
+        // This terrible error message has been the same for a long time. A fix is more than welcome!
+        .with_stderr(
+            "\
+[UPDATING] `[..]` index
+[ERROR] no matching package named `serde` found
+location searched: registry `crates-io`
+required by package `bar v0.0.1 ([..]/foo)`
+",
+        )
+        .with_status(101)
+        .run();
+}
+
 #[cargo_test]
 fn update_precise_build_metadata() {
     Package::new("serde", "0.0.1+first").publish();