diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2021-06-03 18:56:31 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2021-06-07 17:14:35 -0700 |
| commit | aba85ff82077f80b6406cbaaf6a54afe6df98332 (patch) | |
| tree | cc30a389f47a407324046b2f102637bf9f25b9ae /compiler | |
| parent | e4a60327063e82413eed50a10df3b7d19b77bda0 (diff) | |
| download | rust-aba85ff82077f80b6406cbaaf6a54afe6df98332.tar.gz rust-aba85ff82077f80b6406cbaaf6a54afe6df98332.zip | |
Enable rustdoc to document safe wasm intrinsics
This commit fixes an issue not found during #84988 where rustdoc is used to document cross-platform intrinsics but it was requiring that functions which use `#[target_feature]` are `unsafe` erroneously, even if they're WebAssembly specific. Rustdoc today, for example, already has a special case where it enables annotations like `#[target_feature(enable = "simd128")]` on platforms other than WebAssembly. The purpose of this commit is to relax the "require all `#[target_feature]` functions are `unsafe`" requirement for all targets whenever rustdoc is running, enabling all targets to fully document other targets, such as WebAssembly, where intrinsics functions aren't always `unsafe`.
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_typeck/src/collect.rs | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/compiler/rustc_typeck/src/collect.rs b/compiler/rustc_typeck/src/collect.rs index f5ee4b21ea6..ee3ac3b62d9 100644 --- a/compiler/rustc_typeck/src/collect.rs +++ b/compiler/rustc_typeck/src/collect.rs @@ -2771,7 +2771,7 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, id: DefId) -> CodegenFnAttrs { } } else if tcx.sess.check_name(attr, sym::target_feature) { if !tcx.is_closure(id) && tcx.fn_sig(id).unsafety() == hir::Unsafety::Normal { - if tcx.sess.target.is_like_wasm { + if tcx.sess.target.is_like_wasm || tcx.sess.opts.actually_rustdoc { // The `#[target_feature]` attribute is allowed on // WebAssembly targets on all functions, including safe // ones. Other targets require that `#[target_feature]` is @@ -2785,6 +2785,10 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, id: DefId) -> CodegenFnAttrs { // deterministic trap. There is no undefined behavior when // executing WebAssembly so `#[target_feature]` is allowed // on safe functions (but again, only for WebAssembly) + // + // Note that this is also allowed if `actually_rustdoc` so + // if a target is documenting some wasm-specific code then + // it's not spuriously denied. } else if !tcx.features().target_feature_11 { let mut err = feature_err( &tcx.sess.parse_sess, |
