Skip to content

Commit 37f49b8

Browse files
committed
Add addrof back test
1 parent c88391f commit 37f49b8

3 files changed

Lines changed: 55 additions & 0 deletions

File tree

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
extern crate libcc2rs;
2+
use libcc2rs::*;
3+
use std::cell::RefCell;
4+
use std::collections::BTreeMap;
5+
use std::io::prelude::*;
6+
use std::io::{Read, Seek, Write};
7+
use std::os::fd::AsFd;
8+
use std::rc::{Rc, Weak};
9+
pub fn main() {
10+
std::process::exit(main_0());
11+
}
12+
fn main_0() -> i32 {
13+
let outer: Value<Vec<Value<Vec<i32>>>> = Rc::new(RefCell::new(Vec::new()));
14+
let inner: Value<Vec<i32>> = Rc::new(RefCell::new(Vec::new()));
15+
(outer.as_pointer() as Ptr<Vec<Value<Vec<i32>>>>).with_mut(|__v: &mut Vec<Value<Vec<i32>>>| {
16+
__v.push(Rc::new(RefCell::new((*inner.borrow()).clone())))
17+
});
18+
let sink: Value<Ptr<Vec<i32>>> = Rc::new(RefCell::new(
19+
((*outer.borrow())[(*outer.borrow()).len() - 1].as_pointer()),
20+
));
21+
assert!(((*(*sink.borrow()).upgrade().deref()).len() as u64 == 0_u64));
22+
return 0;
23+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
extern crate libc;
2+
use libc::*;
3+
extern crate libcc2rs;
4+
use libcc2rs::*;
5+
use std::collections::BTreeMap;
6+
use std::io::{Read, Seek, Write};
7+
use std::os::fd::{AsFd, FromRawFd, IntoRawFd};
8+
use std::rc::Rc;
9+
pub fn main() {
10+
unsafe {
11+
std::process::exit(main_0() as i32);
12+
}
13+
}
14+
unsafe fn main_0() -> i32 {
15+
let mut outer: Vec<Vec<i32>> = Vec::new();
16+
let mut inner: Vec<i32> = Vec::new();
17+
outer.push(inner.clone());
18+
let mut sink: *mut Vec<i32> = ((outer).last_mut().unwrap());
19+
assert!((((*sink.cast_const()).len() as u64) == (0_u64)));
20+
return 0;
21+
}

tests/unit/vector_addr_of_back.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#include <assert.h>
2+
#include <vector>
3+
4+
int main() {
5+
std::vector<std::vector<int>> outer;
6+
std::vector<int> inner;
7+
outer.push_back(inner);
8+
auto *sink = &outer.back();
9+
assert(sink->size() == 0);
10+
return 0;
11+
}

0 commit comments

Comments
 (0)