Auto merge of #85711 - JohnTitor:rollup-8why04t, r=JohnTitor
Rollup of 12 pull requests Successful merges: - #84048 (Avoid CJK legacy fonts in Windows) - #85529 (doc: clarify Mutex::try_lock, etc. errors) - #85590 (Fix bootstrap using host exe suffix for cargo) - #85610 (Fix pointer provenance in <[T]>::copy_within) - #85623 (Remove stray .stderr files) - #85645 (Demote `ControlFlow::{from|into}_try` to `pub(crate)`) - #85647 (Revert "Move llvm submodule updates to rustbuild") - #85666 (Document shared_from_cow functions) - #85668 (Fix tasklist example in rustdoc book.) - #85672 (Move stability attribute for items under the `ip` feature) - #85699 (Update books) - #85701 (Update cargo) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
1969c2e312
27 changed files with 223 additions and 198 deletions
|
|
@ -1859,6 +1859,18 @@ where
|
|||
B: ToOwned + ?Sized,
|
||||
Rc<B>: From<&'a B> + From<B::Owned>,
|
||||
{
|
||||
/// Create a reference-counted pointer from
|
||||
/// a clone-on-write pointer by copying its content.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```rust
|
||||
/// # use std::rc::Rc;
|
||||
/// # use std::borrow::Cow;
|
||||
/// let cow: Cow<str> = Cow::Borrowed("eggplant");
|
||||
/// let shared: Rc<str> = Rc::from(cow);
|
||||
/// assert_eq!("eggplant", &shared[..]);
|
||||
/// ```
|
||||
#[inline]
|
||||
fn from(cow: Cow<'a, B>) -> Rc<B> {
|
||||
match cow {
|
||||
|
|
|
|||
|
|
@ -2413,6 +2413,18 @@ where
|
|||
B: ToOwned + ?Sized,
|
||||
Arc<B>: From<&'a B> + From<B::Owned>,
|
||||
{
|
||||
/// Create an atomically reference-counted pointer from
|
||||
/// a clone-on-write pointer by copying its content.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```rust
|
||||
/// # use std::sync::Arc;
|
||||
/// # use std::borrow::Cow;
|
||||
/// let cow: Cow<str> = Cow::Borrowed("eggplant");
|
||||
/// let shared: Arc<str> = Arc::from(cow);
|
||||
/// assert_eq!("eggplant", &shared[..]);
|
||||
/// ```
|
||||
#[inline]
|
||||
fn from(cow: Cow<'a, B>) -> Arc<B> {
|
||||
match cow {
|
||||
|
|
|
|||
|
|
@ -187,9 +187,8 @@ impl<B, C> ControlFlow<B, C> {
|
|||
#[cfg(bootstrap)]
|
||||
impl<R: ops::TryV1> ControlFlow<R, R::Output> {
|
||||
/// Create a `ControlFlow` from any type implementing `Try`.
|
||||
#[unstable(feature = "control_flow_enum", reason = "new API", issue = "75744")]
|
||||
#[inline]
|
||||
pub fn from_try(r: R) -> Self {
|
||||
pub(crate) fn from_try(r: R) -> Self {
|
||||
match R::into_result(r) {
|
||||
Ok(v) => ControlFlow::Continue(v),
|
||||
Err(v) => ControlFlow::Break(R::from_error(v)),
|
||||
|
|
@ -197,9 +196,8 @@ impl<R: ops::TryV1> ControlFlow<R, R::Output> {
|
|||
}
|
||||
|
||||
/// Convert a `ControlFlow` into any type implementing `Try`;
|
||||
#[unstable(feature = "control_flow_enum", reason = "new API", issue = "75744")]
|
||||
#[inline]
|
||||
pub fn into_try(self) -> R {
|
||||
pub(crate) fn into_try(self) -> R {
|
||||
match self {
|
||||
ControlFlow::Continue(v) => R::from_ok(v),
|
||||
ControlFlow::Break(v) => v,
|
||||
|
|
@ -207,12 +205,14 @@ impl<R: ops::TryV1> ControlFlow<R, R::Output> {
|
|||
}
|
||||
}
|
||||
|
||||
/// These are used only as part of implementing the iterator adapters.
|
||||
/// They have mediocre names and non-obvious semantics, so aren't
|
||||
/// currently on a path to potential stabilization.
|
||||
#[cfg(not(bootstrap))]
|
||||
impl<R: ops::TryV2> ControlFlow<R, R::Output> {
|
||||
/// Create a `ControlFlow` from any type implementing `Try`.
|
||||
#[unstable(feature = "control_flow_enum", reason = "new API", issue = "75744")]
|
||||
#[inline]
|
||||
pub fn from_try(r: R) -> Self {
|
||||
pub(crate) fn from_try(r: R) -> Self {
|
||||
match R::branch(r) {
|
||||
ControlFlow::Continue(v) => ControlFlow::Continue(v),
|
||||
ControlFlow::Break(v) => ControlFlow::Break(R::from_residual(v)),
|
||||
|
|
@ -220,9 +220,8 @@ impl<R: ops::TryV2> ControlFlow<R, R::Output> {
|
|||
}
|
||||
|
||||
/// Convert a `ControlFlow` into any type implementing `Try`;
|
||||
#[unstable(feature = "control_flow_enum", reason = "new API", issue = "75744")]
|
||||
#[inline]
|
||||
pub fn into_try(self) -> R {
|
||||
pub(crate) fn into_try(self) -> R {
|
||||
match self {
|
||||
ControlFlow::Continue(v) => R::from_output(v),
|
||||
ControlFlow::Break(v) => v,
|
||||
|
|
|
|||
|
|
@ -3096,7 +3096,11 @@ impl<T> [T] {
|
|||
// SAFETY: the conditions for `ptr::copy` have all been checked above,
|
||||
// as have those for `ptr::add`.
|
||||
unsafe {
|
||||
ptr::copy(self.as_ptr().add(src_start), self.as_mut_ptr().add(dest), count);
|
||||
// Derive both `src_ptr` and `dest_ptr` from the same loan
|
||||
let ptr = self.as_mut_ptr();
|
||||
let src_ptr = ptr.add(src_start);
|
||||
let dest_ptr = ptr.add(dest);
|
||||
ptr::copy(src_ptr, dest_ptr, count);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,3 @@
|
|||
#![unstable(
|
||||
feature = "ip",
|
||||
reason = "extra functionality has not been \
|
||||
scrutinized to the level that it should \
|
||||
be to be stable",
|
||||
issue = "27709"
|
||||
)]
|
||||
|
||||
// Tests for this module
|
||||
#[cfg(all(test, not(target_os = "emscripten")))]
|
||||
mod tests;
|
||||
|
|
@ -126,6 +118,7 @@ pub struct Ipv6Addr {
|
|||
|
||||
#[allow(missing_docs)]
|
||||
#[derive(Copy, PartialEq, Eq, Clone, Hash, Debug)]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
pub enum Ipv6MulticastScope {
|
||||
InterfaceLocal,
|
||||
LinkLocal,
|
||||
|
|
@ -199,6 +192,7 @@ impl IpAddr {
|
|||
/// assert_eq!(IpAddr::V6(Ipv6Addr::new(0, 0, 0x1c9, 0, 0, 0xafc8, 0, 0x1)).is_global(), true);
|
||||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ip", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn is_global(&self) -> bool {
|
||||
match self {
|
||||
|
|
@ -249,6 +243,7 @@ impl IpAddr {
|
|||
/// );
|
||||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ip", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn is_documentation(&self) -> bool {
|
||||
match self {
|
||||
|
|
@ -549,6 +544,7 @@ impl Ipv4Addr {
|
|||
/// assert_eq!(Ipv4Addr::new(80, 9, 12, 3).is_global(), true);
|
||||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv4", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn is_global(&self) -> bool {
|
||||
// check if this address is 192.0.0.9 or 192.0.0.10. These addresses are the only two
|
||||
|
|
@ -587,6 +583,7 @@ impl Ipv4Addr {
|
|||
/// assert_eq!(Ipv4Addr::new(100, 128, 0, 0).is_shared(), false);
|
||||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv4", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn is_shared(&self) -> bool {
|
||||
self.octets()[0] == 100 && (self.octets()[1] & 0b1100_0000 == 0b0100_0000)
|
||||
|
|
@ -620,6 +617,7 @@ impl Ipv4Addr {
|
|||
/// assert_eq!(Ipv4Addr::new(191, 255, 255, 255).is_ietf_protocol_assignment(), false);
|
||||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv4", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn is_ietf_protocol_assignment(&self) -> bool {
|
||||
self.octets()[0] == 192 && self.octets()[1] == 0 && self.octets()[2] == 0
|
||||
|
|
@ -644,6 +642,7 @@ impl Ipv4Addr {
|
|||
/// assert_eq!(Ipv4Addr::new(198, 20, 0, 0).is_benchmarking(), false);
|
||||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv4", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn is_benchmarking(&self) -> bool {
|
||||
self.octets()[0] == 198 && (self.octets()[1] & 0xfe) == 18
|
||||
|
|
@ -677,6 +676,7 @@ impl Ipv4Addr {
|
|||
/// assert_eq!(Ipv4Addr::new(255, 255, 255, 255).is_reserved(), false);
|
||||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv4", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn is_reserved(&self) -> bool {
|
||||
self.octets()[0] & 240 == 240 && !self.is_broadcast()
|
||||
|
|
@ -1234,6 +1234,7 @@ impl Ipv6Addr {
|
|||
/// assert_eq!(Ipv6Addr::new(0, 0, 0x1c9, 0, 0, 0xafc8, 0, 0x1).is_global(), true);
|
||||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn is_global(&self) -> bool {
|
||||
match self.multicast_scope() {
|
||||
|
|
@ -1260,6 +1261,7 @@ impl Ipv6Addr {
|
|||
/// assert_eq!(Ipv6Addr::new(0xfc02, 0, 0, 0, 0, 0, 0, 0).is_unique_local(), true);
|
||||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn is_unique_local(&self) -> bool {
|
||||
(self.segments()[0] & 0xfe00) == 0xfc00
|
||||
|
|
@ -1315,6 +1317,7 @@ impl Ipv6Addr {
|
|||
/// [IETF RFC 4291 section 2.5.6]: https://tools.ietf.org/html/rfc4291#section-2.5.6
|
||||
/// [RFC 4291 errata 4406]: https://www.rfc-editor.org/errata/eid4406
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn is_unicast_link_local_strict(&self) -> bool {
|
||||
matches!(self.segments(), [0xfe80, 0, 0, 0, ..])
|
||||
|
|
@ -1369,6 +1372,7 @@ impl Ipv6Addr {
|
|||
/// [IETF RFC 4291 section 2.4]: https://tools.ietf.org/html/rfc4291#section-2.4
|
||||
/// [RFC 4291 errata 4406]: https://www.rfc-editor.org/errata/eid4406
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn is_unicast_link_local(&self) -> bool {
|
||||
(self.segments()[0] & 0xffc0) == 0xfe80
|
||||
|
|
@ -1409,6 +1413,7 @@ impl Ipv6Addr {
|
|||
///
|
||||
/// [RFC 3879]: https://tools.ietf.org/html/rfc3879
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn is_unicast_site_local(&self) -> bool {
|
||||
(self.segments()[0] & 0xffc0) == 0xfec0
|
||||
|
|
@ -1432,6 +1437,7 @@ impl Ipv6Addr {
|
|||
/// assert_eq!(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0).is_documentation(), true);
|
||||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn is_documentation(&self) -> bool {
|
||||
(self.segments()[0] == 0x2001) && (self.segments()[1] == 0xdb8)
|
||||
|
|
@ -1468,6 +1474,7 @@ impl Ipv6Addr {
|
|||
/// assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).is_unicast_global(), true);
|
||||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn is_unicast_global(&self) -> bool {
|
||||
!self.is_multicast()
|
||||
|
|
@ -1494,6 +1501,7 @@ impl Ipv6Addr {
|
|||
/// assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0xffff, 0xc00a, 0x2ff).multicast_scope(), None);
|
||||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn multicast_scope(&self) -> Option<Ipv6MulticastScope> {
|
||||
if self.is_multicast() {
|
||||
|
|
@ -1555,6 +1563,7 @@ impl Ipv6Addr {
|
|||
/// assert_eq!(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1).to_ipv4_mapped(), None);
|
||||
/// ```
|
||||
#[rustc_const_unstable(feature = "const_ipv6", issue = "76205")]
|
||||
#[unstable(feature = "ip", issue = "27709")]
|
||||
#[inline]
|
||||
pub const fn to_ipv4_mapped(&self) -> Option<Ipv4Addr> {
|
||||
match self.octets() {
|
||||
|
|
|
|||
|
|
@ -294,8 +294,14 @@ impl<T: ?Sized> Mutex<T> {
|
|||
/// # Errors
|
||||
///
|
||||
/// If another user of this mutex panicked while holding the mutex, then
|
||||
/// this call will return an error if the mutex would otherwise be
|
||||
/// acquired.
|
||||
/// this call will return the [`Poisoned`] error if the mutex would
|
||||
/// otherwise be acquired.
|
||||
///
|
||||
/// If the mutex could not be acquired because it is already locked, then
|
||||
/// this call will return the [`WouldBlock`] error.
|
||||
///
|
||||
/// [`Poisoned`]: TryLockError::Poisoned
|
||||
/// [`WouldBlock`]: TryLockError::WouldBlock
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
|
|
|
|||
|
|
@ -199,11 +199,17 @@ impl<T: ?Sized> RwLock<T> {
|
|||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This function will return an error if the RwLock is poisoned. An RwLock
|
||||
/// is poisoned whenever a writer panics while holding an exclusive lock. An
|
||||
/// error will only be returned if the lock would have otherwise been
|
||||
/// This function will return the [`Poisoned`] error if the RwLock is poisoned.
|
||||
/// An RwLock is poisoned whenever a writer panics while holding an exclusive
|
||||
/// lock. `Poisoned` will only be returned if the lock would have otherwise been
|
||||
/// acquired.
|
||||
///
|
||||
/// This function will return the [`WouldBlock`] error if the RwLock could not
|
||||
/// be acquired because it was already locked exclusively.
|
||||
///
|
||||
/// [`Poisoned`]: TryLockError::Poisoned
|
||||
/// [`WouldBlock`]: TryLockError::WouldBlock
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
|
|
@ -281,10 +287,17 @@ impl<T: ?Sized> RwLock<T> {
|
|||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// This function will return an error if the RwLock is poisoned. An RwLock
|
||||
/// is poisoned whenever a writer panics while holding an exclusive lock. An
|
||||
/// error will only be returned if the lock would have otherwise been
|
||||
/// acquired.
|
||||
/// This function will return the [`Poisoned`] error if the RwLock is
|
||||
/// poisoned. An RwLock is poisoned whenever a writer panics while holding
|
||||
/// an exclusive lock. `Poisoned` will only be returned if the lock would have
|
||||
/// otherwise been acquired.
|
||||
///
|
||||
/// This function will return the [`WouldBlock`] error if the RwLock could not
|
||||
/// be acquired because it was already locked exclusively.
|
||||
///
|
||||
/// [`Poisoned`]: TryLockError::Poisoned
|
||||
/// [`WouldBlock`]: TryLockError::WouldBlock
|
||||
///
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
|
|
|
|||
|
|
@ -991,20 +991,28 @@ class RustBuild(object):
|
|||
).decode(default_encoding).splitlines()]
|
||||
filtered_submodules = []
|
||||
submodules_names = []
|
||||
llvm_checked_out = os.path.exists(os.path.join(self.rust_root, "src/llvm-project/.git"))
|
||||
external_llvm_provided = self.get_toml('llvm-config') or self.downloading_llvm()
|
||||
llvm_needed = not self.get_toml('codegen-backends', 'rust') \
|
||||
or "llvm" in self.get_toml('codegen-backends', 'rust')
|
||||
for module in submodules:
|
||||
# This is handled by native::Llvm in rustbuild, not here
|
||||
if module.endswith("llvm-project"):
|
||||
continue
|
||||
# Don't sync the llvm-project submodule if an external LLVM was
|
||||
# provided, if we are downloading LLVM or if the LLVM backend is
|
||||
# not being built. Also, if the submodule has been initialized
|
||||
# already, sync it anyways so that it doesn't mess up contributor
|
||||
# pull requests.
|
||||
if external_llvm_provided or not llvm_needed:
|
||||
if self.get_toml('lld') != 'true' and not llvm_checked_out:
|
||||
continue
|
||||
check = self.check_submodule(module, slow_submodules)
|
||||
filtered_submodules.append((module, check))
|
||||
submodules_names.append(module)
|
||||
recorded = subprocess.Popen(["git", "ls-tree", "HEAD"] + submodules_names,
|
||||
cwd=self.rust_root, stdout=subprocess.PIPE)
|
||||
recorded = recorded.communicate()[0].decode(default_encoding).strip().splitlines()
|
||||
# { filename: hash }
|
||||
recorded_submodules = {}
|
||||
for data in recorded:
|
||||
# [mode, kind, hash, filename]
|
||||
data = data.split()
|
||||
recorded_submodules[data[3]] = data[2]
|
||||
for module in filtered_submodules:
|
||||
|
|
|
|||
|
|
@ -472,22 +472,12 @@ impl Build {
|
|||
slice::from_ref(&self.build.triple)
|
||||
}
|
||||
|
||||
/// If the LLVM submodule has been initialized already, sync it unconditionally. This avoids
|
||||
/// contributors checking in a submodule change by accident.
|
||||
pub fn maybe_update_llvm_submodule(&self) {
|
||||
if self.in_tree_llvm_info.is_git() {
|
||||
native::update_llvm_submodule(self);
|
||||
}
|
||||
}
|
||||
|
||||
/// Executes the entire build, as configured by the flags and configuration.
|
||||
pub fn build(&mut self) {
|
||||
unsafe {
|
||||
job::setup(self);
|
||||
}
|
||||
|
||||
self.maybe_update_llvm_submodule();
|
||||
|
||||
if let Subcommand::Format { check, paths } = &self.config.cmd {
|
||||
return format::format(self, *check, &paths);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ use build_helper::{output, t};
|
|||
use crate::builder::{Builder, RunConfig, ShouldRun, Step};
|
||||
use crate::config::TargetSelection;
|
||||
use crate::util::{self, exe};
|
||||
use crate::{Build, GitRepo};
|
||||
use crate::GitRepo;
|
||||
use build_helper::up_to_date;
|
||||
|
||||
pub struct Meta {
|
||||
|
|
@ -91,85 +91,6 @@ pub fn prebuilt_llvm_config(
|
|||
Err(Meta { stamp, build_llvm_config, out_dir, root: root.into() })
|
||||
}
|
||||
|
||||
// modified from `check_submodule` and `update_submodule` in bootstrap.py
|
||||
pub(crate) fn update_llvm_submodule(build: &Build) {
|
||||
let llvm_project = &Path::new("src").join("llvm-project");
|
||||
|
||||
fn dir_is_empty(dir: &Path) -> bool {
|
||||
t!(std::fs::read_dir(dir)).next().is_none()
|
||||
}
|
||||
|
||||
// NOTE: The check for the empty directory is here because when running x.py
|
||||
// the first time, the llvm submodule won't be checked out. Check it out
|
||||
// now so we can build it.
|
||||
if !build.in_tree_llvm_info.is_git() && !dir_is_empty(&build.config.src.join(llvm_project)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// check_submodule
|
||||
let checked_out = if build.config.fast_submodules {
|
||||
Some(output(
|
||||
Command::new("git")
|
||||
.args(&["rev-parse", "HEAD"])
|
||||
.current_dir(build.config.src.join(llvm_project)),
|
||||
))
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
// update_submodules
|
||||
let recorded = output(
|
||||
Command::new("git")
|
||||
.args(&["ls-tree", "HEAD"])
|
||||
.arg(llvm_project)
|
||||
.current_dir(&build.config.src),
|
||||
);
|
||||
let hash =
|
||||
recorded.split(' ').nth(2).unwrap_or_else(|| panic!("unexpected output `{}`", recorded));
|
||||
|
||||
// update_submodule
|
||||
if let Some(llvm_hash) = checked_out {
|
||||
if hash == llvm_hash {
|
||||
// already checked out
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
println!("Updating submodule {}", llvm_project.display());
|
||||
build.run(
|
||||
Command::new("git")
|
||||
.args(&["submodule", "-q", "sync"])
|
||||
.arg(llvm_project)
|
||||
.current_dir(&build.config.src),
|
||||
);
|
||||
|
||||
// Try passing `--progress` to start, then run git again without if that fails.
|
||||
let update = |progress: bool| {
|
||||
let mut git = Command::new("git");
|
||||
git.args(&["submodule", "update", "--init", "--recursive"]);
|
||||
if progress {
|
||||
git.arg("--progress");
|
||||
}
|
||||
git.arg(llvm_project).current_dir(&build.config.src);
|
||||
git
|
||||
};
|
||||
// NOTE: doesn't use `try_run` because this shouldn't print an error if it fails.
|
||||
if !update(true).status().map_or(false, |status| status.success()) {
|
||||
build.run(&mut update(false));
|
||||
}
|
||||
|
||||
build.run(
|
||||
Command::new("git")
|
||||
.args(&["reset", "-q", "--hard"])
|
||||
.current_dir(build.config.src.join(llvm_project)),
|
||||
);
|
||||
build.run(
|
||||
Command::new("git")
|
||||
.args(&["clean", "-qdfx"])
|
||||
.current_dir(build.config.src.join(llvm_project)),
|
||||
);
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
||||
pub struct Llvm {
|
||||
pub target: TargetSelection,
|
||||
|
|
@ -207,9 +128,6 @@ impl Step for Llvm {
|
|||
Err(m) => m,
|
||||
};
|
||||
|
||||
if !builder.config.dry_run {
|
||||
update_llvm_submodule(builder);
|
||||
}
|
||||
if builder.config.llvm_link_shared
|
||||
&& (target.contains("windows") || target.contains("apple-darwin"))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -217,9 +217,8 @@ impl Step for ToolBuild {
|
|||
if tool == "tidy" {
|
||||
tool = "rust-tidy";
|
||||
}
|
||||
let cargo_out =
|
||||
builder.cargo_out(compiler, self.mode, target).join(exe(tool, compiler.host));
|
||||
let bin = builder.tools_dir(compiler).join(exe(tool, compiler.host));
|
||||
let cargo_out = builder.cargo_out(compiler, self.mode, target).join(exe(tool, target));
|
||||
let bin = builder.tools_dir(compiler).join(exe(tool, target));
|
||||
builder.copy(&cargo_out, &bin);
|
||||
Some(bin)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -130,7 +130,6 @@ pub fn make(host: &str) -> PathBuf {
|
|||
}
|
||||
}
|
||||
|
||||
#[track_caller]
|
||||
pub fn output(cmd: &mut Command) -> String {
|
||||
let output = match cmd.stderr(Stdio::inherit()).output() {
|
||||
Ok(status) => status,
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 1da3c411f17adb1ba5de1683bb6acee83362b54a
|
||||
Subproject commit 302a115e8f71876dfc884aebb0ca5ccb02b8a962
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 569c3391f5c0cc43433bc77831d17f8ff4d76602
|
||||
Subproject commit 7349d173fa28a0bb834cf0264a05286620ef0923
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 5aa457bf1b54bd2cd5d4cf49797f29299bdf89a7
|
||||
Subproject commit 9c68af3ce6ccca2395e1868addef26a0542e9ddd
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 5f8c6da200ada77760a2fe1096938ef58151c9a6
|
||||
Subproject commit 805e016c5792ad2adabb66e348233067d5ea9f10
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 1e6c7fbda4c45e85adf63ff3f82fa9c870b1447f
|
||||
Subproject commit 50de7f0682adc5d95ce858fe6318d19b4b951553
|
||||
|
|
@ -229,15 +229,13 @@ Example:
|
|||
|
||||
```md
|
||||
- [x] Complete task
|
||||
- [ ] IncComplete task
|
||||
- [ ] Incomplete task
|
||||
```
|
||||
|
||||
This will render as
|
||||
This will render as:
|
||||
|
||||
<ul>
|
||||
<li><input type="checkbox"></li>
|
||||
<li><input type="checkbox" checked></li>
|
||||
</ul>
|
||||
> - [x] Complete task
|
||||
> - [ ] Incomplete task
|
||||
|
||||
See the specification for the [task list extension] for more details.
|
||||
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@ crate static FILES_UNVERSIONED: Lazy<FxHashMap<&str, &[u8]>> = Lazy::new(|| {
|
|||
"SourceCodePro-Semibold.ttf.woff" => static_files::source_code_pro::SEMIBOLD,
|
||||
"SourceCodePro-It.ttf.woff" => static_files::source_code_pro::ITALIC,
|
||||
"SourceCodePro-LICENSE.txt" => static_files::source_code_pro::LICENSE,
|
||||
"noto-sans-kr-v13-korean-regular.woff" => static_files::noto_sans_kr::REGULAR,
|
||||
"noto-sans-kr-v13-korean-regular-LICENSE.txt" => static_files::noto_sans_kr::LICENSE,
|
||||
"LICENSE-MIT.txt" => static_files::LICENSE_MIT,
|
||||
"LICENSE-APACHE.txt" => static_files::LICENSE_APACHE,
|
||||
"COPYRIGHT.txt" => static_files::COPYRIGHT,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,93 @@
|
|||
Copyright 2014, 2015 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
|
||||
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
BIN
src/librustdoc/html/static/noto-sans-kr-v13-korean-regular.woff
Normal file
BIN
src/librustdoc/html/static/noto-sans-kr-v13-korean-regular.woff
Normal file
Binary file not shown.
|
|
@ -66,6 +66,14 @@
|
|||
font-display: swap;
|
||||
}
|
||||
|
||||
/* Avoid using legacy CJK serif fonts in Windows like Batang */
|
||||
@font-face {
|
||||
font-family: 'Noto Sans KR';
|
||||
src: url("noto-sans-kr-v13-korean-regular.woff") format("woff");
|
||||
font-display: swap;
|
||||
unicode-range: U+A960-A97F, U+AC00-D7AF, U+D7B0-D7FF;
|
||||
}
|
||||
|
||||
* {
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
|
|
@ -90,7 +98,7 @@ html {
|
|||
/* General structure and fonts */
|
||||
|
||||
body {
|
||||
font: 16px/1.4 "Source Serif 4", serif;
|
||||
font: 16px/1.4 "Source Serif 4", "Noto Sans KR", serif;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
padding: 10px 15px 20px 15px;
|
||||
|
|
|
|||
|
|
@ -126,6 +126,17 @@ crate mod source_code_pro {
|
|||
crate static LICENSE: &[u8] = include_bytes!("static/SourceCodePro-LICENSE.txt");
|
||||
}
|
||||
|
||||
crate mod noto_sans_kr {
|
||||
/// The file `noto-sans-kr-v13-korean-regular.woff`, the Regular variant of the Noto Sans KR
|
||||
/// font.
|
||||
crate static REGULAR: &[u8] = include_bytes!("static/noto-sans-kr-v13-korean-regular.woff");
|
||||
|
||||
/// The file `noto-sans-kr-v13-korean-regular-LICENSE.txt`, the license text of the Noto Sans KR
|
||||
/// font.
|
||||
crate static LICENSE: &[u8] =
|
||||
include_bytes!("static/noto-sans-kr-v13-korean-regular-LICENSE.txt");
|
||||
}
|
||||
|
||||
/// Files related to the sidebar in rustdoc sources.
|
||||
crate mod sidebar {
|
||||
/// File script to handle sidebar.
|
||||
|
|
|
|||
|
|
@ -14,3 +14,5 @@ SourceSerif4-Bold.ttf.woff
|
|||
SourceSerif4-It.ttf.woff
|
||||
SourceSerif4-LICENSE.md
|
||||
SourceSerif4-Regular.ttf.woff
|
||||
noto-sans-kr-v13-korean-regular-LICENSE.txt
|
||||
noto-sans-kr-v13-korean-regular.woff
|
||||
|
|
|
|||
|
|
@ -1,19 +0,0 @@
|
|||
error[E0133]: cast of pointer to int is unsafe and requires unsafe function or block
|
||||
--> $DIR/cast-ptr-to-int-const.rs:16:9
|
||||
|
|
||||
LL | &Y as *const u32 as usize
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ cast of pointer to int
|
||||
|
|
||||
= note: casting pointers to integers in constants
|
||||
|
||||
error[E0133]: cast of pointer to int is unsafe and requires unsafe function or block
|
||||
--> $DIR/cast-ptr-to-int-const.rs:23:5
|
||||
|
|
||||
LL | &0 as *const i32 as usize
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ cast of pointer to int
|
||||
|
|
||||
= note: casting pointers to integers in constants
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0133`.
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
error[E0658]: casting pointers to integers in constants is unstable
|
||||
--> $DIR/cast-ptr-to-int-const.rs:8:9
|
||||
|
|
||||
LL | main as usize
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #51910 <https://github.com/rust-lang/rust/issues/51910> for more information
|
||||
= help: add `#![feature(const_raw_ptr_to_usize_cast)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: casting pointers to integers in constants is unstable
|
||||
--> $DIR/cast-ptr-to-int-const.rs:12:9
|
||||
|
|
||||
LL | &Y as *const u32 as usize
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #51910 <https://github.com/rust-lang/rust/issues/51910> for more information
|
||||
= help: add `#![feature(const_raw_ptr_to_usize_cast)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: casting pointers to integers in constants is unstable
|
||||
--> $DIR/cast-ptr-to-int-const.rs:16:9
|
||||
|
|
||||
LL | &Y as *const u32 as usize
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #51910 <https://github.com/rust-lang/rust/issues/51910> for more information
|
||||
= help: add `#![feature(const_raw_ptr_to_usize_cast)]` to the crate attributes to enable
|
||||
|
||||
error[E0658]: casting pointers to integers in constant functions is unstable
|
||||
--> $DIR/cast-ptr-to-int-const.rs:23:5
|
||||
|
|
||||
LL | &0 as *const i32 as usize
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #51910 <https://github.com/rust-lang/rust/issues/51910> for more information
|
||||
= help: add `#![feature(const_raw_ptr_to_usize_cast)]` to the crate attributes to enable
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 070e459c2d8b79c5b2ac5218064e7603329c92ae
|
||||
Subproject commit e931e4796b61de593aa1097649445e535c9c7ee0
|
||||
Loading…
Add table
Add a link
Reference in a new issue