Skip to content

Commit 8b89a09

Browse files
committed
Added trybuild test for references inside uncased instances
1 parent cf60855 commit 8b89a09

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* SPDX-FileCopyrightText: 2025 Sebastiano Vigna
3+
*
4+
* SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
5+
*/
6+
7+
use epserde::prelude::*;
8+
use std::io::Cursor;
9+
10+
fn main() {
11+
let vec = vec!["foo".to_string(), "bar".to_string(), "baz".to_string()];
12+
13+
let mut buffer = Vec::new();
14+
unsafe { vec.serialize(&mut buffer).unwrap() };
15+
let cursor = Cursor::new(&buffer);
16+
let mem_case = unsafe { <Vec<String>>::read_mem(cursor, buffer.len()).unwrap() };
17+
18+
let s = mem_case.uncase().get(0);
19+
drop(mem_case);
20+
assert_eq!(s, Some(&"foo"));
21+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
error[E0505]: cannot move out of `mem_case` because it is borrowed
2+
--> tests/fail/drop_memcase_and_get.rs:19:10
3+
|
4+
16 | let mem_case = unsafe { <Vec<String>>::read_mem(cursor, buffer.len()).unwrap() };
5+
| -------- binding `mem_case` declared here
6+
17 |
7+
18 | let s = mem_case.uncase().get(0);
8+
| -------- borrow of `mem_case` occurs here
9+
19 | drop(mem_case);
10+
| ^^^^^^^^ move out of `mem_case` occurs here
11+
20 | assert_eq!(s, Some(&"foo"));
12+
| --------------------------- borrow later used here

0 commit comments

Comments
 (0)