mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-31 22:41:50 +00:00
19 lines
709 B
Rust
19 lines
709 B
Rust
#![feature(const_refs_to_cell)]
|
|
|
|
use std::cell::*;
|
|
|
|
struct SyncPtr<T> { x : *const T }
|
|
unsafe impl<T> Sync for SyncPtr<T> {}
|
|
|
|
// These pass the lifetime checks because of the "tail expression" / "outer scope" rule.
|
|
// (This relies on `SyncPtr` being a curly brace struct.)
|
|
// However, we intern the inner memory as read-only.
|
|
// The resulting constant would pass all validation checks, so it is crucial that this gets rejected
|
|
// by static const checks!
|
|
static RAW_SYNC_S: SyncPtr<Cell<i32>> = SyncPtr { x: &Cell::new(42) };
|
|
//~^ ERROR: cannot refer to interior mutable data
|
|
const RAW_SYNC_C: SyncPtr<Cell<i32>> = SyncPtr { x: &Cell::new(42) };
|
|
//~^ ERROR: cannot refer to interior mutable data
|
|
|
|
fn main() {}
|