Skip to content

Commit e4b3238

Browse files
committed
fix: Simplify Module::get_global_metadata and Values::get_node_values.
The previous fixes were OK-ish. This patch is better since it doesn't forget the `raw_vec` but forces the length of the `Vec` to `count`.
1 parent 8e59512 commit e4b3238

File tree

2 files changed

+8
-12
lines changed

2 files changed

+8
-12
lines changed

src/module.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -932,15 +932,13 @@ impl<'ctx> Module<'ctx> {
932932
let c_string = to_c_str(key);
933933
let count = self.get_global_metadata_size(key) as usize;
934934

935-
let mut raw_vec: Vec<LLVMValueRef> = Vec::with_capacity(count);
936-
let ptr = raw_vec.as_mut_ptr();
935+
let mut vec: Vec<LLVMValueRef> = Vec::with_capacity(count);
936+
let ptr = vec.as_mut_ptr();
937937

938-
forget(raw_vec);
939-
940-
let vec = unsafe {
938+
unsafe {
941939
LLVMGetNamedMetadataOperands(self.module.get(), c_string.as_ptr(), ptr);
942940

943-
Vec::from_raw_parts(ptr, count, count)
941+
vec.set_len(count);
944942
};
945943

946944
vec.iter().map(|val| MetadataValue::new(*val)).collect()

src/values/metadata_value.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -110,15 +110,13 @@ impl<'ctx> MetadataValue<'ctx> {
110110
}
111111

112112
let count = self.get_node_size() as usize;
113-
let mut raw_vec: Vec<LLVMValueRef> = Vec::with_capacity(count);
114-
let ptr = raw_vec.as_mut_ptr();
113+
let mut vec: Vec<LLVMValueRef> = Vec::with_capacity(count);
114+
let ptr = vec.as_mut_ptr();
115115

116-
forget(raw_vec);
117-
118-
let vec = unsafe {
116+
unsafe {
119117
LLVMGetMDNodeOperands(self.as_value_ref(), ptr);
120118

121-
Vec::from_raw_parts(ptr, count, count)
119+
vec.set_len(count)
122120
};
123121

124122
vec.iter()

0 commit comments

Comments
 (0)