diff options
Diffstat (limited to 'src/test/ui/unboxed-closures/unboxed-closures-unique-type-id.rs')
-rw-r--r-- | src/test/ui/unboxed-closures/unboxed-closures-unique-type-id.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/test/ui/unboxed-closures/unboxed-closures-unique-type-id.rs b/src/test/ui/unboxed-closures/unboxed-closures-unique-type-id.rs new file mode 100644 index 000000000..4b7016def --- /dev/null +++ b/src/test/ui/unboxed-closures/unboxed-closures-unique-type-id.rs @@ -0,0 +1,26 @@ +// run-pass + +// This code used to produce the following ICE: +// +// error: internal compiler error: get_unique_type_id_of_type() - +// unexpected type: closure, +// Closure(rustc_ast::DefId{krate: 0, node: 66}, +// ReScope(63)) +// +// This is a regression test for issue #17021. +// +// compile-flags: -g +// ignore-asmjs wasm2js does not support source maps yet + +use std::ptr; + +pub fn replace_map<'a, T, F>(src: &mut T, prod: F) where F: FnOnce(T) -> T { + unsafe { *src = prod(ptr::read(src as *mut T as *const T)); } +} + +pub fn main() { + let mut a = 7; + let b = &mut a; + replace_map(b, |x: usize| x * 2); + assert_eq!(*b, 14); +} |