- 09 4月, 2022 8 次提交
-
-
由 Dylan DPC 提交于
Don't report numeric inference ambiguity when we have previous errors Fixes #95648
-
由 Dylan DPC 提交于
Strict provenance lints See #95488. This PR introduces two unstable (allow by default) lints to which lint on int2ptr and ptr2int casts, as the former is not possible in the strict provenance model and the latter can be written nicer using the `.addr()` API. Based on an initial version of the lint by ```@Gankra``` in #95199.
-
由 Dylan DPC 提交于
assert_uninit_valid: ensure we detect at least arrays of uninhabited types We can't easily extend this check to *all* arrays (Cc https://github.com/rust-lang/rust/pull/87041), but it turns out the existing check already catches arrays of uninhabited types. So let's make sure it stays that way by adding them to the test.
-
由 Dylan DPC 提交于
Add new ThinBox type for 1 stack pointer wide heap allocated trait objects **Zulip Thread**: https://rust-lang.zulipchat.com/#narrow/stream/219381-t-libs/topic/ThinBox Based on https://github.com/matthieu-m/rfc2580/blob/b58d1d3cba0d4b5e859d3617ea2d0943aaa31329/examples/thin.rs Tracking Issue: https://github.com/rust-lang/rust/issues/92791 Usage Trial: https://github.com/yaahc/pgx/pull/1/files ## TODO - [x] make sure to test with #[repr(align(1024))] structs etc
-
由 bors 提交于
update Miri Fixes https://github.com/rust-lang/rust/issues/95627 r? `@ghost` Cc `@rust-lang/miri`
-
由 bors 提交于
Enforce well formedness for type alias impl trait's hidden type fixes #84657 This was not an issue with return-position-impl-trait because the generic bounds of the function are the same as those of the opaque type, and the hidden type must already be well formed within the function. With type-alias-impl-trait the hidden type could be defined in a function that has *more* lifetime bounds than the type alias. This is fine, but the hidden type must still be well formed without those additional bounds.
-
由 Ralf Jung 提交于
-
由 Jane Lusby 提交于
Relevant commit messages from squashed history in order: Add initial version of ThinBox update test to actually capture failure swap to middle ptr impl based on matthieu-m's design Fix stack overflow in debug impl The previous version would take a `&ThinBox<T>` and deref it once, which resulted in a no-op and the same type, which it would then print causing an endless recursion. I've switched to calling `deref` by name to let method resolution handle deref the correct number of times. I've also updated the Drop impl for good measure since it seemed like it could be falling prey to the same bug, and I'll be adding some tests to verify that the drop is happening correctly. add test to verify drop is behaving add doc examples and remove unnecessary Pointee bounds ThinBox: use NonNull ThinBox: tests for size Apply suggestions from code review Co-authored-by: NAlphyr <47725341+a1phyr@users.noreply.github.com> use handle_alloc_error and fix drop signature update niche and size tests add cfg for allocating APIs check null before calculating offset add test for zst and trial usage prevent optimizer induced ub in drop and cleanup metadata gathering account for arbitrary size and alignment metadata Thank you nika and thomcc! Update library/alloc/src/boxed/thin.rs Co-authored-by: NJosh Triplett <josh@joshtriplett.org> Update library/alloc/src/boxed/thin.rs Co-authored-by: NJosh Triplett <josh@joshtriplett.org>
-
- 08 4月, 2022 24 次提交
-
-
由 niluxv 提交于
* split `fuzzy_provenance_casts` into a ptr2int and a int2ptr lint * feature gate both lints * update documentation to be more realistic short term * add tests for these lints
-
由 Aria Beingessner 提交于
ALL OF THEM
-
由 bors 提交于
Update Clippy r? `@Manishearth`
-
由 bors 提交于
Rollup of 7 pull requests Successful merges: - #95102 (Add known-bug for #95034) - #95579 (Add `<[[T; N]]>::flatten{_mut}`) - #95634 (Mailmap update) - #95705 (Promote x86_64-unknown-none target to Tier 2 and distribute build artifacts) - #95761 (Kickstart the inner usage of `macro_metavar_expr`) - #95782 (Windows: Increase a pipe's buffer capacity to 64kb) - #95791 (hide an #[allow] directive from the Arc::new_cyclic doc example) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
-
由 Dylan DPC 提交于
hide an #[allow] directive from the Arc::new_cyclic doc example A minor docs cleanup.
-
由 Dylan DPC 提交于
Windows: Increase a pipe's buffer capacity to 64kb This brings it inline with typical Linux defaults: https://www.man7.org/linux/man-pages/man7/pipe.7.html > Since Linux 2.6.11, the pipe capacity is 16 pages (i.e., 65,536 bytes in a system with a page size of 4096 bytes). This may also help with #45572 and #95759 but does not fix either issue. It simply makes them much less likely to be encountered.
-
由 Dylan DPC 提交于
Kickstart the inner usage of `macro_metavar_expr` There can be more use-cases but I am out of ideas. cc #83527 r? ``@petrochenkov``
-
由 Dylan DPC 提交于
Promote x86_64-unknown-none target to Tier 2 and distribute build artifacts This implements https://github.com/rust-lang/compiler-team/issues/499 , in which the compiler team accepted the x86_64-unknown-none target for promotion to a Tier 2 platform.
-
由 Dylan DPC 提交于
Mailmap update I noticed there are a lot of contributors who appear multiple times in https://thanks.rust-lang.org/rust/all-time/, which makes their "rank" on that page inaccurate. For example Nick Cameron currently appears at rank 21 with 2010 contributions and at rank 27 with 1287 contributions, because some of those are from nrc⁠```@ncameron.org``` and some from ncameron⁠```@mozilla.com.``` In reality Nick's rank would be 11 if counted correctly, which is a large difference. Solving this in a totally automated way is tricky because it involves figuring out whether Nick is 1 person with multiple emails, or is 2 people sharing the same name. This PR addresses a subset of the cases: only where a person has committed under multiple names using the same email. This is still not something that can be totally automated (e.g. by modifying https://github.com/rust-lang/thanks to dedup by email instead of name+email) because: - Some emails are not necessarily unique to one contributor, such as `ubuntu@localhost`. - It involves some judgement and mindfulness in picking the "canonical name" among the names used with a particular email. This is the name that will appear on thanks.rust-lang.org. Humans change their names sometimes and can be sensitive or picky about the use of names that are no longer preferred. For the purpose of this PR, I've tried to stick to the following heuristics which should be unobjectionable: - If one of the names is currently set as the display name on the contributor's GitHub profile, prefer that name. - If one of the names is used exclusively over the others in chronologically newer pull requests, prefer the newest name. - If one of the names has whitespace and the other doesn't (i.e. is username-like), such as `Foo Bar` vs `FooBar` or `foobar` or `foo-bar123`, but otherwise closely resemble one another, then prefer the human-like name. - If none of the above suffice in determining a canonical name and the contributor has some other name set on their GitHub profile, use the name from the GitHub profile. - If no name on their GitHub profile but the profile links to their personal website which unambiguously identifies their preferred name, then use that name. I'm also thinking about how to handle cases like Nick's, but that will be a project for a different PR. Basically I'd like to be able to find cases of the same person making commits that differ in name *and* email by looking at all the commits present in pull requests opened by the same GitHub user. <details> <summary>script</summary> ```toml [dependencies] anyhow = "1.0" git2 = "0.14" mailmap = "0.1" ``` ```rust use anyhow::{bail, Context, Result}; use git2::{Commit, Oid, Repository}; use mailmap::{Author, Mailmap}; use std::collections::{BTreeMap as Map, BTreeSet as Set}; use std::fmt::{self, Debug}; use std::fs; use std::path::Path; const REPO: &str = "/git/rust"; fn main() -> Result<()> { let repo = Repository::open(REPO)?; let head_oid = repo .head()? .target() .context("expected head to be a direct reference")?; let head = repo.find_commit(head_oid)?; let mailmap_path = Path::new(REPO).join(".mailmap"); let mailmap_contents = fs::read_to_string(mailmap_path)?; let mailmap = match Mailmap::from_string(mailmap_contents) { Ok(mailmap) => mailmap, Err(box_error) => bail!("{}", box_error), }; let mut history = Set::new(); let mut merges = Vec::new(); let mut authors = Set::new(); let mut emails = Map::new(); let mut all_authors = Set::new(); traverse_left(head, &mut history, &mut merges, &mut authors, &mailmap)?; while let Some((commit, i)) = merges.pop() { let right = commit.parents().nth(i).unwrap(); authors.clear(); traverse_left(right, &mut history, &mut merges, &mut authors, &mailmap)?; for author in &authors { all_authors.insert(author.clone()); if !author.email.is_empty() { emails .entry(author.email.clone()) .or_insert_with(Map::new) .entry(author.name.clone()) .or_insert_with(Set::new); } } if let Some(summary) = commit.summary() { if let Some(pr) = parse_summary(summary)? { for author in &authors { if !author.email.is_empty() { emails .get_mut(&author.email) .unwrap() .get_mut(&author.name) .unwrap() .insert(pr); } } } } } for (email, names) in emails { if names.len() > 1 { println!("<{}>", email); for (name, prs) in names { let prs = DebugSet(prs.iter().rev()); println!(" {} {:?}", name, prs); } } } eprintln!("{} commits", history.len()); eprintln!("{} authors", all_authors.len()); Ok(()) } fn traverse_left<'repo>( mut commit: Commit<'repo>, history: &mut Set<Oid>, merges: &mut Vec<(Commit<'repo>, usize)>, authors: &mut Set<Author>, mailmap: &Mailmap, ) -> Result<()> { loop { let oid = commit.id(); if !history.insert(oid) { return Ok(()); } let author = author(mailmap, &commit); let is_bors = author.name == "bors" && author.email == "bors@rust-lang.org"; if !is_bors { authors.insert(author); } let mut parents = commit.parents(); let parent = match parents.next() { Some(parent) => parent, None => return Ok(()), }; for i in 1..1 + parents.len() { merges.push((commit.clone(), i)); } commit = parent; } } fn parse_summary(summary: &str) -> Result<Option<PullRequest>> { let mut rest = None; for prefix in [ "Auto merge of #", "Merge pull request #", " Manual merge of #", "auto merge of #", "auto merge of pull req #", "rollup merge of #", "Rollup merge of #", "Rollup merge of #", "Rollup merge of ", "Merge PR #", "Merge #", "Merged #", ] { if summary.starts_with(prefix) { rest = Some(&summary[prefix.len()..]); break; } } let rest = match rest { Some(rest) => rest, None => return Ok(None), }; let end = rest.find([' ', ':']).unwrap_or(rest.len()); let number = match rest[..end].parse::<u32>() { Ok(number) => number, Err(err) => { eprintln!("{}", summary); bail!(err); } }; Ok(Some(PullRequest(number))) } fn author(mailmap: &Mailmap, commit: &Commit) -> Author { let signature = commit.author(); let name = String::from_utf8_lossy(signature.name_bytes()).into_owned(); let email = String::from_utf8_lossy(signature.email_bytes()).into_owned(); mailmap.canonicalize(&Author { name, email }) } #[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq)] struct PullRequest(u32); impl Debug for PullRequest { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { write!(formatter, "#{}", self.0) } } struct DebugSet<T>(T); impl<T> Debug for DebugSet<T> where T: Iterator + Clone, T::Item: Debug, { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { formatter.debug_set().entries(self.0.clone()).finish() } } ``` </details>
-
由 Dylan DPC 提交于
Add `<[[T; N]]>::flatten{_mut}` Adds `flatten` to convert `&[[T; N]]` to `&[T]` (and `flatten_mut` for `&mut [[T; N]]` to `&mut [T]`)
-
由 Dylan DPC 提交于
Add known-bug for #95034 Couldn't fix the issue, since I am no type theorist and inference variables in universes above U0 scare me. But I at least wanted to add a known-bug test for it. cc #95034 (does not fix)
-
由 flip1995 提交于
-
由 flip1995 提交于
-
由 bors 提交于
make windows compat_fn (crudely) work on Miri With https://github.com/rust-lang/rust/pull/95469, Windows `compat_fn!` now has to be supported by Miri to even make stdout work. Unfortunately, it relies on some outside-of-Rust linker hacks (`#[link_section = ".CRT$XCU"]`) that are rather hard to make work in Miri. So I came up with this crude hack to make this stuff work in Miri regardless. It should come at no cost for regular executions, so I hope this is okay. Cc https://github.com/rust-lang/rust/issues/95627 `@ChrisDenton`
-
由 bors 提交于
Fix `x test src/tools/error_index_generator --stage {0,1}` There were two fixes needed: 1. Use `top_stage` instead of `top_stage - 1`. There was a long and torturous comment about trying to match rustdoc's version, but it works better without the hard-coding than with (before it gave errors that `libtest.so` couldn't be found). 2. Make sure that `ci-llvm/lib` is added to LD_LIBRARY_PATH. Previously the error index would be unable to load LLVM for stage0 builds. At some point we should probably have a discussion about how rustdoc stages should be numbered; confusion between 0/1/2 has come up several times in bootstrap now. cc https://github.com/rust-lang/rust/issues/92538 Note that this is still broken when using `download-rustc = true` and `--stage 1`, but that's *really* a corner case and should affect almost no one. `--stage {0,2}` work fine with download-rustc. Fixes https://github.com/rust-lang/rust/issues/80096.
-
由 Cyborus04 提交于
-
由 bstrie 提交于
-
由 Jack O'Connor 提交于
-
由 bors 提交于
Report opaque type mismatches directly during borrowck of the function instead of within the `type_of` query. This allows us to only store a single hidden type per opaque type instead of having to store one per set of substitutions. r? `@compiler-errors` This does not affect diagnostics, because the diagnostic messages are exactly the same.
-
由 Chris Denton 提交于
This brings it inline with typical Linux defaults: https://www.man7.org/linux/man-pages/man7/pipe.7.html
-
由 Ralf Jung 提交于
-
由 Ralf Jung 提交于
-
由 bors 提交于
Allow raw lint descriptions update_lints now understands raw strings in declare_clippy_lint descriptions. Supersedes #8655 cc `@Alexendoo` thanks for addressing this so quickly. I build a little bit simpler version of your patch. I don't think it really matters what `Literal` we're trying to tokenize, since we assume later, that it is some sort of `str`. changelog: none
-
由 flip1995 提交于
update_lints now understands raw strings in declare_clippy_lint descriptions. Co-authored-by: NAlex Macleod <alex@macleod.io>
-
- 07 4月, 2022 8 次提交
-
-
由 bors 提交于
rustdoc: Early doc link resolution fixes and refactorings A subset of https://github.com/rust-lang/rust/pull/94857 that shouldn't cause perf regressions, but should fix some issues like https://rust-lang.zulipchat.com/#narrow/stream/266220-rustdoc/topic/ICE.20in.20collect_intra_doc_links.2Ers https://github.com/rust-lang/rust/pull/95290 and improve performance in cases like https://github.com/rust-lang/rust/issues/95694.
-
由 flip1995 提交于
-
由 flip1995 提交于
-
由 flip1995 提交于
-
由 flip1995 提交于
-
由 flip1995 提交于
-
由 Oli Scherer 提交于
-