about summary refs log tree commit diff
path: root/compiler/rustc_const_eval
AgeCommit message (Collapse)AuthorLines
2022-09-16Revert "Revert "Rollup merge of #98582 - oli-obk:unconstrained_opaque_type, ↵Oli Scherer-1/+13
r=estebank"" This reverts commit 4a742a691e7dd2522bad68b86fe2fd5a199d5561.
2022-09-16do const trait method bounds check later in rustc_const_evalDeadbeef-2/+42
2022-09-15Only enable the let_else feature on bootstrapest31-1/+1
On later stages, the feature is already stable. Result of running: rg -l "feature.let_else" compiler/ src/librustdoc/ library/ | xargs sed -s -i "s#\\[feature.let_else#\\[cfg_attr\\(bootstrap, feature\\(let_else\\)#"
2022-09-14address review againb-naber-12/+15
2022-09-13Address code review commentsEric Holk-7/+6
2022-09-13rebaseb-naber-1/+1
2022-09-13fixes/working versionb-naber-23/+32
2022-09-13use ty::Unevaluated<'tcx, ()> in type systemb-naber-13/+19
2022-09-12Rename some variantsMichael Goulet-1/+1
2022-09-12Construct dyn* during const interpMichael Goulet-1/+12
2022-09-12dyn* through more typechecking and MIREric Holk-0/+11
2022-09-12Plumb dyn trait representation through ty::DynamicEric Holk-3/+3
2022-09-10Auto merge of #101483 - oli-obk:guaranteed_opt, r=fee1-deadbors-27/+24
The `<*const T>::guaranteed_*` methods now return an option for the unknown case cc https://github.com/rust-lang/rust/issues/53020#issuecomment-1236932443 I chose `0` for "not equal" and `1` for "equal" and left `2` for the unknown case so backends can just forward to raw pointer equality and it works ✨ r? `@fee1-dead` or `@lcnr` cc `@rust-lang/wg-const-eval`
2022-09-09The `<*const T>::guaranteed_*` methods now return an option for the unknown caseOli Scherer-27/+24
2022-09-08Auto merge of #101437 - compiler-errors:erase-normalize-ordering, r=tmandrybors-14/+15
Normalize before erasing late-bound regions in `equal_up_to_regions` Normalize erasing regions **first**, before passing the type through a `BottomUpFolder` which erases late-bound regions too. The root cause of this issue is due to 96d4137deed6c52c6db2dd19568c37d1c160f1e7, which removes a `normalize_erasing_regions` that happens before this call to `equal_up_to_regions`. While reverting that commit might be a fix, I think it was suspicious to be erasing late-bound regions first _then_ normalizing types in the first place in `equal_up_to_regions`. ----- I am tempted to ask the reviewer to review and `r+` this without a UI test, since the existing issues that I think this fixes are all incredibly difficult to minimize (anything hyper/warp related, given the nature of those libraries :sweat:) or impossible to reproduce locally (the miri test), namely: * This recently reported issue with tokio + warp: #101430 * This issue from `@RalfJung` about Miri being broken: #101344 * This additional issue reported in a comment by `@tmandry` (issue with fuchsia + hyper): https://github.com/rust-lang/rust/issues/101344#issuecomment-1235974564 I have locally verified that the repro in #101430 is fixed with this PR, but after a couple of hours of attempting to minimize this error and either failing to actually repro the ICE, or being overwhelmed with the number of traits and functions I need to inline into a UI test, I have basically given up. Thoughts are appreciated on how best to handle this. r? `@oli-obk` who is at the intersection of MIR and types-related stuff who may be able to give advice :sweat_smile:
2022-09-08bound variables during ctfe are a buglcnr-3/+3
2022-09-07Use niche-filling optimization even when multiple variants have data.Michael Benfield-7/+9
Fixes #46213
2022-09-07Change name of "dataful" variant to "untagged"Michael Benfield-5/+5
This is in anticipation of a new enum layout, in which the niche optimization may be applied even when multiple variants have data.
2022-09-06Move CTFE handling of nondiverging intrinsics to intrinsics.rsOli Scherer-19/+29
2022-09-06Generalize the Assume intrinsic statement to a general Intrinsic statementOli Scherer-22/+21
2022-09-06Lower the assume intrinsic to a MIR statementOli Scherer-6/+19
2022-09-06Rollup merge of #101402 - saethlin:inline-asm-hook, r=oli-obkYuki Okushi-2/+21
Add a Machine hook for inline assembly I'm sketching out some support in Miri to "execute" inline assembly. I want this because there are codebases which have very simple inline assembly like hand-written syscall wrappers, and it would be nice to test such code without modification. r? ``@oli-obk``
2022-09-05Normalize before erasing late-bound regions in equal_up_to_regionsMichael Goulet-14/+15
2022-09-04Make `const_eval_select` a real intrinsicDeadbeef-15/+1
2022-09-03Add a Machine hook for inline assemblyBen Kimock-2/+21
2022-09-03Auto merge of #101154 - RalfJung:validation-perf, r=oli-obkbors-4/+5
interpret: fix unnecessary allocation in validation visitor Should fix the perf regression introduced by https://github.com/rust-lang/rust/pull/100043. r? `@oli-obk`
2022-09-02Rollup merge of #100121 - Nilstrieb:mir-validator-param-env, r=oli-obkMatthias Krüger-5/+12
Try normalizing types without RevealAll in ParamEnv in MIR validation Before, the MIR validator used RevealAll in its ParamEnv for type checking. This could cause false negatives in some cases due to RevealAll ParamEnvs not always use all predicates as expected here. Since some MIR passes like inlining use RevealAll as well, keep using it in the MIR validator too, but when it fails usign RevealAll, also try the check without it, to stop false negatives. Fixes #99866 cc ````````@compiler-errors```````` who nicely helped me on zulip
2022-09-01tracing::instrument cleanupOli Scherer-17/+8
2022-09-01Directly use the `instrument` macro instead of its full pathOli Scherer-1/+1
2022-09-01Auto merge of #100707 - dzvon:fix-typo, r=davidtwcobors-7/+7
Fix a bunch of typo This PR will fix some typos detected by [typos]. I only picked the ones I was sure were spelling errors to fix, mostly in the comments. [typos]: https://github.com/crate-ci/typos
2022-08-31interpret: use new OpTy::len for Len rvalueRalf Jung-2/+2
This avoids a `force_allocation`
2022-08-31Fix a bunch of typoDezhi Wu-7/+7
This PR will fix some typos detected by [typos]. I only picked the ones I was sure were spelling errors to fix, mostly in the comments. [typos]: https://github.com/crate-ci/typos
2022-08-30Auto merge of #99102 - JakobDegen:reorder-generators, r=oli-obkbors-20/+23
Rework definition of MIR phases to more closely reflect semantic concerns Implements most of rust-lang/compiler-team#522 . I tried my best to restrict this PR to the "core" parts of the MCP. In other words, this includes just enough changes to make the new definition of `MirPhase` make sense. That means there are a couple of FIXMEs lying around. Depending on what reviewers prefer, I can either fix them in this PR or send follow up PRs. There are also a couple other refactorings of the `rustc_mir_transform/src/lib.rs` file that I want to do in follow ups that I didn't leave explicit FIXMEs for.
2022-08-30Refactor MIR phasesJakob Degen-20/+23
2022-08-30Auto merge of #101183 - Dylan-DPC:rollup-6kewixv, r=Dylan-DPCbors-88/+108
Rollup of 9 pull requests Successful merges: - #95376 (Add `vec::Drain{,Filter}::keep_rest`) - #100092 (Fall back when relating two opaques by substs in MIR typeck) - #101019 (Suggest returning closure as `impl Fn`) - #101022 (Erase late bound regions before comparing types in `suggest_dereferences`) - #101101 (interpret: make read-pointer-as-bytes a CTFE-only error with extra information) - #101123 (Remove `register_attr` feature) - #101175 (Don't --bless in pre-push hook) - #101176 (rustdoc: remove unused CSS selectors for `.table-display`) - #101180 (Add another MaybeUninit array test with const) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
2022-08-30Rollup merge of #101101 - RalfJung:read-pointer-as-bytes, r=oli-obkDylan DPC-88/+108
interpret: make read-pointer-as-bytes a CTFE-only error with extra information Next step in the reaction to https://github.com/rust-lang/rust/issues/99923. Also teaches Miri to implicitly strip provenance in more situations when transmuting pointers to integers, which fixes https://github.com/rust-lang/miri/issues/2456. Pointer-to-int transmutation during CTFE now produces a message like this: ``` = help: this code performed an operation that depends on the underlying bytes representing a pointer = help: the absolute address of a pointer is not known at compile-time, so such operations are not supported ``` r? ``@oli-obk``
2022-08-30Auto merge of #100812 - Nilstrieb:revert-let-chains-nightly, r=Mark-Simulacrumbors-0/+1
Revert let_chains stabilization This is the revert against master, the beta revert was already done in #100538. Bumps the stage0 compiler which already has it reverted.
2022-08-29Auto merge of #101167 - matthiaskrgr:rollup-yt3jdmp, r=matthiaskrgrbors-18/+11
Rollup of 7 pull requests Successful merges: - #100898 (Do not report too many expr field candidates) - #101056 (Add the syntax of references to their documentation summary.) - #101106 (Rustdoc-Json: Retain Stripped Modules when they are imported, not when they have items) - #101131 (CTFE: exposing pointers and calling extern fn is just impossible) - #101141 (Simplify `get_trait_ref` fn used for `virtual_function_elimination`) - #101146 (Various changes to logging of borrowck-related code) - #101156 (Remove `Sync` requirement from lint pass objects) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
2022-08-29Rollup merge of #101131 - RalfJung:ctfe-no-needs-rfc, r=oli-obkMatthias Krüger-18/+11
CTFE: exposing pointers and calling extern fn is just impossible The remaining "needs RFC" errors are just needlessly confusing, I think -- time to get rid of that error variant. They are anyway only reachable with miri-unleashed (if at all). r? `@oli-obk`
2022-08-29Revert let_chains stabilizationNilstrieb-0/+1
This reverts commit 326646074940222d602f3683d0559088690830f4. This is the revert against master, the beta revert was already done in #100538.
2022-08-29Only normalize once in mir validator typecheckerNilstrieb-15/+10
Before, it called `normalize_erasing_regions` twice since `equal_up_to_regions` called it as well for both types.
2022-08-29Try normalizing types without RevealAll in ParamEnv in mir validationNilstrieb-8/+20
Before, the MIR validator used RevealAll in its ParamEnv for type checking. This could cause false negatives in some cases due to RevealAll ParamEnvs not always use all predicates as expected here. Since some MIR passes like inlining use RevealAll as well, keep using it in the MIR validator too, but when it fails usign RevealAll, also try the check without it, to stop false negatives.
2022-08-29interpret: fix unnecessary allocation in validation visitorRalf Jung-4/+5
2022-08-29Rollup merge of #100239 - RalfJung:const-prop-uninit, r=oli-obkDylan DPC-25/+9
remove an ineffective check in const_prop Based on https://github.com/rust-lang/rust/pull/100043, only the last two commits are new. ConstProp has a special check when reading from a local that prevents reading uninit locals. However, if that local flows into `force_allocation`, then no check fires and evaluation proceeds. So this check is not really effective at preventing accesses to uninit locals. With https://github.com/rust-lang/rust/pull/100043, `read_immediate` and friends always fail when reading uninit locals, so I don't see why ConstProp would need a separate check. Thus I propose we remove it. This is needed to be able to do https://github.com/rust-lang/rust/pull/100085.
2022-08-29Rollup merge of #100897 - RalfJung:const-not-to-mutable, r=lcnrMatthias Krüger-27/+45
extra sanity check against consts pointing to mutable memory This should be both unreachable and redundant (since we already ensure that validation only reads from read-only memory, when validating consts), but I feel like we cannot be paranoid enough here, and also if this ever fails it'll be a nicer error than the "cannot read from mutable memory" error.
2022-08-29Rollup merge of #99027 - tmiasko:basic-blocks, r=oli-obkMatthias Krüger-11/+11
Replace `Body::basic_blocks()` with field access Since the refactoring in #98930, it is possible to borrow the basic blocks independently from other parts of MIR by accessing the `basic_blocks` field directly. Replace unnecessary `Body::basic_blocks()` method with a direct field access, which has an additional benefit of borrowing the basic blocks only.
2022-08-28entirely get rid of NeedsRfc CTFE errorsRalf Jung-15/+5
2022-08-28CTFE: exposing pointers and calling extern fn doesn't need an RFC, it is ↵Ralf Jung-3/+6
just impossible
2022-08-28validation should only catch UB errorsRalf Jung-17/+20
2022-08-28Rollup merge of #101038 - RalfJung:interning-alignment, r=oli-obkMatthias Krüger-3/+5
no alignment check during interning This should fix https://github.com/rust-lang/rust/issues/101034 r? `@oli-obk` Unfortunately we don't have a self-contained testcase for this problem. I am not sure how it can be triggered...