summaryrefslogtreecommitdiff
path: root/tests
Commit message (Collapse)AuthorAgeFilesLines
* Auto merge of #111568 - scottmcm:undo-opt, r=WaffleLapkinbors2023-05-172-139/+49
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Stop turning transmutes into discriminant reads in mir-opt Partially reverts #109612, as after #109993 these aren't actually equivalent any more, and I'm no longer confident this was ever an improvement in the first place. Having this "simplification" meant that similar-looking code actually did somewhat different things. For example, ```rust pub unsafe fn demo1(x: std::cmp::Ordering) -> u8 { std::mem::transmute(x) } pub unsafe fn demo2(x: std::cmp::Ordering) -> i8 { std::mem::transmute(x) } ``` in nightly today is generating <https://rust.godbolt.org/z/dPK58zW18> ```llvm define noundef i8 `@_ZN7example5demo117h341ef313673d2ee6E(i8` noundef %x) unnamed_addr #0 { %0 = icmp uge i8 %x, -1 %1 = icmp ule i8 %x, 1 %2 = or i1 %0, %1 call void `@llvm.assume(i1` %2) ret i8 %x } define noundef i8 `@_ZN7example5demo217h5ad29f361a3f5700E(i8` noundef %0) unnamed_addr #0 { %x = alloca i8, align 1 store i8 %0, ptr %x, align 1 %1 = load i8, ptr %x, align 1, !range !2, !noundef !3 ret i8 %1 } ``` Which feels too different when the original code is essentially identical. --- Aside: that example is different *after* optimizations too: ```llvm define noundef i8 `@_ZN7example5demo117h341ef313673d2ee6E(i8` noundef returned %x) unnamed_addr #0 { %0 = add i8 %x, 1 %1 = icmp ult i8 %0, 3 tail call void `@llvm.assume(i1` %1) ret i8 %x } define noundef i8 `@_ZN7example5demo217h5ad29f361a3f5700E(i8` noundef returned %0) unnamed_addr #1 { ret i8 %0 } ``` so turning the `Transmute` into a `Discriminant` was arguably just making things worse, so leaving it alone instead -- and thus having less code in rustc -- seems clearly better.
| * Stop turning transmutes into discriminants in mir-optScott McMurray2023-05-142-139/+49
| | | | | | | | Partially reverts 109612, as after 109993 these aren't actually equivalent any more, and I'm no longer confident this was ever an improvement in the first place.
* | Rollup merge of #111588 - MU001999:diag/improve-e0782, r=fee1-deadDylan DPC2023-05-174-11/+28
|\ \ | | | | | | | | | | | | | | | Emits E0599 when meeting `MyTrait::missing_method` Fixes #111312
| * | Emits E0599 when meeting MyTrait::missing_methodmu0019992023-05-174-11/+28
| | |
* | | Rollup merge of #111565 - aDotInTheVoid:rdj-impl-viz, r=GuillaumeGomezDylan DPC2023-05-173-0/+81
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | rustdoc-json: Add tests for visibility of impls [Apparrently rustdoc use to give these `crate` instead of `default`](https://github.com/obi1kenobi/trustfall-rustdoc-adapter/compare/rustdoc-v24...rustdoc-v25#diff-58e57a0fc73d1353fa3a057f0fe81c6ecfd4548b429cef1aee36b1c84d8d15a4L366). CC `@obi1kenobi` The output is arguably still buggy as to weather some of these impls should be stripped, but that's a seperate issue and shouldn't block adding these tests (#111564) r? `@GuillaumeGomez`
| * | | rustdoc-json: Add tests for visibility of implsAlona Enraght-Moony2023-05-153-0/+81
| | |/ | |/|
* | | Rollup merge of #111557 - cjgillot:revert-111020, r=petrochenkovDylan DPC2023-05-173-50/+15
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Revert "Validate resolution for SelfCtor too." This reverts commit 83453408a0ce91b9e3d3ae6e7f117b1fd28b487d. That PR introduced a breaking change. Fixes https://github.com/rust-lang/rust/issues/111541 Reopens https://github.com/rust-lang/rust/issues/89868 r? `@petrochenkov`
| * | | Add test.Camille GILLOT2023-05-141-0/+15
| | | |
| * | | Revert "Validate resolution for SelfCtor too."Camille GILLOT2023-05-142-50/+0
| | |/ | |/| | | | | | | This reverts commit 83453408a0ce91b9e3d3ae6e7f117b1fd28b487d.
* | | Rollup merge of #110930 - b-naber:normalize-elaborate-drops, r=cjgillotDylan DPC2023-05-171-0/+92
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Don't expect normalization to succeed in elaborate_drops Fixes https://github.com/rust-lang/rust/issues/110682 This was exposed through the changes in https://github.com/rust-lang/rust/pull/109247, which causes more things to be inlined. Inlining can happen before monomorphization, so we can't expect normalization to succeed. In the elaborate_drops analysis we currently have [this call](https://github.com/rust-lang/rust/blob/033aa092ab23ba14cdad27073c5e37ba0eddb428/compiler/rustc_mir_dataflow/src/elaborate_drops.rs#L278) to `normalize_erasing_regions`, which ICEs when normalization fails. The types are used to infer [whether the type needs a drop](https://github.com/rust-lang/rust/blob/033aa092ab23ba14cdad27073c5e37ba0eddb428/compiler/rustc_mir_dataflow/src/elaborate_drops.rs#L374), where `needs_drop` itself [uses `try_normalize_erasing_regions`](https://github.com/rust-lang/rust/blob/033aa092ab23ba14cdad27073c5e37ba0eddb428/compiler/rustc_middle/src/ty/util.rs#L1121). ~[`instance_mir`](https://doc.rust-lang.org/stable/nightly-rustc/rustc_middle/ty/context/struct.TyCtxt.html#method.instance_mir) isn't explicit about whether it expects the instances corresponding to the `InstanceDef`s to be monomorphized (though I think in all other contexts the function is used post-monomorphization), so the use of `instance_mir` in inlining doesn't necessarily seem wrong to me.~
| * | | add testb-naber2023-05-101-0/+92
| | | |
* | | | Auto merge of #111671 - Dylan-DPC:rollup-1jy5r16, r=Dylan-DPCbors2023-05-178-2/+87
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rollup of 6 pull requests Successful merges: - #110145 (Share slice of bytes) - #111043 (Stabilize feature `cstr_is_empty`) - #111648 (Remove `LangItems::require`) - #111649 (Add derive for `core::marker::ConstParamTy`) - #111654 (Add a conversion from `&mut T` to `&mut UnsafeCell<T>`) - #111661 (Erase regions of type in `offset_of!`) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
| * \ \ \ Rollup merge of #111661 - clubby789:offset-of-erase-regions, r=compiler-errorsDylan DPC2023-05-171-0/+5
| |\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Erase regions of type in `offset_of!` Fixes #111657
| | * | | | Erase regions of type in `offset_of!`clubby7892023-05-161-0/+5
| | | | | |
| * | | | | Rollup merge of #111649 - Nilstrieb:derive-const-param-ty, r=BoxyUwUDylan DPC2023-05-177-2/+82
| |\ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add derive for `core::marker::ConstParamTy` This makes it easier to implement it for a type, just like `Copy`. `@BoxyUwU` half asked me to add it
| | * | | | | Add derive for `core::marker::ConstParamTy`Nilstrieb2023-05-167-2/+82
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This makes it easier to implement it for a type, just like `Copy`.
* | | | | | | Auto merge of #111630 - BoxyUwU:ty_const_debug_formatting, r=compiler-errorsbors2023-05-173-4/+4
|\ \ \ \ \ \ \ | |/ / / / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | debug format `Const`'s less verbosely Not user visible change only visible to people debugging const generics. Currently debug output for `ty::Const` is super verbose (even for `-Zverbose` lol), things like printing infer vars as `Infer(Var(?0c))` instead of just `?0c`, bound vars and placeholders not using `^0_1` or `!0_1` syntax respectively. With these changes its imo better but not perfect: `Const { ty: usize, kind: ^0_1 }` is still a lot for not much information. not entirely sure what to do about that so not dealing with it yet. Need to do formatting for `ConstKind::Expr` at some point too since rn it sucks (doesn't even print anything with `Display`) not gonna do that in this PR either. r? `@compiler-errors`
| * | | | | | blessBoxy2023-05-163-4/+4
| | |/ / / / | |/| | | |
* | | | | | Auto merge of #111556 - cjgillot:copy-prop-nrvo, r=oli-obkbors2023-05-1617-198/+567
|\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Merge return place with other locals in CopyProp. This reintroduces a limited form of NRVO. r? wg-mir-opt
| * | | | | | Merge return place with other locals in CopyProp.Camille GILLOT2023-05-1417-198/+567
| | |_|_|/ / | |/| | | |
* | | | | | Rollup merge of #111642 - GuillaumeGomez:only-impl-from-bodies, r=notriddleMatthias Krüger2023-05-161-0/+36
|\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [rustdoc] Only keep impl blocks from bodies Fixes https://github.com/rust-lang/rust/issues/111415. The problem was that we kept everything inside bodies whereas only impl blocks are actually accessible from outside bodies. r? `@notriddle`
| * | | | | | Add regression test for #111415Guillaume Gomez2023-05-161-0/+36
| | | | | | |
* | | | | | | Rollup merge of #111610 - bvanjoi:fix-99597, r=compiler-errorsMatthias Krüger2023-05-162-0/+30
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | fix(diagnostic): wrap parens for ref impl trait param Fixes https://github.com/rust-lang/rust/issues/99597 When parameters are an `impl_trait` which it needed to add trait, and it is a reference, add parentheses to the type of the parameter in the suggestion
| * | | | | | | fix(diagnostic): wrap parens for ref impl trait parambohan2023-05-162-0/+30
| | | | | | | |
* | | | | | | | Rollup merge of #111573 - compiler-errors:erase-re-error, r=WaffleLapkinMatthias Krüger2023-05-162-0/+47
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Erase `ReError` properly Fixes #111341 Since we check whether a type has free regions before erasing (to short circuit unnecesary folding), we need to consider `ReError` as a free region, or else we'll skip it when erasing a type that only mentions `ReError`. cc `@nnethercote`
| * | | | | | | | Erase ReError properlyMichael Goulet2023-05-142-0/+47
| |/ / / / / / /
* | | | | | | | Rollup merge of #111533 - clubby789:drop-tracking-error, r=oli-obkMatthias Krüger2023-05-162-0/+35
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Handle error body in generator layout Fixes #111468 I feel like making this query return `Option<GeneratorLayout>` might be better but had some issues with that approach
| * | | | | | | | Handle error body when in generator layoutclubby7892023-05-132-0/+35
| | |/ / / / / / | |/| | | | | |
* | | | | | | | Use error term if missing associated item in new solverMichael Goulet2023-05-163-1/+15
| |_|_|/ / / / |/| | | | | |
* | | | | | | Auto merge of #105750 - oli-obk:valtrees, r=lcnrbors2023-05-162-40/+53
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Always fall back to PartialEq when a constant in a pattern is not recursively structural-eq Right now we destructure the constant as far as we can, but with this PR we just don't take it apart anymore. This is preparatory work for moving to always using valtrees, as these will just do a single conversion of the constant to a valtree at the start, and if that fails, fall back to `PartialEq`. This removes a few cases where we emitted the `unreachable pattern` lint, because we stop looking into the constant deeply enough to detect that a constant is already covered by another pattern. Previous work: https://github.com/rust-lang/rust/pull/70743 This is groundwork towards fixing https://github.com/rust-lang/rust/issues/83085 and https://github.com/rust-lang/rust/issues/105047
| * | | | | | | Always fall back to PartialEq when a constant in a pattern is not ↵Oli Scherer2023-05-152-40/+53
| | |/ / / / / | |/| | | | | | | | | | | | | | | | | | | recursively structural-eq
* | | | | | | Rollup merge of #111614 - aDotInTheVoid:nonsense, r=cjgillotNilstrieb2023-05-161-0/+30
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add more interesting nonsense to weird-exprs.rs Some cursed things rust allows that I've ran into. [The second is taken from here](https://twitter.com/Lucretiel/status/1638929955751964679)
| * | | | | | | Add more interesting nonsense to weird-exprs.rsAlona Enraght-Moony2023-05-151-0/+30
| | | | | | | |
* | | | | | | | Rollup merge of #111602 - tmiasko:erroneous-constant-used, r=oli-obkNilstrieb2023-05-1618-220/+15
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Suppress "erroneous constant used" for constants tainted by errors When constant evaluation fails because its MIR is tainted by errors, suppress note indicating that erroneous constant was used, since those errors have to be fixed regardless of the constant being used or not. Fixes #110891.
| * | | | | | | | Suppress "erroneous constant used" for constants tainted by errorsTomasz Miąsko2023-05-1518-220/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When constant evaluation fails because its MIR is tainted by errors, suppress note indicating that erroneous constant was used, since those errors have to be fixed regardless of the constant being used or not.
* | | | | | | | | Rollup merge of #111449 - compiler-errors:recover-impl-generics-correctly, ↵Nilstrieb2023-05-162-0/+14
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | r=Nilstrieb Recover `impl<T ?Sized>` correctly Fixes #111327 r? ````@Nilstrieb```` but you can re-roll Alternatively, happy to close this if we're okay with just saying "sorry #111327 is just a poor side-effect of parser ambiguity" 🤷
| * | | | | | | | | Recover `impl<T ?Sized>` correctlyMichael Goulet2023-05-152-0/+14
| |/ / / / / / / /
* | | | | | | | | Rollup merge of #111428 - bvanjoi:fix-109250, r=NilstriebNilstrieb2023-05-168-25/+65
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | refactor(resolve): clean up the early error return caused by non-call closes https://github.com/rust-lang/rust/issues/109250 It seems no bad happened, r? ``@Nilstrieb``
| * | | | | | | | | refactor(resolve): clean up the early error return caused by non-callbohan2023-05-108-25/+65
| | |_|_|_|_|/ / / | |/| | | | | | |
* | | | | | | | | Auto merge of #111221 - compiler-errors:yeet-generalizer, r=lcnrbors2023-05-152-0/+45
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Combine three generalizer implementations Fixes #111092 Fixes #109505 This code is a bit delicate and there were subtle changes between them, so I'll leave inline comments where further inspection is needed. Regarding this comment from #109813 -- "add tests triggering all codepaths: at least the combine and the const generalizer", can't really do that now, and I don't really know how we'd get a higher-ranked const error since non-lifetime binders doesn't *really* support `for<const ..>` (it errors out when you try to use it). r? `@lcnr`
| * | | | | | | | | Tweaks and a testMichael Goulet2023-05-152-0/+45
| | |/ / / / / / / | |/| | | | | | |
* | | | | | | | | Rollup merge of #111587 - cbeuw:copy-for-deref, r=oli-obkMatthias Krüger2023-05-153-11/+34
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Custom MIR: Support `Rvalue::CopyForDeref` r? `@oli-obk` or `@tmiasko` or `@JakobDegen`
| * | | | | | | | | Address FIXMEAndy Wang2023-05-152-11/+6
| | | | | | | | | |
| * | | | | | | | | Add CopyForDeref to custom MIRAndy Wang2023-05-152-0/+28
| | |_|_|/ / / / / | |/| | | | | | |
* | | | | | | | | Rollup merge of #111578 - Zoxc:query-macro-move, r=cjgillotMatthias Krüger2023-05-151-2/+2
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Move expansion of query macros in rustc_middle to rustc_middle::query This moves the expansion of `define_callbacks!` and `define_feedable!` from `rustc_middle::ty::query` to `rustc_middle::query`. This means that types used in queries are both imported and used in `rustc_middle::query` instead of being split between these modules. It also decouples `rustc_middle::ty::query` further from `rustc_middle` which is helpful since we want to move `rustc_middle::ty::query` to the query system crates.
| * | | | | | | | | Move expansion of query macros in rustc_middle to rustc_middle::queryJohn Kåre Alsaker2023-05-151-2/+2
| |/ / / / / / / /
* | | | | | | | | Rollup merge of #111525 - scottmcm:slice-position-tweak, r=Mark-SimulacrumMatthias Krüger2023-05-152-7/+27
|\ \ \ \ \ \ \ \ \ | |_|/ / / / / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Stop checking for the absence of something that doesn't exist A couple of codegen tests are doing ``` // CHECK-NOT: slice_index_len_fail ``` However, that function no longer exists: [the only places](https://github.com/search?q=repo%3Arust-lang%2Frust+slice_index_len_fail&type=code) it occurs in the repo are in those tests. So this PR updates the tests to check for the absense of the functions that are actually used today to panic for out-of-bounds indexing.
| * | | | | | | | Stop checking for the absense of something that doesn't existScott McMurray2023-05-122-7/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A couple of codegen tests are doing ``` // CHECK-NOT: slice_index_len_fail ``` However, that function no longer exists: [the only places](https://github.com/search?q=repo%3Arust-lang%2Frust+slice_index_len_fail&type=code) it occurs in the repo are in those tests. So this PR updates the tests to check for the absense of the functions that are actually used today to panic for out-of-bounds indexing.
* | | | | | | | | Rollup merge of #111531 - chenyukang:yukang-fix-111416-ice, r=compiler-errorsMatthias Krüger2023-05-152-0/+21
|\ \ \ \ \ \ \ \ \ | |_|/ / / / / / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix ice caused by shorthand fields in NoFieldsForFnCall Fixes #111416
| * | | | | | | | fmtyukang2023-05-132-2/+1
| | | | | | | | |