Skip to content

Commit e05c4aa

Browse files
committed
---
yaml --- r: 3809 b: refs/heads/master c: eef61a5 h: refs/heads/master i: 3807: 0ba1e8d v: v3
1 parent 7b68209 commit e05c4aa

File tree

4 files changed

+15
-1
lines changed

4 files changed

+15
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: b6d774136b62b2df51555a325439126a29038da3
2+
refs/heads/master: eef61a527d8d08f57df8309d42ba15d15e391a83

trunk/src/lib/ptr.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
// Unsafe pointer utility functions.
22

33
native "rust-intrinsic" mod rusti {
4+
fn addr_of[T](&T val) -> *T;
45
fn ptr_offset[T](*T ptr, uint count) -> *T;
56
}
67

8+
fn addr_of[T](&T val) -> *T { ret rusti::addr_of(val); }
79
fn offset[T](*T ptr, uint count) -> *T { ret rusti::ptr_offset(ptr, count); }
810

trunk/src/rt/intrinsics/intrinsics.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,9 @@ rust_intrinsic_cast(rust_task *task, void *retptr, type_desc *t1,
4949
memmove(retptr, src, t1->size);
5050
}
5151

52+
extern "C" void
53+
rust_intrinsic_addr_of(rust_task *task, void **retptr, type_desc *ty,
54+
void *valptr) {
55+
*retptr = valptr;
56+
}
57+

trunk/src/rt/intrinsics/intrinsics.ll.in

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,12 @@ declare void @upcall_fail(%struct.rust_task*, i8*, i8*, i32)
137137

138138
declare void @llvm.memmove.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind
139139

140+
define linkonce_odr void @rust_intrinsic_addr_of(%struct.rust_task* nocapture %task, i8** nocapture %retptr, %struct.type_desc* nocapture %ty, i8* %valptr) nounwind {
141+
entry:
142+
store i8* %valptr, i8** %retptr, align 4, !tbaa !3
143+
ret void
144+
}
145+
140146
!0 = metadata !{metadata !"long", metadata !1}
141147
!1 = metadata !{metadata !"omnipotent char", metadata !2}
142148
!2 = metadata !{metadata !"Simple C/C++ TBAA", null}

0 commit comments

Comments
 (0)