-
Notifications
You must be signed in to change notification settings - Fork 61
Open
Labels
A-stable-addressTopic: Related to stable addressesTopic: Related to stable addressesS-pending-designStatus: Resolving this issue requires addressing some open design questionsStatus: Resolving this issue requires addressing some open design questions
Description
When do we guarantee "stable" addresses? (Meaning that the integral value of a pointer remains the same). Note that addresses are visible to safe code via as conversions.
Some examples:
Local variables
let x = 22;
{ let y = &x; .. }
...
{ let z = &x; .. }Are the integral values of y and z guaranteed to be equal? It might be useful if they were not, since a compiler could keep x in a register and spill it to memory in different spots on the stack.
Assuming the answer to this question is "yes", are locals still guaranteed to have a stable address when they are reallocated using StorageDead / StorageLive? For example:
let x = 22;
let y = &x as *const _ as usize;
x = 33;
let z = &x as *const _ as usize;
assert_eq!(y, z); // is this true?Or:
let mut prev = None;
loop {
let x = 22;
let y = &x as *const _ as usize;
if let Some(z) = prev {
assert_eq!(y, z); // is this true?
}
prev = Some(y);
}Edit by @digama0: moved question about const address stability to #406 , clarified question on killed locals
stefnotch
Metadata
Metadata
Assignees
Labels
A-stable-addressTopic: Related to stable addressesTopic: Related to stable addressesS-pending-designStatus: Resolving this issue requires addressing some open design questionsStatus: Resolving this issue requires addressing some open design questions