diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index ecc5bcff12dba..105bf611282f7 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -2245,6 +2245,15 @@ impl Context {
try_err!(layout::redirect(&mut redirect_out, file_name), &redir_dst);
}
}
+ // If the item is a macro, redirect from the old macro URL (with !)
+ // to the new one (without).
+ if item_type == ItemType::Macro {
+ let redir_name = format!("{}.{}!.html", item_type, name);
+ let redir_dst = self.dst.join(redir_name);
+ let redirect_out = try_err!(File::create(&redir_dst), &redir_dst);
+ let mut redirect_out = BufWriter::new(redirect_out);
+ try_err!(layout::redirect(&mut redirect_out, file_name), &redir_dst);
+ }
}
}
Ok(())
diff --git a/src/test/rustdoc/without-redirect.rs b/src/test/rustdoc/without-redirect.rs
index d473dd8f428d2..a076f8a3c5ec7 100644
--- a/src/test/rustdoc/without-redirect.rs
+++ b/src/test/rustdoc/without-redirect.rs
@@ -1,7 +1,7 @@
#![crate_name = "foo"]
// @has foo/macro.bar.html
-// @!has foo/macro.bar!.html
+// @has foo/macro.bar!.html
// @!has foo/bar.m.html
#[macro_export]
macro_rules! bar {