From dad79c1e7729cbb0a2bdb8f3ac8b25a72c1157c4 Mon Sep 17 00:00:00 2001 From: Lucian Popescu Date: Thu, 5 Nov 2026 15:08:01 +0000 Subject: [PATCH 1/2] Add refcount rules for deque reference and const_reference --- rules/deque/tgt_refcount.rs | 8 ++++++++ tests/unit/vector_deque_vector_string.cpp | 10 ++++++++++ 2 files changed, 18 insertions(+) diff --git a/rules/deque/tgt_refcount.rs b/rules/deque/tgt_refcount.rs index ef1d15801d..560bee9a7b 100644 --- a/rules/deque/tgt_refcount.rs +++ b/rules/deque/tgt_refcount.rs @@ -5,6 +5,14 @@ use libcc2rs::*; use std::cell::RefCell; use std::rc::Rc; +fn t4() -> Ptr { + Ptr::null() +} + +fn t5() -> Ptr { + Ptr::null() +} + fn f1(a0: Ptr) -> Ptr { a0.to_last() } diff --git a/tests/unit/vector_deque_vector_string.cpp b/tests/unit/vector_deque_vector_string.cpp index 3dca5dd8a2..32d1420551 100644 --- a/tests/unit/vector_deque_vector_string.cpp +++ b/tests/unit/vector_deque_vector_string.cpp @@ -31,5 +31,15 @@ int main() { assert(v[1].front()[0] == "bcx"); assert(copy[1].front().size() == 3); assert(row.size() == 3); + + std::deque d; + int first = 1; + int last = 2; + d.push_back(first); + d.push_back(last); + std::deque::reference r = d.front(); + r = 5; + std::deque::const_reference c = d.back(); + assert(d.front() == 5 && c == 2); return 0; } From 20a176da72e0d638109514b498fc8dd823d5b381 Mon Sep 17 00:00:00 2001 From: Lucian Popescu Date: Thu, 5 Nov 2026 15:24:09 +0000 Subject: [PATCH 2/2] Update tests --- tests/unit/out/refcount/vector_deque_vector_string.rs | 9 +++++++++ tests/unit/out/unsafe/vector_deque_vector_string.rs | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/tests/unit/out/refcount/vector_deque_vector_string.rs b/tests/unit/out/refcount/vector_deque_vector_string.rs index f05f6bd4e0..4353c0ce22 100644 --- a/tests/unit/out/refcount/vector_deque_vector_string.rs +++ b/tests/unit/out/refcount/vector_deque_vector_string.rs @@ -179,6 +179,15 @@ fn main_0() -> i32 { ); assert!(({ ((*copy.decay().offset(1_usize).decay().upgrade().deref()).len() == 3_usize) })); assert!(({ ((*row.borrow()).len() == 3_usize) })); + let d: Value> = Rc::new(RefCell::new(Vec::new())); + let mut first: i32 = 1; + let mut last: i32 = 2; + (*d.borrow_mut()).push(first); + (*d.borrow_mut()).push(last); + let r: Ptr = d.decay(); + r.write(5); + let c: Ptr = d.decay().to_last(); + assert!(((d.decay().read()) == 5) && ((c.read()) == 2)); return 0; } pub fn __cpp2rust_init_globals() {} diff --git a/tests/unit/out/unsafe/vector_deque_vector_string.rs b/tests/unit/out/unsafe/vector_deque_vector_string.rs index ffa65b835f..1f15e61509 100644 --- a/tests/unit/out/unsafe/vector_deque_vector_string.rs +++ b/tests/unit/out/unsafe/vector_deque_vector_string.rs @@ -153,6 +153,15 @@ unsafe fn main_0() -> i32 { ); assert!((((*((copy[(1_usize)]).first_mut().unwrap())).len()) == (3_usize))); assert!(((row.len()) == (3_usize))); + let mut d: Vec = Vec::new(); + let mut first: i32 = 1; + let mut last: i32 = 2; + d.push(first); + d.push(last); + let r: *mut i32 = ((d).first_mut().unwrap()); + (*r) = 5; + let c: *const i32 = (d.last_mut().unwrap()); + assert!(((*((d).first_mut().unwrap())) == (5)) && ((*c) == (2))); return 0; } pub unsafe fn __cpp2rust_init_globals() {}