about summary refs log tree commit diff
path: root/src/test
AgeCommit message (Collapse)AuthorLines
2022-05-22Rollup merge of #97206 - jackh726:issue-73154, r=nikomatsakisJack Huey-200/+166
Do leak check after function pointer coercion cc #73154 I still need to clean diagnostics just a tad, but figured I would put this up anyways. This change is made in order to make match arm coercion order-independent. Basically, any time we do function pointer coercion, we follow it by doing a leak check. This is necessary because the LUB code doesn't handler higher-ranked things correctly, leading us to "coerce", but use the wrong type. A proper fix is to actually fix that code (so the type returned by `unify_and` is a supertype of both `a` and `b` if `Ok`). However, that requires a more in-depth fix, likely heavily overlapping with the new subtyping changes. Here, I've been conservative and error early if we generate unsatisfiable constraints. Note, this should *mostly* only affect NLL, since migrate mode falls back to the LUB implementation (followed by leak check), whereas NLL only does sub. There could be other coercion code that has an order-dependence where a leak check in the coercion code might be useful. However, this is more of a spot-fix for #73154 than a "permanent" fix, since we likely want to go the other way long-term, and allow this pattern without error. r? `@nikomatsakis`
2022-05-22Rollup merge of #97043 - c410-f3r:z-errors, r=petrochenkovJack Huey-0/+0
Move some tests to more reasonable directories r? `@petrochenkov`
2022-05-22Do leak check after function ptr coercionJack Huey-200/+166
2022-05-22Auto merge of #97177 - oli-obk:const-stability, r=davidtwcobors-120/+157
Implement proper stability check for const impl Trait, fall back to unstable const when undeclared Continuation of #93960 `@jhpratt` it looks to me like the test was simply not testing for the failure you were looking for? Your checks actually do the right thing for const traits?
2022-05-22Rollup merge of #97236 - cjgillot:recover-lifetime-res, r=jackh726Yuki Okushi-0/+83
Recover when resolution did not resolve lifetimes. This can happen for items inside a foreign fn's body, which are not visited at all. Fixes https://github.com/rust-lang/rust/issues/97193 Fixes https://github.com/rust-lang/rust/issues/97194
2022-05-21Auto merge of #96515 - lcnr:user-types-in-pat, r=nikomatsakisbors-84/+239
correctly deal with user type ascriptions in pat supersedes #93856 `thir::PatKind::AscribeUserType` previously resulted in `CanonicalUserTypeAnnotations` where the inferred type already had a subtyping relation according to `variance` to the `user_ty`. The bug can pretty much be summarized as follows: - during mir building - `user_ty -> inferred_ty`: considers variance - `StatementKind::AscribeUserType`: `inferred_ty` is the type of the place, so no variance needed - during mir borrowck - `user_ty -> inferred_ty`: does not consider variance - `StatementKind::AscribeUserType`: applies variance This mostly worked fine. The lifetimes in `inferred_ty` were only bound by its relation to `user_ty` and to the `place` of `StatementKind::AscribeUserType`, so it doesn't matter where exactly the subtyping happens. It does however matter when having higher ranked subtying. At this point the place where the subtyping happens is forced, causing this mismatch between building and borrowck to result in unintended errors. cc #96514 which is pretty much the same issue r? `@nikomatsakis`
2022-05-21update nll testslcnr-0/+47
2022-05-21Rollup merge of #97237 - oberien:patch-1, r=Dylan-DPCGuillaume Gomez-1/+27
Add some more weird-exprs Continuing from https://github.com/rust-lang/rust/pull/86713 (which stalled due to a thinking emoji), I'd like to "improve" the `weird-exprs.rs`-file (as I can't reopen that PR).
2022-05-21Recover when resolution did not resolve lifetimes.Camille GILLOT-0/+83
2022-05-21Auto merge of #97239 - jhpratt:remove-crate-vis, r=joshtriplettbors-342/+108
Remove `crate` visibility modifier FCP to remove this syntax is just about complete in #53120. Once it completes, this should be merged ASAP to avoid merge conflicts. The first two commits remove usage of the feature in this repository, while the last removes the feature itself.
2022-05-21update mir dumpslcnr-38/+38
2022-05-21update mir user type printing and apparently fix an ICElcnr-46/+8
2022-05-21correctly deal with user type ascriptions in patlcnr-0/+146
2022-05-21Remove `crate` visibility modifier in libs, testsJacob Pratt-342/+108
2022-05-21Auto merge of #96923 - eholk:fix-fake-read, r=nikomatsakisbors-0/+41
Drop Tracking: Implement `fake_read` callback This PR updates drop tracking's use of `ExprUseVisitor` so that we treat `fake_read` events as borrows. Without doing this, we were not handling match expressions correctly, which showed up as a breakage in the `addassign-yield.rs` test. We did not previously notice this because we still had rather large temporary scopes that we held borrows for, which changed in #94309. This PR also includes a variant of the `addassign-yield.rs` test case to make sure we continue to have correct behavior here with drop tracking. r? `@nikomatsakis`
2022-05-21Add back thinking emojioberien-6/+9
2022-05-21Add a function returning itself to weird-exprsJaro Fietz-0/+14
2022-05-21Add unicode identifier to weird-exprsJaro Fietz-0/+9
Use unicode identifiers and a unicode emoji in weird-exprs.rs
2022-05-21Make the most special expression even more specialJaro Fietz-1/+1
Add or-pattern syntax in argument position
2022-05-20Auto merge of #97224 - matthiaskrgr:rollup-it5nw68, r=matthiaskrgrbors-9/+208
Rollup of 7 pull requests Successful merges: - #97109 (Fix misleading `cannot infer type for type parameter` error) - #97187 (Reverse condition in Vec::retain_mut doctest) - #97201 (Fix typo) - #97203 (Minor tweaks to rustc book summary formatting.) - #97208 (Do not emit the lint `unused_attributes` for *inherent* `#[doc(hidden)]` associated items) - #97215 (Add complexity estimation of iterating over HashSet and HashMap) - #97220 (Add regression test for#81827) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
2022-05-20Rollup merge of #97220 - JohnTitor:issue-81827, r=compiler-errorsMatthias Krüger-0/+46
Add regression test for#81827 Closes #81827 r? `@compiler-errors`
2022-05-20Rollup merge of #97208 - fmease:fix-issue-97205, r=oli-obkMatthias Krüger-9/+35
Do not emit the lint `unused_attributes` for *inherent* `#[doc(hidden)]` associated items Fixes #97205 (embarrassing oversight from #96008). `@rustbot` label A-lint
2022-05-20Rollup merge of #97109 - ↵Matthias Krüger-0/+127
TaKO8Ki:fix-misleading-cannot-infer-type-for-type-parameter-error, r=oli-obk Fix misleading `cannot infer type for type parameter` error closes #93198
2022-05-21Add regression test for #81827Yuki Okushi-0/+46
2022-05-20Auto merge of #96833 - cjgillot:ast-lifetimes-single, r=petrochenkovbors-36/+98
Lint single-use lifetimes during AST resolution This PR rewrites `single_use_lifetime` and `unused_lifetime` lints to be based on the AST. We have more information at our disposal, so we can reduce the amount of false positives. Remaining false positive: single-use lifetimes in argument-position impl-trait. I'm waiting for https://github.com/rust-lang/rust/issues/96529 to be fixed to have a clean and proper solution here. Closes https://github.com/rust-lang/rust/issues/54079 Closes https://github.com/rust-lang/rust/issues/55057 Closes https://github.com/rust-lang/rust/issues/55058 Closes https://github.com/rust-lang/rust/issues/60554 Closes https://github.com/rust-lang/rust/issues/69952 r? `@petrochenkov`
2022-05-20report ambiguous type parameters when their parents are impl or fnTakayuki Maeda-0/+90
fix ci error emit err for `impl_item`
2022-05-20Move testsCaio-0/+0
2022-05-20Auto merge of #97211 - GuillaumeGomez:rollup-jul7x7e, r=GuillaumeGomezbors-35/+51
Rollup of 6 pull requests Successful merges: - #96565 (rustdoc: show implementations on `#[fundamental]` wrappers) - #97179 (Add new lint to enforce whitespace after keywords) - #97185 (interpret/validity: separately control checking numbers for being init and non-ptr) - #97188 (Remove unneeded null pointer asserts in ptr2int casts) - #97189 (Update .mailmap) - #97192 (Say "last" instead of "rightmost" in the documentation for `std::str:rfind`) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
2022-05-20Rollup merge of #97185 - RalfJung:number-validity, r=oli-obkGuillaume Gomez-35/+35
interpret/validity: separately control checking numbers for being init and non-ptr This lets Miri control this in a more fine-grained way. r? `@oli-obk`
2022-05-20Rollup merge of #96565 - notriddle:notriddle/impl-box, r=camelidGuillaume Gomez-0/+16
rustdoc: show implementations on `#[fundamental]` wrappers Fixes #92940
2022-05-20Lint single-use-lifetimes on the AST.Camille GILLOT-36/+98
2022-05-20update error messagelcnr-7/+7
2022-05-20rewrite `ensure_drop_params_and_item_params_correspond`lcnr-45/+35
2022-05-20Do not warn on inherent doc(hidden) assoc itemsLeón Orell Valerian Liehr-9/+35
2022-05-20Auto merge of #97029 - eholk:drop-tracking-yielding-in-match-guard, ↵bors-0/+12
r=nikomatsakis generator_interior: Count match pattern bindings as borrowed for the whole guard expression The test case `yielding-in-match-guard.rs` was failing with `-Zdrop-tracking` enabled. The reason is that the copy of a local (`y`) was not counted as a borrow in typeck, while MIR did consider this as borrowed. The correct thing to do here is to count pattern bindings are borrowed for the whole guard. Instead, what we were doing is to record the type at the use site of the variable and check if the variable comes from a borrowed pattern. Due to the fix for #57017, we were considering too small of a scope for this variable, which meant it was not counted as borrowed. Because we now unconditionally record the borrow, rather than only for bindings that are used, this PR is also able to remove a lot of the logic around match bindings that was there before. r? `@nikomatsakis`
2022-05-20Auto merge of #97027 - cuviper:yesalias-refcell, r=thomccbors-0/+50
Use pointers in `cell::{Ref,RefMut}` to avoid `noalias` When `Ref` and `RefMut` were based on references, they would get LLVM `noalias` attributes that were incorrect, because that alias guarantee is only true until the guard drops. A `&RefCell` on the same value can get a new borrow that aliases the previous guard, possibly leading to miscompilation. Using `NonNull` pointers in `Ref` and `RefCell` avoids `noalias`. Fixes the library side of #63787, but we still might want to explore language solutions there.
2022-05-19Borrow guard patterns for the body of the guardEric Holk-9/+0
2022-05-19Revert "Count copies of locals as borrowed temporaries"Eric Holk-13/+1
This reverts commit 0d270b5e9f48268735f9a05462df65c9d1039855.
2022-05-19Count copies of locals as borrowed temporariesEric Holk-1/+13
2022-05-19Further reduce test caseEric Holk-9/+5
Thanks to @tmiasko for this one!
2022-05-19Add drop tracking version of yielding-in-match-guard.rsEric Holk-0/+25
2022-05-19bless 32bitRalf Jung-11/+11
2022-05-19interpret/validity: separately control checking numbers for being init and ↵Ralf Jung-24/+24
non-ptr
2022-05-19Rollup merge of #97171 - JohnTitor:issue-88119, r=compiler-errorsDylan DPC-0/+35
Add regression test for #88119 Closes #88119
2022-05-19Rollup merge of #97169 - gimbles:u32-diagnostic, r=petrochenkovDylan DPC-18/+9
Improve `u32 as char` cast diagnostic Fixes #97160
2022-05-19Fix up testsOli Scherer-4/+83
2022-05-19Improve u32 to char diagnosticgimbles-18/+9
2022-05-19Stable const things need a stability attributeOli Scherer-4/+7
2022-05-19Move check to existing passJacob Pratt-98/+36
This alters the diagnostics a bit, as the trait method is still stable. The only thing this check does is ensure that compilation fails if a trait implementation is declared const-stable.
2022-05-19Proper const stability check, default to unstableJacob Pratt-73/+90
Rather than deferring to const eval for checking if a trait is const, we now check up-front. This allows the error to be emitted earlier, notably at the same time as other stability checks. Also included in this commit is a change of the default const stability level to UNstable. Previously, an item that was `const` but did not explicitly state it was unstable was implicitly stable.