about summary refs log tree commit diff
path: root/src
AgeCommit message (Collapse)AuthorLines
2020-02-02Clean up E0263 explanationGuillaume Gomez-4/+13
2020-01-27Auto merge of #68447 - estebank:sugg-type-param, r=petrochenkovbors-66/+178
Suggest defining type parameter when appropriate ``` error[E0412]: cannot find type `T` in this scope --> file.rs:3:12 | 3 | impl Trait<T> for Struct {} | - ^ not found in this scope | | | help: you might be missing a type parameter: `<T>` ``` Fix #64298.
2020-01-27Auto merge of #68122 - Centril:stabilize-transparent-enums, r=petrochenkovbors-133/+33
Stabilize `#[repr(transparent)]` on `enum`s in Rust 1.42.0 # Stabilization report The following is the stabilization report for `#![feature(transparent_enums)]`. Tracking issue: https://github.com/rust-lang/rust/issues/60405 [Version target](https://forge.rust-lang.org/#current-release-versions): 1.42 (2020-01-30 => beta, 2020-03-12 => stable). ## User guide A `struct` with only a single non-ZST field (let's call it `foo`) can be marked as `#[repr(transparent)]`. Such a `struct` has the same layout and ABI as `foo`. Here, we also extend this ability to `enum`s with only one variant, subject to the same restrictions as for the equivalent `struct`. That is, you can now write: ```rust #[repr(transparent)] enum Foo { Bar(u8) } ``` which, in terms of layout and ABI, is equivalent to: ```rust #[repr(transparent)] struct Foo(u8); ``` ## Motivation This is not a major feature that will unlock new and important use-cases. The utility of `repr(transparent)` `enum`s is indeed limited. However, there is still some value in it: 1. It provides conceptual simplification of the language in terms of treating univariant `enum`s and `struct`s the same, as both are product types. Indeed, languages like Haskell only have `data` as the only way to construct user-defined ADTs in the language. 2. In rare occasions, it might be that the user started out with a univariant `enum` for whatever reason (e.g. they thought they might extend it later). Now they want to make this `enum` `transparent` without breaking users by turning it into a `struct`. By lifting the restriction here, now they can. ## Technical specification The reference specifies [`repr(transparent)` on a `struct`](https://doc.rust-lang.org/nightly/reference/type-layout.html#the-transparent-representation) as: > ### The transparent Representation > > The `transparent` representation can only be used on `struct`s that have: > - a single field with non-zero size, and > - any number of fields with size 0 and alignment 1 (e.g. `PhantomData<T>`). > > Structs with this representation have the same layout and ABI as the single non-zero sized field. > > This is different than the `C` representation because a struct with the `C` representation will always have the ABI of a `C` `struct` while, for example, a struct with the `transparent` representation with a primitive field will have the ABI of the primitive field. > > Because this representation delegates type layout to another type, it cannot be used with any other representation. Here, we amend this to include univariant `enum`s as well with the same static restrictions and the same effects on dynamic semantics. ## Tests All the relevant tests are adjusted in the PR diff but are recounted here: - `src/test/ui/repr/repr-transparent.rs` checks that `repr(transparent)` on an `enum` must be univariant, rather than having zero or more than one variant. Restrictions on the fields inside the only variants, like for those on `struct`s, are also checked here. - A number of codegen tests are provided as well: - `src/test/codegen/repr-transparent.rs` (the canonical test) - `src/test/codegen/repr-transparent-aggregates-1.rs` - `src/test/codegen/repr-transparent-aggregates-2.rs` - `src/test/codegen/repr-transparent-aggregates-3.rs` - `src/test/ui/lint/lint-ctypes-enum.rs` tests the interactions with the `improper_ctypes` lint. ## History - 2019-04-30, RFC https://github.com/rust-lang/rfcs/pull/2645 Author: @mjbshaw Reviewers: The Language Team This is the RFC that proposes allowing `#[repr(transparent)]` on `enum`s and `union`. - 2019-06-11, PR https://github.com/rust-lang/rust/pull/60463 Author: @mjbshaw Reviewers: @varkor and @rkruppe The PR implements the RFC aforementioned in full. - 2019, PR https://github.com/rust-lang/rust/pull/67323 Author: @Centril Reviewers: @davidtwco The PR reorganizes the static checks taking advantage of the fact that `struct`s and `union`s are internally represented as ADTs with a single variant. - This PR stabilizes `transparent_enums`. ## Related / possible future work The remaining work here is to figure out the semantics of `#[repr(transparent)]` on `union`s and stabilize those. This work continues to be tracked in https://github.com/rust-lang/rust/issues/60405.
2020-01-26Suggest defining type parameter when appropriateEsteban Küber-66/+178
``` error[E0412]: cannot find type `T` in this scope --> file.rs:3:12 | 3 | impl Trait<T> for Struct {} | - ^ not found in this scope | | | help: you might be missing a type parameter: `<T>` ``` Fix #64298.
2020-01-26rustc_span: return an impl Iterator instead of a Vec from macro_backtrace.Eduard-Mihai Burtescu-23/+25
2020-01-26rustc_span: replace MacroBacktrace with ExpnData.Eduard-Mihai Burtescu-28/+13
2020-01-26rustc_span: move pretty syntax from macro_backtrace to ExpnKind::descr.Eduard-Mihai Burtescu-26/+17
2020-01-26Don't use ExpnKind::descr to get the name of a bang macro.Eduard-Mihai Burtescu-18/+31
2020-01-26Auto merge of #68545 - estebank:verbose-bound-display, r=petrochenkovbors-19/+23
Use better bound names in `-Zverbose` mode r? @petrochenkov as per https://github.com/rust-lang/rust/pull/67951/files#r365524015
2020-01-26Auto merge of #68522 - estebank:impl-trait-sugg-2, r=oli-obkbors-23/+262
Further improve `impl Trait`/`dyn Trait` suggestions After reading [_Returning Trait Objects_ by Bryce Fisher-Fleig](https://bryce.fisher-fleig.org/blog/returning-trait-objects/), [I noticed that](https://www.reddit.com/r/rust/comments/esueur/returning_trait_objects/ffczl4k/) #68195 had a few bugs due to not ignoring `ty::Error`. - Account for `ty::Error`. - Account for `if`/`else` and `match` blocks when pointing at return types and referencing their types. - Increase the multiline suggestion output from 6 lines to 20.
2020-01-26Auto merge of #68517 - oli-obk:spaces2, r=nagisabors-36/+35
Don't use spaces before type ascription like colons Split out of #67133 to make that PR simpler r? @eddyb
2020-01-26Auto merge of #68031 - Marwes:fold_list, r=estebankbors-17/+35
perf: Avoid creating a SmallVec if nothing changes during a fold Not sure if this helps but in theory it should be less work than what the current micro optimization does for `ty::Predicate` lists. (It would explain the overhead I am seeing from `perf`.)
2020-01-25Auto merge of #68546 - JohnTitor:rollup-znuot4b, r=JohnTitorbors-14/+106
Rollup of 5 pull requests Successful merges: - #68485 (add a test for #60976) - #68498 (Add some type-alias-impl-trait regression tests) - #68514 (Use Self instead of self return type) - #68534 (Update submodules to rust-lang) - #68540 (clean up error codes E0229 and E0261) Failed merges: r? @ghost
2020-01-26Rollup merge of #68540 - GuillaumeGomez:err-codes-cleanup-e0229-e0261, ↵Yuki Okushi-4/+5
r=Dylan-DPC clean up error codes E0229 and E0261 r? @Dylan-DPC
2020-01-26Rollup merge of #68514 - lzutao:fmt-Self, r=Dylan-DPCYuki Okushi-10/+10
Use Self instead of self return type
2020-01-26Rollup merge of #68498 - Aaron1011:tait-regression-tests, r=CentrilYuki Okushi-0/+81
Add some type-alias-impl-trait regression tests Fixes #57611 Fixes #57807
2020-01-26Rollup merge of #68485 - kingslef:fix/test-60976, r=nikomatsakisYuki Okushi-0/+10
add a test for #60976 The test fails on 1.36.0 but passes on master. Huge thanks for @hellow554 actually digging out the minimized version of the repro. Fixes #60976.
2020-01-25Use better bound names in `-Zverbose` modeEsteban Küber-19/+23
2020-01-25Revert suggestion window size changeEsteban Küber-5/+3
2020-01-25Auto merge of #68530 - estebank:abolish-ice, r=petrochenkovbors-6/+7
Do not ICE on multipart suggestions touching multiple files When encountering a multipart suggestion with spans belonging to different contexts, skip that suggestion. Fix #68449. Similar to #68256.
2020-01-25clean up error codeS E0229 and E0261Guillaume Gomez-4/+5
2020-01-25Auto merge of #68525 - tlively:emcc-codegen-sigsegv-66308, r=alexcrichtonbors-0/+8
Update LLVM to fix crash on Emscripten targets Fixes #66308 (for real this time). r? @alexcrichton
2020-01-25Auto merge of #68516 - oli-obk:spaces, r=eddybbors-7/+13
Render const pointers in MIR more compactly Split out from #67133 to make that PR simpler cc @RalfJung r? @eddyb
2020-01-25Don't use spaces before type ascription like colonsOliver Scherer-36/+35
2020-01-25Auto merge of #68448 - maurer:dyn-cdylib, r=alexcrichtonbors-24/+66
rustc: Allow cdylibs to link against dylibs Previously, rustc mandated that cdylibs could only link against rlibs as dependencies (not dylibs). This commit disables that restriction and tests that it works in a simple case. I don't have a windows rustc dev environment, so I guessed at the MSVC test code, I'm hoping the CI can run that for me. Additionally, we might want to consider emitting (through cargo or rustc) some metadata to help C users of a cdylib figure out where all the dylibs they need are. I don't think that should be needed to land this change, as it will still be usable by homogeneous build systems without it. My new test was templated off the `tests/run-make-fulldeps/cdylib` test. It seemed more appropriate to have it as a separate test, since both foo.rs and bar.rs would need to be replicated to make that test cover both cases, but I can do that if it would be preferred. If I'm doing anything out of order/process, please let me know; this is only my second change to rustc and the prior one was trivial. r? alexcrichton
2020-01-25Auto merge of #68269 - csmoe:temp, r=estebankbors-6/+75
Suggest to shorten temporary borrow from raw pointer Closes https://github.com/rust-lang/rust/issues/65436 r? @estebank cc @tmandry
2020-01-24Add some type-alias-impl-trait regression testsAaron Hill-0/+81
Fixes #57611 Fixes #57807
2020-01-24Do not ICE on multipart suggestions touching multiple filesEsteban Küber-6/+7
When encountering a multipart suggestion with spans belonging to different contexts, skip that suggestion.
2020-01-25Rollup merge of #68515 - Wind-River:master_2020, r=alexcrichtonYuki Okushi-5/+39
Support feature process_set_argv0 for VxWorks r? @alexcrichton
2020-01-25Rollup merge of #68511 - tmiasko:ignore-license, r=alexcrichtonYuki Okushi-38/+1
Remove unused ignore-license directives The tidy check was removed in rust-lang/rust#53617
2020-01-25Rollup merge of #68509 - GuillaumeGomez:clean-up-err-codes-e0223-e0225, ↵Yuki Okushi-3/+7
r=Dylan-DPC Clean up error codes E0223 and E0225 explanations r? @Dylan-DPC
2020-01-25Rollup merge of #68504 - tmiasko:check-pass, r=alexcrichtonYuki Okushi-31/+31
Use check-pass mode for lint tests and nll tests Helps with issue #62277.
2020-01-25Rollup merge of #68374 - gitletH:patch-1, r=nikomatsakisYuki Okushi-1/+1
Fix invalid link to the C++ Exception Handling ABI documentation The original link is longer valid(404). I am assuming it's meant to be pointed to the Itanium C++ Exception Handling ABI documentation.
2020-01-25Rollup merge of #68111 - varkor:const-generics-type_name, r=oli-obkYuki Okushi-12/+52
Print constants in `type_name` for const generics Fixes https://github.com/rust-lang/rust/issues/65372. r? @oli-obk as there may have been a deliberate decision not to in https://github.com/rust-lang/rust/commit/5b9848912a85e28d000602fc2e81bad9c2f2a981#diff-4ed1a72c0bfdf17be769ed520932cd02R80.
2020-01-24review commentsEsteban Küber-16/+14
2020-01-24Apply `resolve_vars_if_possible` to returned types for more accurate suggestionsEsteban Küber-8/+12
2020-01-24Increase suggestion code window from 6 lines to 20Esteban Küber-5/+12
2020-01-24New fixThomas Lively-0/+0
2020-01-24Use more accurate return path spansEsteban Küber-42/+91
No longer suggest `Box::new(if foo { Type1 } else { Type2 })`, instead suggesting `if foo { Box::new(Type1) } else { Box::new(Type2) }`.
2020-01-24Add opt-level=0 to testThomas Lively-1/+1
2020-01-24Update LLVM to fix crash on Emscripten targetsThomas Lively-0/+8
Adds a small Rust regression test for #66308. r? @alexcrichton
2020-01-24Support feature process_set_argv0 for VxWorksBaoshanPang-5/+39
2020-01-24Auto merge of #68494 - matthewjasper:internal-static-ptrs, r=nikomatsakisbors-33/+89
Make pointers to statics internal Closes #67611 r? @nikomatsakis
2020-01-24Use Self instead of self return typeLzu Tao-10/+10
2020-01-24Print constants in `type_name` for const genericsvarkor-12/+52
2020-01-24Render const pointers in MIR more compactlyOliver Scherer-7/+13
2020-01-24Auto merge of #68414 - michaelwoerister:share-drop-glue, r=alexcrichtonbors-160/+212
Also share drop-glue when compiling with -Zshare-generics (i.e. at opt-level=0) This PR adds drop-glue to the set of monomorphizations that can be shared across crates via `-Zshare-generics`. This version of the PR might have detrimental effects on performance as it makes lots of stuff dependent on a single query results (`upstream_monomorphizations_for(def_id_of_drop_in_place)`). That should be fixable but let's do a perf run first. Potentially fixes issue https://github.com/rust-lang/rust/issues/64140. (cc @alexcrichton) The changes here are related to @matthewjasper's https://github.com/rust-lang/rust/pull/67332 but should be mostly orthogonal. r? @ghost
2020-01-24Clean up error codes E0223 and E0225 explanationsGuillaume Gomez-3/+7
2020-01-24Rollup merge of #68500 - Mark-Simulacrum:fix-bootstrap-clearing, r=alexcrichtonTyler Mandry-1/+1
Clear out std, not std tools This was a typo that slipped in, and meant that we were still not properly clearing out std. This is basically #67760 but actually correct...
2020-01-24Rollup merge of #68479 - Tyg13:unused_parens_return, r=CentrilTyler Mandry-27/+50
Implement `unused_parens` for block return values Fixes #68386 r? @Centril