// The interpreter used to create a new AllocId every time it evaluates any const. // This caused unbounded memory use in Miri. // This test verifies that we only create a bounded amount of addresses for any given const. // In practice, the interpreter always returns the same address, but we *do not guarantee* that. //@compile-flags: -Zinline-mir=no const EVALS: usize = 64; use std::collections::HashSet; fn main() { let mut addrs = HashSet::new(); for _ in 0..EVALS { addrs.insert(const_addr()); } // Check that we always return the same base address for the const allocation. assert_eq!(addrs.len(), 1); // Check that within a call we always produce the same address let mut prev = 0; for iter in 0..EVALS { let addr = "test".as_bytes().as_ptr().addr(); if iter > 0 { assert_eq!(prev, addr); } prev = addr; } } fn const_addr() -> usize { "test".as_bytes().as_ptr().addr() }