-
propose case-by-case uplift for clippy lints (scottmcm) & cancel FCP
- merge: Uplift lints from clippy to rustc (rust-lang/rust#53224)
-
niko to post summary comment on turbofish RFC and postpone
-
niko to comment on Expr walking structural match (reopened) #67088
-
niko to pursue scheduling design meeting around
Pin
and trying to gather up constraints -- found only one slot that may work, pinged folks -
niko to comment on RFC 2632 about "ok to experiment on nightly"
-
ffi-unwind and the "C" ABI (proposed)
-
dyn Trait + coherence interaction #57893
-
stacked borrows overview +
&self
in AtomicUsize + maybe the embedded interactions (proposed) -
Pin
and rogueDerefMut
impls #66544 (proposed)
-
roadmap + next edition (proposed)
- see also this list which only Niko filled out :)
-
unsafe code and
&raw
in next edition (proposed)
- no update
- rust-lang/rfcs#2835 (comment) check your boxes?
- josh, boats, pnkfelix, scott
&mut
ref types and borrows are on nightly but no RFC -- need one?- Let's have an RFC.
- We should think more about our story for recursion limits?
- could lift the standard recursion limit for now
- but what about
loop { .. }
- currently: we have a step counter that overflows at some point (counts terminators)
- tied to an unstable attribute right now
- Erroneous constants & what counts as dead code? (see discussion below).
- no update -- planning to have the dedicated meeting still
-
Relevant issue: rust-lang/rust#57893
-
no update
- no update
- no update
None this week
-
Usage of erroneous constant can be omitted on nightly and beta #67083
- Replace our fragile safety scheme around erroneous constants #67191
- Discussion with oli today
- During MIR generation, some constants are omitted (e.g., those with never types)
- Used to have a pass over the "HIR" that found all constants
- any errors -> led to an abort
- but some changes in the middle made these lints
- So now, if constant is used, you get a hard error
- but we don't look at constants in dead code
- "but what code is dead"
- but we don't look at constants in dead code
- Hence proposal to use the NLL notion of "dead code"
- problem is that some constants are already "elided" at MIR generation time
- the example causing the problem:
- Replace our fragile safety scheme around erroneous constants #67191
let _: ! = panic!(); // obviously ok, but errors at runtime
const FOO2: u8 = panic!();
fn main() {
let _ = FOO2; // gets an error today
...
}
const FOO: ! = panic!();
fn main() {
let _ = FOO; // was not getting errors
// had miscompilations for uninhabited types
...
}
fn main() {
panic!();
BAD_CONSTANT; // <-- no error (dead according to NLL)
}
Conclusion:
-
uses of constants that are unreachable (according to NLL) would not trigger errors, even if the constant encounters an error during evaluation
- because backwards compatibility (and because using one notion of reachability is nice...)
-
in particular, NLL's notion of reachability is not dependent on optimizations nor particular values (e.g.,
X
is reachable inif false { X }
) and contains various "false edges" in match building and so forth -
Pin
is unsound due to rogue Deref/DerefMut implementations rust-lang/rust#66544- Proposal: schedule a meeting to discuss in detail
- Niko will reach out to Ralf & Boats.
- Ideally they attend the meeting.
- Proposal: schedule a meeting to discuss in detail
-
Coherence can be bypassed by an indirect impl for a trait object
- (see above)
-
Expr walking structural match (reopened) #67088
- MIR version: rust-lang/rust#67343 (WIP)
-
mem::zeroed/uninit: panic on types that do not permit zero-initialization #66059
-
Not complete implementation yet, OK in dynamic semantics?
-
Crater triage?
-
Ralf responded to recent comments:
-
This is a minimal step
-
Overall goal is that we panic on all illegal uses of mem::uninitialized and mem::zeroed that we can detect
-
The question is how fast we can land this without breaking everything
-
Centril thinks it would be good to have the full plan as "prose" and FCP that one so we don't have to re-FCP every step.
-
-
Connected to the safe-transmute
- since anything that can be initialized from arbitrary bits surely permits zero
- long term if we had a "trait" that indicated something could be zero-initialized, perhaps with opt-in (e.g., deriving), we could leverage it for safe-transmute etc
- i.e., compiler could ensure that implementing the trait is valid
- This is related to the compiler figuring out whether traits regarding safe-transmute are valid
-
Proposal: this is alright in dynamic semantics for now, we'd like to see this happen via static semantics and the type system eventually too, please coordinate that with project-safe-transmute
-
Considerations:
- would we leave room to remove panics in the future, if we relax the validity invariants for zeroing
- would be good to decide the "mission" of "panic if zero'd"
- taking inspiration of
MaybeUninit
andmem::uninitialized
- taking inspiration of
- and have some up-to-date place to look for what types do what and where
- "we think this should panic, it doesn't yet"
- etc
-
-
Casting or adding type ascription to panic!() triggers unreachable_code
- deferred till we have more folks
- Centril listed some options
- author gave feedback.
-
Add configurable, per-item instruction limit for CTFE
- would prefer if you are able to attach these definitions to the const fn definition more than the use, in contrast to with macros --Niko
- current infinite loop detector is very slow
-
PartialEq implementation for RangeInclusive is unsound
- this is due to unsound specialization implementation
- maybe a good idea to organize some form of audit
- another question might be how we could try to implement the "always applicable" rules in compiler / chalk, they haven't received much attention
-
Pin
is unsound due to rogue Deref/DerefMut implementations #66544- see above
-
Tracking issue for RFC 2645, "Transparent Unions and Enums" #60405
- centril is thinking of stabilizing
#[repr(transparent)]
for enums:- Nice to have univariant enums & structs behave the same way in general as a form of "algebraic data types" are sane.
#[repr(transparent)]
applied to a univariant enum behaves as if it were a struct- defer stablization for unions
- centril is thinking of stabilizing
-
Arc::drop has a (potentially) dangling shared ref #55005
- still nominated, planning to schedule a meeting
-
Tracking issue for RFC 2091: Implicit caller location #47809
- just wanted to call attention to this, clear nomination bit after meeting
-
floating point to integer casts can cause undefined behaviour #10184
- last time we talked, we concluded that it made sense to
- adopt saturated semantics as the default
- maybe offer a
-Z
flag to opt out for a time
- there has been plenty of discussion in the meantime
- how do we go forward here?
- a summary might be an amazing contribution --niko
- last time we talked, we concluded that it made sense to
-
Calling methods on generic parameters of const fns
- We can continue with nightly experimentation without the RFC merged.
- Niko will comment that we are OK with ^---.
- Want another meeting? (Monday, 17/18:00 PM)
- We can continue with nightly experimentation without the RFC merged.
-
Some older items that haven't moved in a while, can we do something?
-
- It seems like maybe we just want to close this?
- There is a problem here, do we want to take another stab at reaching consensus?
-
-
Some recent additions:
-
Recap:
-
Uplift lints from clippy to rustc (rust-lang/rust#53224)
- Scott to close? What's up with that?
-
- dereference with ralfjung / compiler’s llvm-wg / ucg wg?