From fdb32e997bef725f538f66dcfd96b1c1e51d2c56 Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Fri, 19 Feb 2021 10:18:10 -0500 Subject: [PATCH] [intra-doc links] Don't check feature gates of items re-exported across crates It should be never break another crate to re-export a public item. Note that this doesn't check the feature gate at *all* for other crates: - Feature-gates aren't currently serialized, so the only way to check the gate is with ad-hoc attribute checking. - Checking the feature gate twice (once when documenting the original crate and one when documenting the current crate) seems not great. This should still catch using the feature most of the time though, since people tend to document their own crates. --- src/librustdoc/passes/collect_intra_doc_links.rs | 3 +++ .../intra-doc/auxiliary/pointer-reexports-allowed.rs | 4 ++++ src/test/rustdoc-ui/intra-doc/pointer-reexports-allowed.rs | 4 ++++ 3 files changed, 11 insertions(+) create mode 100644 src/test/rustdoc-ui/intra-doc/auxiliary/pointer-reexports-allowed.rs create mode 100644 src/test/rustdoc-ui/intra-doc/pointer-reexports-allowed.rs diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index a54b4adc13295..a5837f301e4bf 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -1207,7 +1207,10 @@ impl LinkCollector<'_, '_> { // for discussion on the matter. verify(kind, id)?; + // FIXME: it would be nice to check that the feature gate was enabled in the original crate, not just ignore it altogether. + // However I'm not sure how to check that across crates. if prim == PrimitiveType::RawPointer + && item.def_id.is_local() && !self.cx.tcx.features().intra_doc_pointers { let span = super::source_span_for_markdown_range( diff --git a/src/test/rustdoc-ui/intra-doc/auxiliary/pointer-reexports-allowed.rs b/src/test/rustdoc-ui/intra-doc/auxiliary/pointer-reexports-allowed.rs new file mode 100644 index 0000000000000..0a3dc57f10241 --- /dev/null +++ b/src/test/rustdoc-ui/intra-doc/auxiliary/pointer-reexports-allowed.rs @@ -0,0 +1,4 @@ +#![feature(intra_doc_pointers)] +#![crate_name = "inner"] +/// Link to [some pointer](*const::to_raw_parts) +pub fn foo() {} diff --git a/src/test/rustdoc-ui/intra-doc/pointer-reexports-allowed.rs b/src/test/rustdoc-ui/intra-doc/pointer-reexports-allowed.rs new file mode 100644 index 0000000000000..8654a8e1bd2b4 --- /dev/null +++ b/src/test/rustdoc-ui/intra-doc/pointer-reexports-allowed.rs @@ -0,0 +1,4 @@ +// aux-build:pointer-reexports-allowed.rs +// check-pass +extern crate inner; +pub use inner::foo;