From 660f585413943df8e5026310cc579047ca8d0cb5 Mon Sep 17 00:00:00 2001 From: Yoshua Wuyts Date: Thu, 4 Feb 2021 01:25:43 +0100 Subject: [PATCH 01/13] Add `core::stream::from_iter` --- library/core/src/stream/from_iter.rs | 38 ++++++++++++++++++++++++++++ library/core/src/stream/mod.rs | 2 ++ 2 files changed, 40 insertions(+) create mode 100644 library/core/src/stream/from_iter.rs diff --git a/library/core/src/stream/from_iter.rs b/library/core/src/stream/from_iter.rs new file mode 100644 index 0000000000000..eb9a0fd284257 --- /dev/null +++ b/library/core/src/stream/from_iter.rs @@ -0,0 +1,38 @@ +use crate::pin::Pin; + +use crate::stream::Stream; +use crate::task::{Context, Poll}; + +/// A stream that was created from iterator. +/// +/// This stream is created by the [`from_iter`] function. +/// See it documentation for more. +/// +/// [`from_iter`]: fn.from_iter.html +#[unstable(feature = "stream_from_iter", issue = "81798")] +#[derive(Clone, Debug)] +pub struct FromIter { + iter: I, +} + +#[unstable(feature = "stream_from_iter", issue = "81798")] +impl Unpin for FromIter {} + +/// Converts an iterator into a stream. +#[unstable(feature = "stream_from_iter", issue = "81798")] +pub fn from_iter(iter: I) -> FromIter { + FromIter { iter: iter.into_iter() } +} + +#[unstable(feature = "stream_from_iter", issue = "81798")] +impl Stream for FromIter { + type Item = I::Item; + + fn poll_next(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { + Poll::Ready(self.iter.next()) + } + + fn size_hint(&self) -> (usize, Option) { + self.iter.size_hint() + } +} diff --git a/library/core/src/stream/mod.rs b/library/core/src/stream/mod.rs index 0df18af65ebf0..58dc8e1e5e606 100644 --- a/library/core/src/stream/mod.rs +++ b/library/core/src/stream/mod.rs @@ -122,6 +122,8 @@ //! warning: unused result that must be used: streams do nothing unless polled //! ``` +mod from_iter; mod stream; +pub use from_iter::{from_iter, FromIter}; pub use stream::Stream; From 02b7754f9e7c01048581a283ced85183cc34a61f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Kr=C3=BCger?= Date: Tue, 3 Aug 2021 07:24:31 +0200 Subject: [PATCH 02/13] don't use .into() to convert types to identical types (clippy::useless_conversion) Example: let _x: String = String::from("hello world").into(); --- compiler/rustc_mir/src/interpret/operand.rs | 2 +- compiler/rustc_mir/src/interpret/terminator.rs | 2 +- .../src/transform/simplify_comparison_integral.rs | 2 +- src/librustdoc/clean/mod.rs | 9 ++++----- src/librustdoc/clean/types.rs | 2 +- src/librustdoc/formats/cache.rs | 2 +- src/librustdoc/html/format.rs | 4 ++-- src/librustdoc/html/render/cache.rs | 2 +- src/librustdoc/passes/collect_intra_doc_links.rs | 12 ++++++------ src/librustdoc/passes/collect_trait_impls.rs | 2 +- src/librustdoc/visit_ast.rs | 4 ++-- 11 files changed, 21 insertions(+), 22 deletions(-) diff --git a/compiler/rustc_mir/src/interpret/operand.rs b/compiler/rustc_mir/src/interpret/operand.rs index aba7db7816843..17aecfdc41da2 100644 --- a/compiler/rustc_mir/src/interpret/operand.rs +++ b/compiler/rustc_mir/src/interpret/operand.rs @@ -585,7 +585,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { let ptr = self.global_base_pointer(Pointer::new(id, offset))?; Operand::Indirect(MemPlace::from_ptr(ptr.into(), layout.align.abi)) } - ConstValue::Scalar(x) => Operand::Immediate(tag_scalar(x.into())?.into()), + ConstValue::Scalar(x) => Operand::Immediate(tag_scalar(x)?.into()), ConstValue::Slice { data, start, end } => { // We rely on mutability being set correctly in `data` to prevent writes // where none should happen. diff --git a/compiler/rustc_mir/src/interpret/terminator.rs b/compiler/rustc_mir/src/interpret/terminator.rs index f369480d959fe..35ae07e25cada 100644 --- a/compiler/rustc_mir/src/interpret/terminator.rs +++ b/compiler/rustc_mir/src/interpret/terminator.rs @@ -73,7 +73,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { ty::FnPtr(sig) => { let caller_abi = sig.abi(); let fn_ptr = self.read_pointer(&func)?; - let fn_val = self.memory.get_fn(fn_ptr.into())?; + let fn_val = self.memory.get_fn(fn_ptr)?; ( fn_val, caller_abi, diff --git a/compiler/rustc_mir/src/transform/simplify_comparison_integral.rs b/compiler/rustc_mir/src/transform/simplify_comparison_integral.rs index 1ddf7c9cd0c9e..948fcd9f4550f 100644 --- a/compiler/rustc_mir/src/transform/simplify_comparison_integral.rs +++ b/compiler/rustc_mir/src/transform/simplify_comparison_integral.rs @@ -211,7 +211,7 @@ fn find_branch_value_info<'tcx>( return None; }; let branch_value_scalar = branch_value.literal.try_to_scalar()?; - Some((branch_value_scalar.into(), branch_value_ty, *to_switch_on)) + Some((branch_value_scalar, branch_value_ty, *to_switch_on)) } _ => None, } diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 75ea30bb565f1..b3fc1e73f7885 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -675,11 +675,10 @@ impl<'a, 'tcx> Clean for (&'a ty::Generics, ty::GenericPredicates<'tcx if let Some(((_, trait_did, name), rhs)) = proj.as_ref().and_then(|(lhs, rhs)| Some((lhs.projection()?, rhs))) { - impl_trait_proj.entry(param_idx).or_default().push(( - trait_did.into(), - name, - rhs, - )); + impl_trait_proj + .entry(param_idx) + .or_default() + .push((trait_did, name, rhs)); } return None; diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index 2460fa127f116..5c73d3de5b93f 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -1614,7 +1614,7 @@ impl Type { impl Type { fn inner_def_id(&self, cache: Option<&Cache>) -> Option { let t: PrimitiveType = match *self { - ResolvedPath { did, .. } => return Some(did.into()), + ResolvedPath { did, .. } => return Some(did), DynTrait(ref bounds, _) => return bounds[0].trait_.inner_def_id(cache), Primitive(p) => return cache.and_then(|c| c.primitive_locations.get(&p).cloned()), BorrowedRef { type_: box Generic(..), .. } => PrimitiveType::Reference, diff --git a/src/librustdoc/formats/cache.rs b/src/librustdoc/formats/cache.rs index 5ea2cdc2ad909..3d267ca50334d 100644 --- a/src/librustdoc/formats/cache.rs +++ b/src/librustdoc/formats/cache.rs @@ -228,7 +228,7 @@ impl<'a, 'tcx> DocFolder for CacheBuilder<'a, 'tcx> { if i.blanket_impl.is_none() { self.cache .implementors - .entry(did.into()) + .entry(did) .or_default() .push(Impl { impl_item: item.clone() }); } diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs index 0291236abdfa6..8ab6aa775d2e4 100644 --- a/src/librustdoc/html/format.rs +++ b/src/librustdoc/html/format.rs @@ -688,7 +688,7 @@ crate fn anchor<'a, 'cx: 'a>( text: &'a str, cx: &'cx Context<'_>, ) -> impl fmt::Display + 'a { - let parts = href(did.into(), cx); + let parts = href(did, cx); display_fn(move |f| { if let Ok((url, short_ty, fqp)) = parts { write!( @@ -921,7 +921,7 @@ fn fmt_type<'cx>( // everything comes in as a fully resolved QPath (hard to // look at). box clean::ResolvedPath { did, .. } => { - match href(did.into(), cx) { + match href(did, cx) { Ok((ref url, _, ref path)) if !f.alternate() => { write!( f, diff --git a/src/librustdoc/html/render/cache.rs b/src/librustdoc/html/render/cache.rs index 0734d2670ccfa..1c083522beaa9 100644 --- a/src/librustdoc/html/render/cache.rs +++ b/src/librustdoc/html/render/cache.rs @@ -42,7 +42,7 @@ crate fn build_index<'tcx>(krate: &clean::Crate, cache: &mut Cache, tcx: TyCtxt< name: item.name.unwrap().to_string(), path: fqp[..fqp.len() - 1].join("::"), desc, - parent: Some(did.into()), + parent: Some(did), parent_idx: None, search_type: get_index_search_type(&item, tcx), aliases: item.attrs.get_doc_aliases(), diff --git a/src/librustdoc/passes/collect_intra_doc_links.rs b/src/librustdoc/passes/collect_intra_doc_links.rs index ddb7b85d34a04..b36be9541d2b3 100644 --- a/src/librustdoc/passes/collect_intra_doc_links.rs +++ b/src/librustdoc/passes/collect_intra_doc_links.rs @@ -293,7 +293,7 @@ impl<'a, 'tcx> LinkCollector<'a, 'tcx> { ) -> Result<(Res, Option), ErrorKind<'path>> { let tcx = self.cx.tcx; let no_res = || ResolutionFailure::NotResolved { - module_id: module_id.into(), + module_id: module_id, partial_res: None, unresolved: path_str.into(), }; @@ -521,7 +521,7 @@ impl<'a, 'tcx> LinkCollector<'a, 'tcx> { // but the disambiguator logic expects the associated item. // Store the kind in a side channel so that only the disambiguator logic looks at it. if let Some((kind, id)) = side_channel { - self.kind_side_channel.set(Some((kind, id.into()))); + self.kind_side_channel.set(Some((kind, id))); } Ok((res, Some(fragment))) }; @@ -1268,7 +1268,7 @@ impl LinkCollector<'_, '_> { // doesn't allow statements like `use str::trim;`, making this a (hopefully) // valid omission. See https://github.com/rust-lang/rust/pull/80660#discussion_r551585677 // for discussion on the matter. - verify(kind, id.into())?; + 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. @@ -1306,9 +1306,9 @@ impl LinkCollector<'_, '_> { Some(ItemLink { link: ori_link.link, link_text, did: None, fragment }) } Res::Def(kind, id) => { - verify(kind, id.into())?; + verify(kind, id)?; let id = clean::register_res(self.cx, rustc_hir::def::Res::Def(kind, id)); - Some(ItemLink { link: ori_link.link, link_text, did: Some(id.into()), fragment }) + Some(ItemLink { link: ori_link.link, link_text, did: Some(id), fragment }) } } } @@ -1886,7 +1886,7 @@ fn resolution_failure( name = start; for ns in [TypeNS, ValueNS, MacroNS] { if let Some(res) = - collector.check_full_res(ns, &start, module_id.into(), &None) + collector.check_full_res(ns, &start, module_id, &None) { debug!("found partial_res={:?}", res); *partial_res = Some(res); diff --git a/src/librustdoc/passes/collect_trait_impls.rs b/src/librustdoc/passes/collect_trait_impls.rs index 91c495a2bbc06..eefe50caa345e 100644 --- a/src/librustdoc/passes/collect_trait_impls.rs +++ b/src/librustdoc/passes/collect_trait_impls.rs @@ -45,7 +45,7 @@ crate fn collect_trait_impls(krate: Crate, cx: &mut DocContext<'_>) -> Crate { // FIXME(eddyb) is this `doc(hidden)` check needed? if !cx.tcx.get_attrs(def_id).lists(sym::doc).has_word(sym::hidden) { - let impls = get_auto_trait_and_blanket_impls(cx, def_id.into()); + let impls = get_auto_trait_and_blanket_impls(cx, def_id); new_items.extend(impls.filter(|i| cx.inlined.insert(i.def_id))); } }); diff --git a/src/librustdoc/visit_ast.rs b/src/librustdoc/visit_ast.rs index d74b3b4627284..e28910355357b 100644 --- a/src/librustdoc/visit_ast.rs +++ b/src/librustdoc/visit_ast.rs @@ -192,7 +192,7 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { } else { // All items need to be handled here in case someone wishes to link // to them with intra-doc links - self.cx.cache.access_levels.map.insert(did.into(), AccessLevel::Public); + self.cx.cache.access_levels.map.insert(did, AccessLevel::Public); } } } @@ -204,7 +204,7 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { None => return false, }; - let is_private = !self.cx.cache.access_levels.is_public(res_did.into()); + let is_private = !self.cx.cache.access_levels.is_public(res_did); let is_hidden = inherits_doc_hidden(self.cx.tcx, res_hir_id); // Only inline if requested or if the item would otherwise be stripped. From 499758a285e57a9a2dd3d02a887d03772ebfc85e Mon Sep 17 00:00:00 2001 From: frogtd <31412003+frogtd@users.noreply.github.com> Date: Tue, 3 Aug 2021 04:30:44 -0400 Subject: [PATCH 03/13] Use .contains instead of manual reimplementation. It's also significantly easier to read. --- library/core/src/num/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/core/src/num/mod.rs b/library/core/src/num/mod.rs index 6c43d6d62128e..9788404dd05bf 100644 --- a/library/core/src/num/mod.rs +++ b/library/core/src/num/mod.rs @@ -847,7 +847,7 @@ fn from_str_radix(src: &str, radix: u32) -> Result= 2 && radix <= 36, + (2..=36).contains(&radix), "from_str_radix_int: must lie in the range `[2, 36]` - found {}", radix ); From f9b168fdd8ad0fa846a124750de5953fa7390ea1 Mon Sep 17 00:00:00 2001 From: Adam Gemmell Date: Fri, 30 Jul 2021 11:31:46 +0000 Subject: [PATCH 04/13] Update `stdarch` to deprecate `crypto` aarch64 target_feature --- library/stdarch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/stdarch b/library/stdarch index 3001c75a1d2a8..c158cfd38e20d 160000 --- a/library/stdarch +++ b/library/stdarch @@ -1 +1 @@ -Subproject commit 3001c75a1d2a81d2a76bef139c69387cb2ebb820 +Subproject commit c158cfd38e20d855f5d6ca8a5a101eefb82604a8 From 3be9261048854ce5b558b5edc45c2756f0a1a0dd Mon Sep 17 00:00:00 2001 From: Adam Gemmell Date: Tue, 1 Jun 2021 17:00:19 +0100 Subject: [PATCH 05/13] Remove crypto composite feature from allowed aarch64 features. Prefer using AES/SHA2 features directly. --- compiler/rustc_codegen_ssa/src/target_features.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/compiler/rustc_codegen_ssa/src/target_features.rs b/compiler/rustc_codegen_ssa/src/target_features.rs index c89d42ecc58ac..8d7e9612f4749 100644 --- a/compiler/rustc_codegen_ssa/src/target_features.rs +++ b/compiler/rustc_codegen_ssa/src/target_features.rs @@ -47,8 +47,6 @@ const AARCH64_ALLOWED_FEATURES: &[(&str, Option)] = &[ ("sve", Some(sym::aarch64_target_feature)), // FEAT_CRC ("crc", Some(sym::aarch64_target_feature)), - // Cryptographic extension - ("crypto", Some(sym::aarch64_target_feature)), // FEAT_RAS ("ras", Some(sym::aarch64_target_feature)), // FEAT_LSE From e817b505415d8830c937e41633a7edfdd82208dd Mon Sep 17 00:00:00 2001 From: Adam Gemmell Date: Tue, 1 Jun 2021 17:01:47 +0100 Subject: [PATCH 06/13] Update aarch64 runtime feature detection tests --- library/std/tests/run-time-detect.rs | 38 ++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/library/std/tests/run-time-detect.rs b/library/std/tests/run-time-detect.rs index c7107b5d0a3ef..079f00a5753f1 100644 --- a/library/std/tests/run-time-detect.rs +++ b/library/std/tests/run-time-detect.rs @@ -16,22 +16,56 @@ fn arm_linux() { println!("neon: {}", is_arm_feature_detected!("neon")); println!("pmull: {}", is_arm_feature_detected!("pmull")); + println!("crypto: {}", is_arm_feature_detected!("crypto")); + println!("crc: {}", is_arm_feature_detected!("crc")); + println!("aes: {}", is_arm_feature_detected!("aes")); + println!("sha2: {}", is_arm_feature_detected!("sha2")); } #[test] #[cfg(all(target_arch = "aarch64", any(target_os = "linux", target_os = "android")))] fn aarch64_linux() { - println!("fp: {}", is_aarch64_feature_detected!("fp")); - println!("fp16: {}", is_aarch64_feature_detected!("fp16")); println!("neon: {}", is_aarch64_feature_detected!("neon")); println!("asimd: {}", is_aarch64_feature_detected!("asimd")); + println!("pmull: {}", is_aarch64_feature_detected!("pmull")); + println!("fp: {}", is_aarch64_feature_detected!("fp")); + println!("fp16: {}", is_aarch64_feature_detected!("fp16")); println!("sve: {}", is_aarch64_feature_detected!("sve")); println!("crc: {}", is_aarch64_feature_detected!("crc")); println!("lse: {}", is_aarch64_feature_detected!("lse")); + println!("lse2: {}", is_aarch64_feature_detected!("lse2")); println!("rdm: {}", is_aarch64_feature_detected!("rdm")); println!("rcpc: {}", is_aarch64_feature_detected!("rcpc")); + println!("rcpc2: {}", is_aarch64_feature_detected!("rcpc2")); println!("dotprod: {}", is_aarch64_feature_detected!("dotprod")); println!("tme: {}", is_aarch64_feature_detected!("tme")); + println!("fhm: {}", is_aarch64_feature_detected!("fhm")); + println!("dit: {}", is_aarch64_feature_detected!("dit")); + println!("flagm: {}", is_aarch64_feature_detected!("flagm")); + println!("ssbs: {}", is_aarch64_feature_detected!("ssbs")); + println!("sb: {}", is_aarch64_feature_detected!("sb")); + println!("pauth: {}", is_aarch64_feature_detected!("pauth")); + println!("dpb: {}", is_aarch64_feature_detected!("dpb")); + println!("dpb2: {}", is_aarch64_feature_detected!("dpb2")); + println!("sve2: {}", is_aarch64_feature_detected!("sve2")); + println!("sve2-aes: {}", is_aarch64_feature_detected!("sve2-aes")); + println!("sve2-sm4: {}", is_aarch64_feature_detected!("sve2-sm4")); + println!("sve2-sha3: {}", is_aarch64_feature_detected!("sve2-sha3")); + println!("sve2-bitperm: {}", is_aarch64_feature_detected!("sve2-bitperm")); + println!("frintts: {}", is_aarch64_feature_detected!("frintts")); + println!("i8mm: {}", is_aarch64_feature_detected!("i8mm")); + println!("f32mm: {}", is_aarch64_feature_detected!("f32mm")); + println!("f64mm: {}", is_aarch64_feature_detected!("f64mm")); + println!("bf16: {}", is_aarch64_feature_detected!("bf16")); + println!("rand: {}", is_aarch64_feature_detected!("rand")); + println!("bti: {}", is_aarch64_feature_detected!("bti")); + println!("mte: {}", is_aarch64_feature_detected!("mte")); + println!("jsconv: {}", is_aarch64_feature_detected!("jsconv")); + println!("fcma: {}", is_aarch64_feature_detected!("fcma")); + println!("aes: {}", is_aarch64_feature_detected!("aes")); + println!("sha2: {}", is_aarch64_feature_detected!("sha2")); + println!("sha3: {}", is_aarch64_feature_detected!("sha3")); + println!("sm4: {}", is_aarch64_feature_detected!("sm4")); } #[test] From c58246efe47bea09d4f3e70f536e4c9bb7770749 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Fri, 16 Jul 2021 17:24:35 -0700 Subject: [PATCH 07/13] Rustdoc accessibility: use an icon for the [-]/[+] controls This way, we can show the plus and minus buttons on screens, while voice control will read off actual words "Collapse" and "Expand" instead of reading "open brace minus close brace" and "open brace plus close brace". Part of #87059 --- src/librustdoc/html/render/write_shared.rs | 7 ++- src/librustdoc/html/static/css/rustdoc.css | 54 ++++++++++++++++-- src/librustdoc/html/static/css/themes/ayu.css | 5 ++ .../html/static/css/themes/dark.css | 5 ++ .../html/static/images/minus-17x17.png | Bin 0 -> 3183 bytes .../html/static/images/minus-17x17.png.url | 1 + .../html/static/images/plus-17x17.png | Bin 0 -> 3337 bytes .../html/static/images/plus-17x17.png.url | 1 + src/librustdoc/html/static_files.rs | 4 ++ 9 files changed, 69 insertions(+), 8 deletions(-) create mode 100644 src/librustdoc/html/static/images/minus-17x17.png create mode 100644 src/librustdoc/html/static/images/minus-17x17.png.url create mode 100644 src/librustdoc/html/static/images/plus-17x17.png create mode 100644 src/librustdoc/html/static/images/plus-17x17.png.url diff --git a/src/librustdoc/html/render/write_shared.rs b/src/librustdoc/html/render/write_shared.rs index 94a902a2d0522..f529b2f2bfcdc 100644 --- a/src/librustdoc/html/render/write_shared.rs +++ b/src/librustdoc/html/render/write_shared.rs @@ -126,13 +126,16 @@ impl Context<'_> { emit: &[EmitType], ) -> Result<(), Error> { let tmp; + let contents = + contents.replace("data-url(minus-17x17.png)", static_files::MINUS_PNG_DATAURL); + let contents = contents.replace("data-url(plus-17x17.png)", static_files::PLUS_PNG_DATAURL); let contents = if minify { tmp = if resource.extension() == Some(&OsStr::new("css")) { - minifier::css::minify(contents).map_err(|e| { + minifier::css::minify(&contents).map_err(|e| { Error::new(format!("failed to minify CSS file: {}", e), resource.path(self)) })? } else { - minifier::js::minify(contents) + minifier::js::minify(&contents) }; tmp.as_bytes() } else { diff --git a/src/librustdoc/html/static/css/rustdoc.css b/src/librustdoc/html/static/css/rustdoc.css index 91243a4086ced..ae321be09e228 100644 --- a/src/librustdoc/html/static/css/rustdoc.css +++ b/src/librustdoc/html/static/css/rustdoc.css @@ -1508,11 +1508,33 @@ details.rustdoc-toggle > summary.hideme > span { } details.rustdoc-toggle > summary::before { - content: "[+]"; + content: "Expand"; font-weight: 300; font-size: 0.8em; letter-spacing: 1px; cursor: pointer; + width: 17px; + height: max(17px, 1.1em); + background: data-url(plus-17x17.png) no-repeat top left; + display: inline-block; + vertical-align: middle; + opacity: .5; + text-indent: 17px; + overflow: hidden; +} + +details.rustdoc-toggle > summary.hideme::before { + /* "hideme" toggles already have a description when they're contracted */ + content: " "; +} + +details.rustdoc-toggle > summary:focus::before { + outline: dotted 1px; +} + +details.rustdoc-toggle > summary:focus::before, +details.rustdoc-toggle > summary:hover::before { + opacity: 1; } details.rustdoc-toggle.top-doc > summary, @@ -1560,20 +1582,40 @@ details.rustdoc-toggle[open] > summary.hideme > span { display: none; } -details.rustdoc-toggle[open] > summary::before { - content: "[−]"; - display: inline; +details.rustdoc-toggle[open] > summary::before, +details.rustdoc-toggle[open] > summary.hideme::before { + width: 17px; + height: max(17px, 1.1em); + background: data-url(minus-17x17.png) no-repeat top left; + display: inline-block; + content: "Collapse"; } details.undocumented > summary::before { - content: "[+] Show hidden undocumented items"; + padding-left: 17px; + height: max(17px, 1.1em); + background: data-url(plus-17x17.png) no-repeat top left; + content: "Show hidden undocumented items"; cursor: pointer; font-size: 16px; font-weight: 300; + opacity: .5; +} + +details.undocumented > summary:focus::before { + outline: dotted 1px; +} + +details.undocumented > summary:focus::before, +details.undocumented > summary:hover::before { + opacity: 1; } details.undocumented[open] > summary::before { - content: "[−] Hide undocumented items"; + padding-left: 17px; + height: max(17px, 1.1em); + background: data-url(minus-17x17.png) no-repeat top left; + content: "Hide undocumented items"; } /* Media Queries */ diff --git a/src/librustdoc/html/static/css/themes/ayu.css b/src/librustdoc/html/static/css/themes/ayu.css index df386fb66a33f..849924ea5501e 100644 --- a/src/librustdoc/html/static/css/themes/ayu.css +++ b/src/librustdoc/html/static/css/themes/ayu.css @@ -229,6 +229,11 @@ details.undocumented > summary::before { color: #999; } +details.rustdoc-toggle > summary::before, +details.undocumented > summary::before { + filter: invert(100%); +} + #crate-search { color: #c5c5c5; background-color: #141920; diff --git a/src/librustdoc/html/static/css/themes/dark.css b/src/librustdoc/html/static/css/themes/dark.css index c8a5dbdc66aaf..c26122e4bffb5 100644 --- a/src/librustdoc/html/static/css/themes/dark.css +++ b/src/librustdoc/html/static/css/themes/dark.css @@ -194,6 +194,11 @@ details.undocumented > summary::before { color: #999; } +details.rustdoc-toggle > summary::before, +details.undocumented > summary::before { + filter: invert(100%); +} + #crate-search { color: #111; background-color: #f0f0f0; diff --git a/src/librustdoc/html/static/images/minus-17x17.png b/src/librustdoc/html/static/images/minus-17x17.png new file mode 100644 index 0000000000000000000000000000000000000000..3cdbbf5033ec412df28970edfc6da26d578252bf GIT binary patch literal 3183 zcmV-#43P7QP)EX>4Tx04R}tkv&MmKpe$iQ>7vm1q+HeWT;LSL`5C73Pq?8YK2xEOfLNpnlvOS zE{=k0!NHHks)LKOt`4q(Aou~|=H{g6A|?JWDYS_3;J6>}?mh0_0Ya_BG^=eC&~)2O zCE{WxyCQ~O5ke38Fom$pEMr!ZlJFg0_XzOyF2=L`&;2>N)SShDfJi*U4AUlFC!XB2 z4bJ<-5muB{;&b8=lP*a7$aTfzH_io@1)do()2TV)2(egbVWovx(bR}1h@+~eQ@)V# zSmnIMSu0goAMvPXS6bmWZkNfxsT)#vvg`Uwzx2Cnp`zgz>RKS{4P zwdfJhy$xJkH#KDsxZDBypA6ZQT`5RY$mfCgGy0}1(0dDXu6n&S_Hp_Eq^Yaq4RCM> z3>PSS&F9@6t-bwwrqSOIhc$Aq`Q-Sa00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNlirurSaechcOY8BBoXX=B?DRj@#@?6;*5z6R7s*sB zq&wO4Fl>`;Ho`F~T*cz58H2VhdXAgscvVM?+%%dRjm|W_@^Yhh8a>;_5G`p%4nZ)rI=!iE53xnC6-ijh5J-jeGQdstf}T^nr+Z= z3yoWBspYOaT&cV6sfW%z_SEx$uMIog@FNT!aio!NtZi1mZ6C0vH*01xCGGge8m=<0 zJxzZ>C&C#RGfsnX76#zZMmSSZJ7QdC$~qWF)^%961Cd+o6j4c%krpiKnXp>FEFIH0%={UH$|9eMuv@m>W zwp5$4r8;s6xv?IB3u0LqDVbgaw^9R^r|U7?UfAoQV0LsPY)P0IlI*O{ue^t~m^FA;(!$WH~S{cZ?Go;=@p-Fhs-y zk>1MPWIRiZ3mrB!wT(izC!;9HH`O)^M)~HDd5tOyJI7L7Pi9#MLyB*?Vl{vhj+!|R zWKS?6=&Hyf$a9zFu4w1+E1AvP`(Q^*Rz@WZ3%`dSjp3^dYJ7%$F?uh9CTlv-h6NEqB;46p0;xwdzft^*Vfu|?XvM+f zTt{H&Ko!20U8~%(5hrUMGb}n;4lNkqPRIr#P|!8zCh73>-Sb}N+2N;)TiuvPZ*AJ^ zvawmlg~-inYRU}Tko5CHRnSnNqKvo?-c1yOK6zW~!x5l@G^ z!0!-x0DiG?P0-fn(7Kvp&{0G%E0NH93?NMiZpsxm2}UPYz|VPz&$+f|r9ihYh;GBX z)SC&ZBLE-@dI|-RHF%Y=ULdPtlT++JGb?WfN+crCh0nvxO=yGL~_U1wfbv%f+-wKa5KO zx<9x;>=8B&F2Dp$FFBKOreZTOL4C@F#B8DCfef+n6tQNEE^Bn*VlpuYf8c^1$(S=1 zIu0`KT)bd{{+V24cJ!SJOm0!J{NxuVK*8c-GC?OQK9`0F|S+~E0ISH$)^xYKl+ zwjY*nyD?)3Z4INf@SQarl$$TXh# z*_AgWP_*knq0c%{H?s^>X5|g2t>TX^NAV}l;!mGB*u5w8)9I)Kt)7tn&Aw#rPz5|l zrBXw=6|dOC_MF7_Rl6FYOJzOMDqa~IT<>8PuM&(;e(3IB)%v6!8^15vFZNxHZYuP^ z^EJ(gKH$(b(^YXP6Q?k|X>gaGbV|-7$DziSYi64q($FT31XDB|vP$XKsn#YSeN+cN zD~D26ZRBOG57@2h+ph#rZwKyAVV4A7-aF6go6bGsQk~T|d5siJBcoFnGVtq*cfos; zF+~8%*6P}QMMk%(Z%cK*2!$@MA6DM7XiG=s8$rY7;>*~TZ=|#iEmq}QRhzt#!ncAb zr0^}q9R+=txXPQFku{5^IP8jkU&>e6m0i&xM6*FkORQhHnDM_SC8ZoiRC{>{CtV>_FhNikmzF#YB~nB7?hy|2s{+b!2~}C zwbe#>DGJw@*lI^YvkCTwk`65KxVg~$g5`YG1h2V6DFSZmP16ZVl9x7TBr(+oEbjzA z=a*g(ToJ&mbH{r3j+WE002ovPDHLkV1fg@>rMaw literal 0 HcmV?d00001 diff --git a/src/librustdoc/html/static/images/minus-17x17.png.url b/src/librustdoc/html/static/images/minus-17x17.png.url new file mode 100644 index 0000000000000..a05bac5d875c5 --- /dev/null +++ b/src/librustdoc/html/static/images/minus-17x17.png.url @@ -0,0 +1 @@ +url(data:image/png;base64,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) diff --git a/src/librustdoc/html/static/images/plus-17x17.png b/src/librustdoc/html/static/images/plus-17x17.png new file mode 100644 index 0000000000000000000000000000000000000000..fa996a147a5274789f8be9a0261bf2d7b8b49514 GIT binary patch literal 3337 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 Td7i2U00000NkvXXu0mjf{gOu@ literal 0 HcmV?d00001 diff --git a/src/librustdoc/html/static/images/plus-17x17.png.url b/src/librustdoc/html/static/images/plus-17x17.png.url new file mode 100644 index 0000000000000..dd0078d1ace7e --- /dev/null +++ b/src/librustdoc/html/static/images/plus-17x17.png.url @@ -0,0 +1 @@ +url(data:image/png;base64,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) diff --git a/src/librustdoc/html/static_files.rs b/src/librustdoc/html/static_files.rs index 2ec7e66234ddd..db34d60638e8a 100644 --- a/src/librustdoc/html/static_files.rs +++ b/src/librustdoc/html/static_files.rs @@ -64,6 +64,10 @@ crate static RUST_FAVICON_SVG: &[u8] = include_bytes!("static/images/favicon.svg crate static RUST_FAVICON_PNG_16: &[u8] = include_bytes!("static/images/favicon-16x16.png"); crate static RUST_FAVICON_PNG_32: &[u8] = include_bytes!("static/images/favicon-32x32.png"); +/// The pixel art buttons +crate static MINUS_PNG_DATAURL: &str = include_str!("static/images/minus-17x17.png.url"); +crate static PLUS_PNG_DATAURL: &str = include_str!("static/images/plus-17x17.png.url"); + crate static PAGE: &str = include_str!("templates/page.html"); /// The built-in themes given to every documentation site. From 59460a655643b32fe2e1ac39279333bf5a574a82 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Sat, 17 Jul 2021 10:55:33 -0700 Subject: [PATCH 08/13] Pull the "Expand" / "Collapse" text to the end of the line, instead of start --- src/librustdoc/html/static/css/rustdoc.css | 24 +++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/librustdoc/html/static/css/rustdoc.css b/src/librustdoc/html/static/css/rustdoc.css index ae321be09e228..531484f2105b9 100644 --- a/src/librustdoc/html/static/css/rustdoc.css +++ b/src/librustdoc/html/static/css/rustdoc.css @@ -1508,10 +1508,7 @@ details.rustdoc-toggle > summary.hideme > span { } details.rustdoc-toggle > summary::before { - content: "Expand"; - font-weight: 300; - font-size: 0.8em; - letter-spacing: 1px; + content: " "; cursor: pointer; width: 17px; height: max(17px, 1.1em); @@ -1519,13 +1516,21 @@ details.rustdoc-toggle > summary::before { display: inline-block; vertical-align: middle; opacity: .5; - text-indent: 17px; +} + +/* Screen readers see the text version at the end the line. + Visual readers see the icon at the start of the line, but small and transparent. */ +details.rustdoc-toggle > summary::after { + content: "Expand"; overflow: hidden; + width: 0; + height: 0; + position: absolute; } -details.rustdoc-toggle > summary.hideme::before { +details.rustdoc-toggle > summary.hideme::after { /* "hideme" toggles already have a description when they're contracted */ - content: " "; + content: ""; } details.rustdoc-toggle > summary:focus::before { @@ -1588,6 +1593,11 @@ details.rustdoc-toggle[open] > summary.hideme::before { height: max(17px, 1.1em); background: data-url(minus-17x17.png) no-repeat top left; display: inline-block; + content: " "; +} + +details.rustdoc-toggle[open] > summary::after, +details.rustdoc-toggle[open] > summary.hideme::after { content: "Collapse"; } From 64c99036600735ef2d92fcbd7e9911617b064624 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Sat, 17 Jul 2021 11:28:26 -0700 Subject: [PATCH 09/13] Use empty string instead of single space --- src/librustdoc/html/static/css/rustdoc.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustdoc/html/static/css/rustdoc.css b/src/librustdoc/html/static/css/rustdoc.css index 531484f2105b9..0754eeb9900d1 100644 --- a/src/librustdoc/html/static/css/rustdoc.css +++ b/src/librustdoc/html/static/css/rustdoc.css @@ -1508,7 +1508,7 @@ details.rustdoc-toggle > summary.hideme > span { } details.rustdoc-toggle > summary::before { - content: " "; + content: ""; cursor: pointer; width: 17px; height: max(17px, 1.1em); @@ -1593,7 +1593,7 @@ details.rustdoc-toggle[open] > summary.hideme::before { height: max(17px, 1.1em); background: data-url(minus-17x17.png) no-repeat top left; display: inline-block; - content: " "; + content: ""; } details.rustdoc-toggle[open] > summary::after, From 6698cdc5a506a3047a23497fa0d3b8f2d14b9bbe Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Tue, 3 Aug 2021 08:50:52 -0700 Subject: [PATCH 10/13] Update cargo --- Cargo.lock | 4 ++-- src/tools/cargo | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 094a738b4160f..39688b7b7ea7f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -255,7 +255,7 @@ checksum = "81a18687293a1546b67c246452202bbbf143d239cb43494cc163da14979082da" [[package]] name = "cargo" -version = "0.56.0" +version = "0.57.0" dependencies = [ "anyhow", "atty", @@ -388,7 +388,7 @@ dependencies = [ [[package]] name = "cargo-util" -version = "0.1.0" +version = "0.1.1" dependencies = [ "anyhow", "core-foundation", diff --git a/src/tools/cargo b/src/tools/cargo index d21c22870e584..cc17afbb0067b 160000 --- a/src/tools/cargo +++ b/src/tools/cargo @@ -1 +1 @@ -Subproject commit d21c22870e58499d6c31f1bef3bf1255eb021666 +Subproject commit cc17afbb0067b1f57d8882640f63b2168d5b7624 From 3744dc868793e42200c5221ba4496ef5c17b8899 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Mon, 19 Jul 2021 01:16:36 -0700 Subject: [PATCH 11/13] Remove space after negative sign in Literal to_string --- compiler/rustc_expand/src/proc_macro_server.rs | 3 +++ library/proc_macro/src/bridge/mod.rs | 1 + library/proc_macro/src/lib.rs | 2 +- src/test/ui/proc-macro/auxiliary/api/parse.rs | 6 +++--- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/compiler/rustc_expand/src/proc_macro_server.rs b/compiler/rustc_expand/src/proc_macro_server.rs index 47cc2ecb4bfdd..42ae8e972c274 100644 --- a/compiler/rustc_expand/src/proc_macro_server.rs +++ b/compiler/rustc_expand/src/proc_macro_server.rs @@ -582,6 +582,9 @@ impl server::Literal for Rustc<'_> { Ok(Literal { lit, span: self.call_site }) } + fn to_string(&mut self, literal: &Self::Literal) -> String { + literal.lit.to_string() + } fn debug_kind(&mut self, literal: &Self::Literal) -> String { format!("{:?}", literal.lit.kind) } diff --git a/library/proc_macro/src/bridge/mod.rs b/library/proc_macro/src/bridge/mod.rs index b968d44fe488d..7001e827ad845 100644 --- a/library/proc_macro/src/bridge/mod.rs +++ b/library/proc_macro/src/bridge/mod.rs @@ -109,6 +109,7 @@ macro_rules! with_api { fn drop($self: $S::Literal); fn clone($self: &$S::Literal) -> $S::Literal; fn from_str(s: &str) -> Result<$S::Literal, ()>; + fn to_string($self: &$S::Literal) -> String; fn debug_kind($self: &$S::Literal) -> String; fn symbol($self: &$S::Literal) -> String; fn suffix($self: &$S::Literal) -> Option; diff --git a/library/proc_macro/src/lib.rs b/library/proc_macro/src/lib.rs index 8138c3882fc14..46f564199d0c2 100644 --- a/library/proc_macro/src/lib.rs +++ b/library/proc_macro/src/lib.rs @@ -1195,7 +1195,7 @@ impl FromStr for Literal { #[stable(feature = "proc_macro_lib", since = "1.15.0")] impl ToString for Literal { fn to_string(&self) -> String { - TokenStream::from(TokenTree::from(self.clone())).to_string() + self.0.to_string() } } diff --git a/src/test/ui/proc-macro/auxiliary/api/parse.rs b/src/test/ui/proc-macro/auxiliary/api/parse.rs index a304c5e81a4bb..93551ebaf82d5 100644 --- a/src/test/ui/proc-macro/auxiliary/api/parse.rs +++ b/src/test/ui/proc-macro/auxiliary/api/parse.rs @@ -6,8 +6,8 @@ pub fn test() { } fn test_display_literal() { - assert_eq!(Literal::isize_unsuffixed(-10).to_string(), "- 10"); - assert_eq!(Literal::isize_suffixed(-10).to_string(), "- 10isize"); + assert_eq!(Literal::isize_unsuffixed(-10).to_string(), "-10"); + assert_eq!(Literal::isize_suffixed(-10).to_string(), "-10isize"); } fn test_parse_literal() { @@ -18,7 +18,7 @@ fn test_parse_literal() { assert_eq!("b\"\"".parse::().unwrap().to_string(), "b\"\""); assert_eq!("r##\"\"##".parse::().unwrap().to_string(), "r##\"\"##"); assert_eq!("10ulong".parse::().unwrap().to_string(), "10ulong"); - assert_eq!("-10ulong".parse::().unwrap().to_string(), "- 10ulong"); + assert_eq!("-10ulong".parse::().unwrap().to_string(), "-10ulong"); assert!("true".parse::().is_err()); assert!(".8".parse::().is_err()); From 6fe09722ea0762405558b6ea5eb5f765a24af9df Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 31 Jul 2021 16:23:51 +0200 Subject: [PATCH 12/13] Simplify usage of CSS background-image --- src/librustdoc/html/render/write_shared.rs | 47 +++++++++++++++--- src/librustdoc/html/static/css/rustdoc.css | 20 +++----- .../html/static/images/minus-17x17.png | Bin 3183 -> 0 bytes .../html/static/images/minus-17x17.png.url | 1 - .../html/static/images/plus-17x17.png | Bin 3337 -> 0 bytes .../html/static/images/plus-17x17.png.url | 1 - .../html/static/images/toggle-minus.svg | 1 + .../html/static/images/toggle-plus.svg | 1 + src/librustdoc/html/static_files.rs | 10 ++-- 9 files changed, 57 insertions(+), 24 deletions(-) delete mode 100644 src/librustdoc/html/static/images/minus-17x17.png delete mode 100644 src/librustdoc/html/static/images/minus-17x17.png.url delete mode 100644 src/librustdoc/html/static/images/plus-17x17.png delete mode 100644 src/librustdoc/html/static/images/plus-17x17.png.url create mode 100644 src/librustdoc/html/static/images/toggle-minus.svg create mode 100644 src/librustdoc/html/static/images/toggle-plus.svg diff --git a/src/librustdoc/html/render/write_shared.rs b/src/librustdoc/html/render/write_shared.rs index f529b2f2bfcdc..4411b7771eda7 100644 --- a/src/librustdoc/html/render/write_shared.rs +++ b/src/librustdoc/html/render/write_shared.rs @@ -126,16 +126,13 @@ impl Context<'_> { emit: &[EmitType], ) -> Result<(), Error> { let tmp; - let contents = - contents.replace("data-url(minus-17x17.png)", static_files::MINUS_PNG_DATAURL); - let contents = contents.replace("data-url(plus-17x17.png)", static_files::PLUS_PNG_DATAURL); let contents = if minify { tmp = if resource.extension() == Some(&OsStr::new("css")) { - minifier::css::minify(&contents).map_err(|e| { + minifier::css::minify(contents).map_err(|e| { Error::new(format!("failed to minify CSS file: {}", e), resource.path(self)) })? } else { - minifier::js::minify(&contents) + minifier::js::minify(contents) }; tmp.as_bytes() } else { @@ -178,9 +175,45 @@ pub(super) fn write_shared( cx.write_shared(SharedResource::InvocationSpecific { basename: p }, content, &options.emit) }; + fn add_background_image_to_css( + cx: &Context<'_>, + css: &mut String, + rule: &str, + file: &'static str, + ) { + css.push_str(&format!( + "{} {{ background-image: url({}); }}", + rule, + SharedResource::ToolchainSpecific { basename: file } + .path(cx) + .file_name() + .unwrap() + .to_str() + .unwrap() + )) + } + + // Add all the static files. These may already exist, but we just + // overwrite them anyway to make sure that they're fresh and up-to-date. + let mut rustdoc_css = static_files::RUSTDOC_CSS.to_owned(); + add_background_image_to_css( + cx, + &mut rustdoc_css, + "details.undocumented[open] > summary::before, \ + details.rustdoc-toggle[open] > summary::before, \ + details.rustdoc-toggle[open] > summary.hideme::before", + "toggle-minus.svg", + ); + add_background_image_to_css( + cx, + &mut rustdoc_css, + "details.undocumented > summary::before, details.rustdoc-toggle > summary::before", + "toggle-plus.svg", + ); + write_minify("rustdoc.css", &rustdoc_css)?; + // Add all the static files. These may already exist, but we just // overwrite them anyway to make sure that they're fresh and up-to-date. - write_minify("rustdoc.css", static_files::RUSTDOC_CSS)?; write_minify("settings.css", static_files::SETTINGS_CSS)?; write_minify("noscript.css", static_files::NOSCRIPT_CSS)?; @@ -220,6 +253,8 @@ pub(super) fn write_shared( write_toolchain("wheel.svg", static_files::WHEEL_SVG)?; write_toolchain("clipboard.svg", static_files::CLIPBOARD_SVG)?; write_toolchain("down-arrow.svg", static_files::DOWN_ARROW_SVG)?; + write_toolchain("toggle-minus.svg", static_files::TOGGLE_MINUS_PNG)?; + write_toolchain("toggle-plus.svg", static_files::TOGGLE_PLUS_PNG)?; let mut themes: Vec<&String> = themes.iter().collect(); themes.sort(); diff --git a/src/librustdoc/html/static/css/rustdoc.css b/src/librustdoc/html/static/css/rustdoc.css index 0754eeb9900d1..4e33eab565006 100644 --- a/src/librustdoc/html/static/css/rustdoc.css +++ b/src/librustdoc/html/static/css/rustdoc.css @@ -1512,7 +1512,8 @@ details.rustdoc-toggle > summary::before { cursor: pointer; width: 17px; height: max(17px, 1.1em); - background: data-url(plus-17x17.png) no-repeat top left; + background-repeat: no-repeat; + background-position: top left; display: inline-block; vertical-align: middle; opacity: .5; @@ -1533,10 +1534,6 @@ details.rustdoc-toggle > summary.hideme::after { content: ""; } -details.rustdoc-toggle > summary:focus::before { - outline: dotted 1px; -} - details.rustdoc-toggle > summary:focus::before, details.rustdoc-toggle > summary:hover::before { opacity: 1; @@ -1591,7 +1588,8 @@ details.rustdoc-toggle[open] > summary::before, details.rustdoc-toggle[open] > summary.hideme::before { width: 17px; height: max(17px, 1.1em); - background: data-url(minus-17x17.png) no-repeat top left; + background-repeat: no-repeat; + background-position: top left; display: inline-block; content: ""; } @@ -1604,7 +1602,8 @@ details.rustdoc-toggle[open] > summary.hideme::after { details.undocumented > summary::before { padding-left: 17px; height: max(17px, 1.1em); - background: data-url(plus-17x17.png) no-repeat top left; + background-repeat: no-repeat; + background-position: top left; content: "Show hidden undocumented items"; cursor: pointer; font-size: 16px; @@ -1612,10 +1611,6 @@ details.undocumented > summary::before { opacity: .5; } -details.undocumented > summary:focus::before { - outline: dotted 1px; -} - details.undocumented > summary:focus::before, details.undocumented > summary:hover::before { opacity: 1; @@ -1624,7 +1619,8 @@ details.undocumented > summary:hover::before { details.undocumented[open] > summary::before { padding-left: 17px; height: max(17px, 1.1em); - background: data-url(minus-17x17.png) no-repeat top left; + background-repeat: no-repeat + background-position: top left; content: "Hide undocumented items"; } diff --git a/src/librustdoc/html/static/images/minus-17x17.png b/src/librustdoc/html/static/images/minus-17x17.png deleted file mode 100644 index 3cdbbf5033ec412df28970edfc6da26d578252bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3183 zcmV-#43P7QP)EX>4Tx04R}tkv&MmKpe$iQ>7vm1q+HeWT;LSL`5C73Pq?8YK2xEOfLNpnlvOS zE{=k0!NHHks)LKOt`4q(Aou~|=H{g6A|?JWDYS_3;J6>}?mh0_0Ya_BG^=eC&~)2O zCE{WxyCQ~O5ke38Fom$pEMr!ZlJFg0_XzOyF2=L`&;2>N)SShDfJi*U4AUlFC!XB2 z4bJ<-5muB{;&b8=lP*a7$aTfzH_io@1)do()2TV)2(egbVWovx(bR}1h@+~eQ@)V# zSmnIMSu0goAMvPXS6bmWZkNfxsT)#vvg`Uwzx2Cnp`zgz>RKS{4P zwdfJhy$xJkH#KDsxZDBypA6ZQT`5RY$mfCgGy0}1(0dDXu6n&S_Hp_Eq^Yaq4RCM> z3>PSS&F9@6t-bwwrqSOIhc$Aq`Q-Sa00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNlirurSaechcOY8BBoXX=B?DRj@#@?6;*5z6R7s*sB zq&wO4Fl>`;Ho`F~T*cz58H2VhdXAgscvVM?+%%dRjm|W_@^Yhh8a>;_5G`p%4nZ)rI=!iE53xnC6-ijh5J-jeGQdstf}T^nr+Z= z3yoWBspYOaT&cV6sfW%z_SEx$uMIog@FNT!aio!NtZi1mZ6C0vH*01xCGGge8m=<0 zJxzZ>C&C#RGfsnX76#zZMmSSZJ7QdC$~qWF)^%961Cd+o6j4c%krpiKnXp>FEFIH0%={UH$|9eMuv@m>W zwp5$4r8;s6xv?IB3u0LqDVbgaw^9R^r|U7?UfAoQV0LsPY)P0IlI*O{ue^t~m^FA;(!$WH~S{cZ?Go;=@p-Fhs-y zk>1MPWIRiZ3mrB!wT(izC!;9HH`O)^M)~HDd5tOyJI7L7Pi9#MLyB*?Vl{vhj+!|R zWKS?6=&Hyf$a9zFu4w1+E1AvP`(Q^*Rz@WZ3%`dSjp3^dYJ7%$F?uh9CTlv-h6NEqB;46p0;xwdzft^*Vfu|?XvM+f zTt{H&Ko!20U8~%(5hrUMGb}n;4lNkqPRIr#P|!8zCh73>-Sb}N+2N;)TiuvPZ*AJ^ zvawmlg~-inYRU}Tko5CHRnSnNqKvo?-c1yOK6zW~!x5l@G^ z!0!-x0DiG?P0-fn(7Kvp&{0G%E0NH93?NMiZpsxm2}UPYz|VPz&$+f|r9ihYh;GBX z)SC&ZBLE-@dI|-RHF%Y=ULdPtlT++JGb?WfN+crCh0nvxO=yGL~_U1wfbv%f+-wKa5KO zx<9x;>=8B&F2Dp$FFBKOreZTOL4C@F#B8DCfef+n6tQNEE^Bn*VlpuYf8c^1$(S=1 zIu0`KT)bd{{+V24cJ!SJOm0!J{NxuVK*8c-GC?OQK9`0F|S+~E0ISH$)^xYKl+ zwjY*nyD?)3Z4INf@SQarl$$TXh# z*_AgWP_*knq0c%{H?s^>X5|g2t>TX^NAV}l;!mGB*u5w8)9I)Kt)7tn&Aw#rPz5|l zrBXw=6|dOC_MF7_Rl6FYOJzOMDqa~IT<>8PuM&(;e(3IB)%v6!8^15vFZNxHZYuP^ z^EJ(gKH$(b(^YXP6Q?k|X>gaGbV|-7$DziSYi64q($FT31XDB|vP$XKsn#YSeN+cN zD~D26ZRBOG57@2h+ph#rZwKyAVV4A7-aF6go6bGsQk~T|d5siJBcoFnGVtq*cfos; zF+~8%*6P}QMMk%(Z%cK*2!$@MA6DM7XiG=s8$rY7;>*~TZ=|#iEmq}QRhzt#!ncAb zr0^}q9R+=txXPQFku{5^IP8jkU&>e6m0i&xM6*FkORQhHnDM_SC8ZoiRC{>{CtV>_FhNikmzF#YB~nB7?hy|2s{+b!2~}C zwbe#>DGJw@*lI^YvkCTwk`65KxVg~$g5`YG1h2V6DFSZmP16ZVl9x7TBr(+oEbjzA z=a*g(ToJ&mbH{r3j+WE002ovPDHLkV1fg@>rMaw diff --git a/src/librustdoc/html/static/images/minus-17x17.png.url b/src/librustdoc/html/static/images/minus-17x17.png.url deleted file mode 100644 index a05bac5d875c5..0000000000000 --- a/src/librustdoc/html/static/images/minus-17x17.png.url +++ /dev/null @@ -1 +0,0 @@ -url(data:image/png;base64,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) diff --git a/src/librustdoc/html/static/images/plus-17x17.png b/src/librustdoc/html/static/images/plus-17x17.png deleted file mode 100644 index fa996a147a5274789f8be9a0261bf2d7b8b49514..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3337 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 Td7i2U00000NkvXXu0mjf{gOu@ diff --git a/src/librustdoc/html/static/images/plus-17x17.png.url b/src/librustdoc/html/static/images/plus-17x17.png.url deleted file mode 100644 index dd0078d1ace7e..0000000000000 --- a/src/librustdoc/html/static/images/plus-17x17.png.url +++ /dev/null @@ -1 +0,0 @@ -url(data:image/png;base64,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) diff --git a/src/librustdoc/html/static/images/toggle-minus.svg b/src/librustdoc/html/static/images/toggle-minus.svg new file mode 100644 index 0000000000000..73154788a0e8e --- /dev/null +++ b/src/librustdoc/html/static/images/toggle-minus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/librustdoc/html/static/images/toggle-plus.svg b/src/librustdoc/html/static/images/toggle-plus.svg new file mode 100644 index 0000000000000..08b17033e164b --- /dev/null +++ b/src/librustdoc/html/static/images/toggle-plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/librustdoc/html/static_files.rs b/src/librustdoc/html/static_files.rs index db34d60638e8a..6f3d08ea65569 100644 --- a/src/librustdoc/html/static_files.rs +++ b/src/librustdoc/html/static_files.rs @@ -47,6 +47,12 @@ crate static CLIPBOARD_SVG: &[u8] = include_bytes!("static/images/clipboard.svg" /// The file contents of `down-arrow.svg`, the icon used for the crate choice combobox. crate static DOWN_ARROW_SVG: &[u8] = include_bytes!("static/images/down-arrow.svg"); +/// The file contents of `toggle-minus.svg`, the icon used for opened toggles. +crate static TOGGLE_MINUS_PNG: &[u8] = include_bytes!("static/images/toggle-minus.svg"); + +/// The file contents of `toggle-plus.svg`, the icon used for closed toggles. +crate static TOGGLE_PLUS_PNG: &[u8] = include_bytes!("static/images/toggle-plus.svg"); + /// The contents of `COPYRIGHT.txt`, the license listing for files distributed with documentation /// output. crate static COPYRIGHT: &[u8] = include_bytes!("static/COPYRIGHT.txt"); @@ -64,10 +70,6 @@ crate static RUST_FAVICON_SVG: &[u8] = include_bytes!("static/images/favicon.svg crate static RUST_FAVICON_PNG_16: &[u8] = include_bytes!("static/images/favicon-16x16.png"); crate static RUST_FAVICON_PNG_32: &[u8] = include_bytes!("static/images/favicon-32x32.png"); -/// The pixel art buttons -crate static MINUS_PNG_DATAURL: &str = include_str!("static/images/minus-17x17.png.url"); -crate static PLUS_PNG_DATAURL: &str = include_str!("static/images/plus-17x17.png.url"); - crate static PAGE: &str = include_str!("templates/page.html"); /// The built-in themes given to every documentation site. From 6953f17aec75c83985db6861ddf4d3cfaa10f042 Mon Sep 17 00:00:00 2001 From: Smitty Date: Tue, 3 Aug 2021 15:11:04 -0400 Subject: [PATCH 13/13] Test dropping union fields more --- src/test/ui/union/union-drop.rs | 3 + .../ui/union/union-drop.thirunsafeck.stderr | 22 ------- .../unsafe/union-assignop.mirunsafeck.stderr | 59 +++++++++++++++++++ src/test/ui/unsafe/union-assignop.rs | 30 ++++++++++ .../unsafe/union-assignop.thirunsafeck.stderr | 59 +++++++++++++++++++ 5 files changed, 151 insertions(+), 22 deletions(-) delete mode 100644 src/test/ui/union/union-drop.thirunsafeck.stderr create mode 100644 src/test/ui/unsafe/union-assignop.mirunsafeck.stderr create mode 100644 src/test/ui/unsafe/union-assignop.rs create mode 100644 src/test/ui/unsafe/union-assignop.thirunsafeck.stderr diff --git a/src/test/ui/union/union-drop.rs b/src/test/ui/union/union-drop.rs index 9edf582751152..c3d7d41ca35fb 100644 --- a/src/test/ui/union/union-drop.rs +++ b/src/test/ui/union/union-drop.rs @@ -1,4 +1,7 @@ // run-pass +// revisions: mirunsafeck thirunsafeck +// [thirunsafeck]compile-flags: -Z thir-unsafeck + #![allow(dead_code)] #![allow(unused_variables)] diff --git a/src/test/ui/union/union-drop.thirunsafeck.stderr b/src/test/ui/union/union-drop.thirunsafeck.stderr deleted file mode 100644 index 9766ae4e435f2..0000000000000 --- a/src/test/ui/union/union-drop.thirunsafeck.stderr +++ /dev/null @@ -1,22 +0,0 @@ -warning: unnecessary `unsafe` block - --> $DIR/union-drop.rs:27:9 - | -LL | unsafe { CHECK += 1; } - | ^^^^^^ unnecessary `unsafe` block - | - = note: `#[warn(unused_unsafe)]` on by default - -warning: unnecessary `unsafe` block - --> $DIR/union-drop.rs:33:9 - | -LL | unsafe { CHECK += 1; } - | ^^^^^^ unnecessary `unsafe` block - -warning: unnecessary `unsafe` block - --> $DIR/union-drop.rs:40:5 - | -LL | unsafe { - | ^^^^^^ unnecessary `unsafe` block - -warning: 3 warnings emitted - diff --git a/src/test/ui/unsafe/union-assignop.mirunsafeck.stderr b/src/test/ui/unsafe/union-assignop.mirunsafeck.stderr new file mode 100644 index 0000000000000..cd338ac9e3a27 --- /dev/null +++ b/src/test/ui/unsafe/union-assignop.mirunsafeck.stderr @@ -0,0 +1,59 @@ +error[E0133]: access to union field is unsafe and requires unsafe function or block + --> $DIR/union-assignop.rs:20:5 + | +LL | foo.a += 5; + | ^^^^^^^^^^ access to union field + | + = note: the field may not be properly initialized: using uninitialized data will cause undefined behavior + +error[E0133]: access to union field is unsafe and requires unsafe function or block + --> $DIR/union-assignop.rs:21:5 + | +LL | foo.b += Dropping; + | ^^^^^ access to union field + | + = note: the field may not be properly initialized: using uninitialized data will cause undefined behavior + +error[E0133]: assignment to union field that might need dropping is unsafe and requires unsafe function or block + --> $DIR/union-assignop.rs:22:5 + | +LL | foo.b = Dropping; + | ^^^^^^^^^^^^^^^^ assignment to union field that might need dropping + | + = note: the previous content of the field will be dropped, which causes undefined behavior if the field was not properly initialized + +error[E0133]: access to union field is unsafe and requires unsafe function or block + --> $DIR/union-assignop.rs:23:5 + | +LL | foo.a; + | ^^^^^ access to union field + | + = note: the field may not be properly initialized: using uninitialized data will cause undefined behavior + +error[E0133]: access to union field is unsafe and requires unsafe function or block + --> $DIR/union-assignop.rs:25:5 + | +LL | foo.b; + | ^^^^^ access to union field + | + = note: the field may not be properly initialized: using uninitialized data will cause undefined behavior + +error[E0133]: access to union field is unsafe and requires unsafe function or block + --> $DIR/union-assignop.rs:27:13 + | +LL | foo.b = foo.b; + | ^^^^^ access to union field + | + = note: the field may not be properly initialized: using uninitialized data will cause undefined behavior + +error[E0133]: assignment to union field that might need dropping is unsafe and requires unsafe function or block + --> $DIR/union-assignop.rs:27:5 + | +LL | foo.b = foo.b; + | ^^^^^^^^^^^^^ assignment to union field that might need dropping + | + = note: the previous content of the field will be dropped, which causes undefined behavior if the field was not properly initialized + +error: aborting due to 7 previous errors + +For more information about this error, try `rustc --explain E0133`. diff --git a/src/test/ui/unsafe/union-assignop.rs b/src/test/ui/unsafe/union-assignop.rs new file mode 100644 index 0000000000000..c4be20aa567b7 --- /dev/null +++ b/src/test/ui/unsafe/union-assignop.rs @@ -0,0 +1,30 @@ +// revisions: mirunsafeck thirunsafeck +// [thirunsafeck]compile-flags: -Z thir-unsafeck + +#![feature(untagged_unions)] + +use std::ops::AddAssign; + +struct Dropping; +impl AddAssign for Dropping { + fn add_assign(&mut self, _: Self) {} +} + +union Foo { + a: u8, // non-dropping + b: Dropping, // treated as dropping +} + +fn main() { + let mut foo = Foo { a: 42 }; + foo.a += 5; //~ ERROR access to union field is unsafe + foo.b += Dropping; //~ ERROR access to union field is unsafe + foo.b = Dropping; //~ ERROR assignment to union field that might need dropping is unsafe + foo.a; //~ ERROR access to union field is unsafe + let foo = Foo { a: 42 }; + foo.b; //~ ERROR access to union field is unsafe + let mut foo = Foo { a: 42 }; + foo.b = foo.b; + //~^ ERROR access to union field is unsafe + //~| ERROR assignment to union field that might need dropping +} diff --git a/src/test/ui/unsafe/union-assignop.thirunsafeck.stderr b/src/test/ui/unsafe/union-assignop.thirunsafeck.stderr new file mode 100644 index 0000000000000..71de421a2553e --- /dev/null +++ b/src/test/ui/unsafe/union-assignop.thirunsafeck.stderr @@ -0,0 +1,59 @@ +error[E0133]: access to union field is unsafe and requires unsafe function or block + --> $DIR/union-assignop.rs:20:5 + | +LL | foo.a += 5; + | ^^^^^ access to union field + | + = note: the field may not be properly initialized: using uninitialized data will cause undefined behavior + +error[E0133]: access to union field is unsafe and requires unsafe function or block + --> $DIR/union-assignop.rs:21:5 + | +LL | foo.b += Dropping; + | ^^^^^ access to union field + | + = note: the field may not be properly initialized: using uninitialized data will cause undefined behavior + +error[E0133]: assignment to union field that might need dropping is unsafe and requires unsafe function or block + --> $DIR/union-assignop.rs:22:5 + | +LL | foo.b = Dropping; + | ^^^^^^^^^^^^^^^^ assignment to union field that might need dropping + | + = note: the previous content of the field will be dropped, which causes undefined behavior if the field was not properly initialized + +error[E0133]: access to union field is unsafe and requires unsafe function or block + --> $DIR/union-assignop.rs:23:5 + | +LL | foo.a; + | ^^^^^ access to union field + | + = note: the field may not be properly initialized: using uninitialized data will cause undefined behavior + +error[E0133]: access to union field is unsafe and requires unsafe function or block + --> $DIR/union-assignop.rs:25:5 + | +LL | foo.b; + | ^^^^^ access to union field + | + = note: the field may not be properly initialized: using uninitialized data will cause undefined behavior + +error[E0133]: assignment to union field that might need dropping is unsafe and requires unsafe function or block + --> $DIR/union-assignop.rs:27:5 + | +LL | foo.b = foo.b; + | ^^^^^^^^^^^^^ assignment to union field that might need dropping + | + = note: the previous content of the field will be dropped, which causes undefined behavior if the field was not properly initialized + +error[E0133]: access to union field is unsafe and requires unsafe function or block + --> $DIR/union-assignop.rs:27:13 + | +LL | foo.b = foo.b; + | ^^^^^ access to union field + | + = note: the field may not be properly initialized: using uninitialized data will cause undefined behavior + +error: aborting due to 7 previous errors + +For more information about this error, try `rustc --explain E0133`.