Skip to content

Commit 4b77004

Browse files
---
yaml --- r: 175762 b: refs/heads/auto c: 75ad116 h: refs/heads/master v: v3
1 parent d4ff6ad commit 4b77004

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
@@ -10,7 +10,7 @@ refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
1010
refs/tags/release-0.3.1: 495bae036dfe5ec6ceafd3312b4dca48741e845b
1111
refs/tags/release-0.4: e828ea2080499553b97dfe33b3f4d472b4562ad7
1212
refs/tags/release-0.5: 7e3bcfbf21278251ee936ad53e92e9b719702d73
13-
refs/heads/auto: 612ded78e3275332e4b68391701a2866ca3689cc
13+
refs/heads/auto: 75ad1161dd598ba0e61b9215a08216e744dd9f4c
1414
refs/heads/servo: af82457af293e2a842ba6b7759b70288da276167
1515
refs/tags/release-0.6: b4ebcfa1812664df5e142f0134a5faea3918544c
1616
refs/tags/0.1: b19db808c2793fe2976759b85a355c3ad8c8b336

branches/auto/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)