1. 11 8月, 2023 4 次提交
  2. 09 8月, 2023 6 次提交
  3. 08 8月, 2023 2 次提交
    • Y
      [`redundant_guards`]: don't lint on floats · f959ccc0
      y21 提交于
      f959ccc0
    • M
      Rollup merge of #114566 - fmease:type-alias-laziness-is-crate-specific, r=oli-obk · 5f860093
      Matthias Krüger 提交于
      Store the laziness of type aliases in their `DefKind`
      
      Previously, we would treat paths referring to type aliases as *lazy* type aliases if the current crate had lazy type aliases enabled independently of whether the crate which the alias was defined in had the feature enabled or not.
      
      With this PR, the laziness of a type alias depends on the crate it is defined in. This generally makes more sense to me especially if / once lazy type aliases become the default in a new edition and we need to think about *edition interoperability*:
      
      Consider the hypothetical case where the dependency crate has an older edition (and thus eager type aliases), it exports a type alias with bounds & a where-clause (which are void but technically valid), the dependent crate has the latest edition (and thus lazy type aliases) and it uses that type alias. Arguably, the bounds should *not* be checked since at any time, the dependency crate should be allowed to change the bounds at will with a *non*-major version bump & without negatively affecting downstream crates.
      
      As for the reverse case (dependency: lazy type aliases, dependent: eager type aliases), I guess it rules out anything from slight confusion to mild annoyance from upstream crate authors that would be caused by the compiler ignoring the bounds of their type aliases in downstream crates with older editions.
      
      ---
      
      This fixes #114468 since before, my assumption that the type alias associated with a given weak projection was lazy (and therefore had its variances computed) did not necessarily hold in cross-crate scenarios (which [I kinda had a hunch about](https://github.com/rust-lang/rust/pull/114253#discussion_r1278608099)) as outlined above. Now it does hold.
      
      `@rustbot` label F-lazy_type_alias
      r? `@oli-obk`
      5f860093
  4. 07 8月, 2023 5 次提交
    • L
      3ff6fd2a
    • B
      Auto merge of #11295 - lengyijun:typo, r=Centri3 · 84d28967
      bors 提交于
      Small code style adjustments
      
      changelog: none
      84d28967
    • B
      Auto merge of #11191 - Alexendoo:redundant-type-annotations-ice, r=llogiq · 526d1156
      bors 提交于
      redundant_type_annotations: only pass certain def kinds to type_of
      
      Fixes #11190
      Fixes rust-lang/rust#113516
      
      Also adds an `is_lint_allowed` check to skip the lint when it's not needed
      
      changelog: none
      526d1156
    • B
      Auto merge of #10843 - MortenLohne:feat/double-const-comparisons, r=Centri3 · 6a2c8a1e
      bors 提交于
      New lints: `impossible_comparisons` and `redundant_comparisons`
      
      Inspired by a bug we had in production, like all good lints ;)
      
      Adds two lints for "double" comparisons, specifically when the same expression is being compared against two different constants.
      
      `impossible_comparisons` checks for expressions that can never be true at all. Example:
      ```rust
      status_code <= 400 && status_code > 500
      ```
      Presumably, the programmer intended to write `status_code >= 400 && status_code < 500` in this case.
      
      `redundant_comparisons` checks for expressions where either half has no effect. Example:
      ```rust
      status_code <= 400 && status_code < 500
      ```
      
      Works with other literal types like floats and strings, and *some* cases where the constant is more complex than a literal, see the tests for more.
      
      **Limitations and/or future work:**
      * Doesn't work if the LHS can have side-effects at all, for example by being a function call
      * Only works for exactly two comparison expressions, so `x > y && x > z && x < w` won't get checked
      * Doesn't check for comparison expressions combined with `||`. Very similar logic could be applied there.
      
      changelog: New lints [`impossible_comparisons`] and [`redundant_comparisons`]
      6a2c8a1e
    • M
      d6280462
  5. 06 8月, 2023 12 次提交
  6. 05 8月, 2023 4 次提交
    • L
      Small code style adjustments · e5b0483c
      lengyijun 提交于
      e5b0483c
    • B
      Auto merge of #114481 - matthiaskrgr:rollup-58pczpl, r=matthiaskrgr · ec1d61e0
      bors 提交于
      Rollup of 9 pull requests
      
      Successful merges:
      
       - #113945 (Fix wrong span for trait selection failure error reporting)
       - #114351 ([rustc_span][perf] Remove unnecessary string joins and allocs.)
       - #114418 (bump parking_lot to 0.12)
       - #114434 (Improve spans for indexing expressions)
       - #114450 (Fix ICE failed to get layout for ReferencesError)
       - #114461 (Fix unwrap on None)
       - #114462 (interpret: add mplace_to_ref helper method)
       - #114472 (Reword `confusable_idents` lint)
       - #114477 (Account for `Rc` and `Arc` when suggesting to clone)
      
      r? `@ghost`
      `@rustbot` modify labels: rollup
      ec1d61e0
    • M
      Rollup merge of #114434 - Nilstrieb:indexing-spans, r=est31 · 878a87d5
      Matthias Krüger 提交于
      Improve spans for indexing expressions
      
      fixes #114388
      
      Indexing is similar to method calls in having an arbitrary left-hand-side and then something on the right, which is the main part of the expression. Method calls already have a span for that right part, but indexing does not. This means that long method chains that use indexing have really bad spans, especially when the indexing panics and that span in coverted into a panic location.
      
      This does the same thing as method calls for the AST and HIR, storing an extra span which is then put into the `fn_span` field in THIR.
      
      r? compiler-errors
      878a87d5
    • B
      Auto merge of #114104 - oli-obk:syn2, r=compiler-errors · 18522006
      bors 提交于
      Lots of tiny incremental simplifications of `EmitterWriter` internals
      
      ignore the first commit, it's https://github.com/rust-lang/rust/pull/114088 squashed and rebased, but it's needed to use to use `derive_setters`, as they need a newer `syn` version.
      
      Then this PR starts out with removing many arguments that are almost always defaulted to `None` or `false` and replace them with builder methods that can set these fields in the few cases that want to set them.
      
      After that it's one commit after the other that removes or merges things until everything becomes some very simple trait objects
      18522006
  7. 04 8月, 2023 5 次提交
    • N
      Improve spans for indexing expressions · ed0dfed2
      Nilstrieb 提交于
      Indexing is similar to method calls in having an arbitrary
      left-hand-side and then something on the right, which is the main part
      of the expression. Method calls already have a span for that right part,
      but indexing does not. This means that long method chains that use
      indexing have really bad spans, especially when the indexing panics and
      that span in coverted into a panic location.
      
      This does the same thing as method calls for the AST and HIR, storing an
      extra span which is then put into the `fn_span` field in THIR.
      ed0dfed2
    • M
      Rollup merge of #114022 - oli-obk:tait_ice_alias_field_projection, r=cjgillot · 15897593
      Matthias Krüger 提交于
      Perform OpaqueCast field projection on HIR, too.
      
      fixes #105819
      
      This is necessary for closure captures in 2021 edition, as they capture individual fields, not the full mentioned variables. So it may try to capture a field of an opaque (because the hidden type is known to be something with a field).
      
      See https://github.com/rust-lang/rust/pull/99806 for when and why we added OpaqueCast to MIR.
      15897593
    • B
      Auto merge of #108955 - Nilstrieb:dont-use-me-pls, r=oli-obk · d412b91f
      bors 提交于
      Add `internal_features` lint
      
      Implements https://github.com/rust-lang/compiler-team/issues/596
      
      Also requires some more test blessing for codegen tests etc
      
      `@jyn514` had the idea of just `allow`ing the lint by default in the test suite. I'm not sure whether this is a good idea, but it's definitely one worth considering. Additional input encouraged.
      d412b91f
    • B
      Auto merge of #11255 - blyxyas:fix-perf-sus_xor_used_as_pow, r=xFrednet · 5818225a
      bors 提交于
      Fix `suspicious_xor_used_as_pow.rs` performance
      
      The original `suspicious_xor_used_as_pow` lint had poor performance, so I fixed that + a little refactor so that module is readable.
      
      **107 millis. -> 106 millis.** Using `SPEEDTEST` on Rust's VMs
      
      fix #11060
      changelog: [`suspicious_xor_used_as_pow`]: Improve performance by 0.934%
      5818225a
    • B
      Fix `suspicious_xor_used_as_pow.rs` performance · 3fb84415
      blyxyas 提交于
      3fb84415
  8. 03 8月, 2023 2 次提交
    • M
      Rollup merge of #113657 - Urgau:expand-incorrect_fn_null_check-lint, r=cjgillot · 8f4f476a
      Matthias Krüger 提交于
      Expand, rename and improve `incorrect_fn_null_checks` lint
      
      This PR,
      
       - firstly, expand the lint by now linting on references
       - secondly, it renames the lint `incorrect_fn_null_checks` -> `useless_ptr_null_checks`
       - and thirdly it improves the lint by catching `ptr::from_mut`, `ptr::from_ref`, as well as `<*mut _>::cast` and `<*const _>::cast_mut`
      
      Fixes https://github.com/rust-lang/rust/issues/113601
      cc ```@est31```
      8f4f476a
    • N
      Add `internal_features` lint · 85b5e98e
      Nilstrieb 提交于
      It lints against features that are inteded to be internal to the
      compiler and standard library. Implements MCP #596.
      
      We allow `internal_features` in the standard library and compiler as those
      use many features and this _is_ the standard library from the "internal to the compiler and
      standard library" after all.
      
      Marking some features as internal wasn't exactly the most scientific approach, I just marked some
      mostly obvious features. While there is a categorization in the macro,
      it's not very well upheld (should probably be fixed in another PR).
      
      We always pass `-Ainternal_features` in the testsuite
      About 400 UI tests and several other tests use internal features.
      Instead of throwing the attribute on each one, just always allow them.
      There's nothing wrong with testing internal features^^
      85b5e98e