Skip to content

Commit 58585c3

Browse files
---
yaml --- r: 182698 b: refs/heads/beta c: 75ad116 h: refs/heads/master v: v3
1 parent 015c4b7 commit 58585c3

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ refs/heads/automation-fail: 1bf06495443584539b958873e04cc2f864ab10e4
3131
refs/heads/issue-18208-method-dispatch-3-quick-reject: 2009f85b9f99dedcec4404418eda9ddba90258a2
3232
refs/heads/batch: b7fd822592a4fb577552d93010c4a4e14f314346
3333
refs/heads/building: 126db549b038c84269a1e4fe46f051b2c15d6970
34-
refs/heads/beta: 612ded78e3275332e4b68391701a2866ca3689cc
34+
refs/heads/beta: 75ad1161dd598ba0e61b9215a08216e744dd9f4c
3535
refs/heads/windistfix: 7608dbad651f02e837ed05eef3d74a6662a6e928
3636
refs/tags/1.0.0-alpha: e42bd6d93a1d3433c486200587f8f9e12590a4d7
3737
refs/heads/tmp: eb836bf767aa1d8d4cba488a9091cde3c0ab4b2f

branches/beta/src/librustc_trans/trans/debuginfo.rs

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ use session::config::{self, FullDebugInfo, LimitedDebugInfo, NoDebugInfo};
207207
use util::nodemap::{DefIdMap, NodeMap, FnvHashMap, FnvHashSet};
208208
use util::ppaux;
209209

210-
use libc::c_uint;
210+
use libc::{c_uint, c_longlong};
211211
use std::ffi::CString;
212212
use std::cell::{Cell, RefCell};
213213
use std::ptr;
@@ -2764,7 +2764,7 @@ fn create_struct_stub(cx: &CrateContext,
27642764
fn fixed_vec_metadata<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>,
27652765
unique_type_id: UniqueTypeId,
27662766
element_type: Ty<'tcx>,
2767-
len: uint,
2767+
len: Option<u64>,
27682768
span: Span)
27692769
-> MetadataCreationResult {
27702770
let element_type_metadata = type_metadata(cx, element_type, span);
@@ -2774,18 +2774,20 @@ fn fixed_vec_metadata<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>,
27742774
let element_llvm_type = type_of::type_of(cx, element_type);
27752775
let (element_type_size, element_type_align) = size_and_align_of(cx, element_llvm_type);
27762776

2777+
let (array_size_in_bytes, upper_bound) = match len {
2778+
Some(len) => (element_type_size * len, len as c_longlong),
2779+
None => (0, -1)
2780+
};
2781+
27772782
let subrange = unsafe {
2778-
llvm::LLVMDIBuilderGetOrCreateSubrange(
2779-
DIB(cx),
2780-
0,
2781-
len as i64)
2783+
llvm::LLVMDIBuilderGetOrCreateSubrange(DIB(cx), 0, upper_bound)
27822784
};
27832785

27842786
let subscripts = create_DIArray(DIB(cx), &[subrange]);
27852787
let metadata = unsafe {
27862788
llvm::LLVMDIBuilderCreateArrayType(
27872789
DIB(cx),
2788-
bytes_to_bits(element_type_size * (len as u64)),
2790+
bytes_to_bits(array_size_in_bytes),
27892791
bytes_to_bits(element_type_align),
27902792
element_type_metadata,
27912793
subscripts)
@@ -2991,12 +2993,12 @@ fn type_metadata<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>,
29912993
ty::ty_enum(def_id, _) => {
29922994
prepare_enum_metadata(cx, t, def_id, unique_type_id, usage_site_span).finalize(cx)
29932995
}
2994-
ty::ty_vec(typ, Some(len)) => {
2995-
fixed_vec_metadata(cx, unique_type_id, typ, len, usage_site_span)
2996+
ty::ty_vec(typ, len) => {
2997+
fixed_vec_metadata(cx, unique_type_id, typ, len.map(|x| x as u64), usage_site_span)
2998+
}
2999+
ty::ty_str => {
3000+
fixed_vec_metadata(cx, unique_type_id, cx.tcx().types.i8, None, usage_site_span)
29963001
}
2997-
// FIXME Can we do better than this for unsized vec/str fields?
2998-
ty::ty_vec(typ, None) => fixed_vec_metadata(cx, unique_type_id, typ, 0, usage_site_span),
2999-
ty::ty_str => fixed_vec_metadata(cx, unique_type_id, cx.tcx().types.i8, 0, usage_site_span),
30003002
ty::ty_trait(..) => {
30013003
MetadataCreationResult::new(
30023004
trait_pointer_metadata(cx, t, None, unique_type_id),

0 commit comments

Comments
 (0)