diff --git a/Cargo.lock b/Cargo.lock
index 042eefb7aa3..b909e5949ee 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1062,7 +1062,6 @@ dependencies = [
  "rustc-ap-rustc_parse",
  "rustc-ap-rustc_session",
  "rustc-ap-rustc_span",
- "rustc-ap-rustc_target",
  "rustc-ap-syntax",
  "rustfmt_configuration",
  "rustfmt_emitter",
diff --git a/rustfmt-core/rustfmt-lib/Cargo.toml b/rustfmt-core/rustfmt-lib/Cargo.toml
index 2e292424af9..7ce58421738 100644
--- a/rustfmt-core/rustfmt-lib/Cargo.toml
+++ b/rustfmt-core/rustfmt-lib/Cargo.toml
@@ -54,10 +54,6 @@ version = "642.0.0"
 package = "rustc-ap-rustc_span"
 version = "642.0.0"
 
-[dependencies.rustc_target]
-package = "rustc-ap-rustc_target"
-version = "642.0.0"
-
 [dependencies.syntax]
 package = "rustc-ap-syntax"
 version = "642.0.0"
diff --git a/rustfmt-core/rustfmt-lib/src/utils.rs b/rustfmt-core/rustfmt-lib/src/utils.rs
index e3e07b44ebe..63bbbbd4952 100644
--- a/rustfmt-core/rustfmt-lib/src/utils.rs
+++ b/rustfmt-core/rustfmt-lib/src/utils.rs
@@ -2,7 +2,6 @@ use std::borrow::Cow;
 
 use rustc_ast_pretty::pprust;
 use rustc_span::{sym, BytePos, ExpnId, Span, Symbol, SyntaxContext};
-use rustc_target::spec::abi;
 use syntax::ast::{
     self, Attribute, CrateSugar, MetaItem, MetaItemKind, NestedMetaItem, NodeId, Path, Visibility,
     VisibilityKind,
@@ -140,19 +139,17 @@ pub(crate) fn format_extern(
     is_mod: bool,
 ) -> Cow<'static, str> {
     let abi = match ext {
-        ast::Extern::None => abi::Abi::Rust,
-        ast::Extern::Implicit => abi::Abi::C,
-        ast::Extern::Explicit(abi) => {
-            abi::lookup(&abi.symbol_unescaped.as_str()).unwrap_or(abi::Abi::Rust)
-        }
+        ast::Extern::None => "Rust".to_owned(),
+        ast::Extern::Implicit => "C".to_owned(),
+        ast::Extern::Explicit(abi) => abi.symbol_unescaped.to_string(),
     };
 
-    if abi == abi::Abi::Rust && !is_mod {
+    if abi == "Rust" && !is_mod {
         Cow::from("")
-    } else if abi == abi::Abi::C && !explicit_abi {
+    } else if abi == "C" && !explicit_abi {
         Cow::from("extern ")
     } else {
-        Cow::from(format!("extern {} ", abi))
+        Cow::from(format!(r#"extern "{}" "#, abi))
     }
 }
 
diff --git a/rustfmt-core/rustfmt-lib/tests/source/issue_4086.rs b/rustfmt-core/rustfmt-lib/tests/source/issue_4086.rs
new file mode 100644
index 00000000000..ffa6442e930
--- /dev/null
+++ b/rustfmt-core/rustfmt-lib/tests/source/issue_4086.rs
@@ -0,0 +1,2 @@
+#[cfg(any())]
+extern  "C++"     {}
diff --git a/rustfmt-core/rustfmt-lib/tests/target/issue_4086.rs b/rustfmt-core/rustfmt-lib/tests/target/issue_4086.rs
new file mode 100644
index 00000000000..959d3b3d468
--- /dev/null
+++ b/rustfmt-core/rustfmt-lib/tests/target/issue_4086.rs
@@ -0,0 +1,2 @@
+#[cfg(any())]
+extern "C++" {}