-
Notifications
You must be signed in to change notification settings - Fork 12.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rollup of 9 pull requests #73206
Rollup of 9 pull requests #73206
Conversation
Fixes rust-lang#72839 In PR rust-lang#72621, trait selection was modified to no longer bail out early when an error type was encountered. This allowed us treat `ty::Error` as `Sized`, causing us to avoid emitting a spurious "not sized" error after a type error had already occured. However, this means that we may now try to match an impl candidate against the error type. Since the error type will unify with almost anything, this can cause us to infinitely recurse (eventually triggering an overflow) when trying to verify certain `where` clauses. This commit causes us to skip generating any impl candidates when an error type is involved.
Previously, we would parse `struct Foo where;` and `struct Foo;` identically, leading to an 'empty' `where` clause being omitted during pretty printing. This will cause us to lose spans when proc-macros involved, since we will have a collected `where` token that does not appear in the pretty-printed item. We now explicitly track the presence of a `where` token during parsing, so that we can distinguish between `struct Foo where;` and `struct Foo;` during pretty-printing
Fixed failing test-cases Remove noisy suggestion of hash_map rust-lang#72642 Fixed failing test-cases
This commit adds a test of the improper ctypes lint, checking that return type are normalized bethat return types are normalized before being checked for FFI-safety, and that transparent newtype wrappers are FFI-safe if the type being wrapped is FFI-safe. Signed-off-by: David Wood <david@davidtw.co>
This commit moves the check that skips unit return types to after where the return type has been normalized - therefore ensuring that FFI-safety lints are not emitted for types which normalize to unit. Signed-off-by: David Wood <david@davidtw.co>
This commit ensures that if a `repr(transparent)` newtype's only non-zero-sized field is FFI-safe then the newtype is also FFI-safe. Previously, ZSTs were ignored for the purposes of linting FFI-safety in transparent structs - thus, only the single non-ZST would be checked for FFI-safety. However, if the non-zero-sized field is a generic parameter, and is substituted for a ZST, then the type would be considered FFI-unsafe (as when every field is thought to be zero-sized, the type is considered to be "composed only of `PhantomData`" which is FFI-unsafe). In this commit, for transparent structs, the non-zero-sized field is identified (before any substitutions are applied, necessarily) and then that field's type (now with substitutions) is checked for FFI-safety (where previously it would have been skipped for being zero-sized in this case). To handle the case where the non-zero-sized field is a generic parameter, which is substituted for `()` (a ZST), and is being used as a return type - the `FfiUnsafe` result (previously `FfiPhantom`) is caught and silenced. Signed-off-by: David Wood <david@davidtw.co>
…omatsakis Add windows group to triagebot r? @nikomatsakis
resolve: Do not suggest imports from the same module in which we are resolving Based on the idea from rust-lang#72623.
…-transparent-improper-ctypes, r=varkor improper ctypes: normalize return types and transparent structs Fixes rust-lang#66202. See each commit individually (except the first which adds a test) for more detailed explanations on the changes made. In summary, this PR ensures that return types are normalized before being checked for FFI-safety, and that transparent newtype wrappers are FFI-safe if the type being wrapped is FFI-safe (often true previously, but not if, after substitution, all types in a transparent newtype were zero sized).
…r=pnkfelix normalize adt fields during structural match checking fixes rust-lang#72896 currently only fixes the issue itself and compiles stage 1 libs. I believe we have to use something else to normalize the adt fields here, as I expect some partially resolved adts to cause problems 🤔 stage 1 libs and the test itself pass, not sure about the rest... Will spend some more time looking into it tomorrow. r? @pnkfelix cc @eddyb
…ebank Don't create impl candidates when obligation contains errors Fixes rust-lang#72839 In PR rust-lang#72621, trait selection was modified to no longer bail out early when an error type was encountered. This allowed us treat `ty::Error` as `Sized`, causing us to avoid emitting a spurious "not sized" error after a type error had already occured. However, this means that we may now try to match an impl candidate against the error type. Since the error type will unify with almost anything, this can cause us to infinitely recurse (eventually triggering an overflow) when trying to verify certain `where` clauses. This commit causes us to skip generating any impl candidates when an error type is involved.
…tion, r=davidtwco Remove noisy suggestion of hash_map Remove noisy suggestion of hash_map rust-lang#72642 fixes rust-lang#72642
Add regression test for const generic ICE in rust-lang#72819 Closes rust-lang#72819
…tle-span-gone, r=ecstatic-morse Don't lose empty `where` clause when pretty-printing Previously, we would parse `struct Foo where;` and `struct Foo;` identically, leading to an 'empty' `where` clause being omitted during pretty printing. This will cause us to lose spans when proc-macros involved, since we will have a collected `where` token that does not appear in the pretty-printed item. We now explicitly track the presence of a `where` token during parsing, so that we can distinguish between `struct Foo where;` and `struct Foo;` during pretty-printing
…rochenkov Reoder order in which MinGW libs are linked to fix recent breakage Recent upstream mingw-w64 changes made libmsvcrt depend on libmingwex breaking compilation in some cases when using **external** MinGW. Applying this change to the master fixes nightly and stage{1,2} build. For stage0 one has to export `RUSTFLAGS_BOOTSTRAP='-C link-arg=-lmsvcrt'` until this PR lands in bootstrap compiler. Therefore I'm humbly asking to also backport it to the beta and update bootstrap compiler.
@bors r+ rollup=never p=9 |
@bors retry |
⌛ Testing commit 2b8f1ec with merge 67a44cb9490ccf486fe73529ec972bcc058c58de... |
💔 Test failed - checks-azure |
closing the tree due to the wasm failure @bors treeclosed p=1000 |
@bors treeclosed=1000 |
@bors treeclosed- |
@bors treeclosed=1000 |
@bors retry |
☀️ Test successful - checks-azure |
Error: Invalid
Please file an issue on GitHub at triagebot if there's a problem with this bot, or reach out on #t-infra on Zulip. |
Error: Invalid
Please file an issue on GitHub at triagebot if there's a problem with this bot, or reach out on #t-infra on Zulip. |
Error: Invalid
Please file an issue on GitHub at triagebot if there's a problem with this bot, or reach out on #t-infra on Zulip. |
Successful merges:
where
clause when pretty-printing #73157 (Don't lose emptywhere
clause when pretty-printing)Failed merges:
r? @ghost