Skip to content

Commit 9b3c5a1

Browse files
---
yaml --- r: 273755 b: refs/heads/beta c: 5b08ab5 h: refs/heads/master i: 273753: 563de23 273751: ae3e7be
1 parent c6616c4 commit 9b3c5a1

File tree

34 files changed

+231
-239
lines changed

34 files changed

+231
-239
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ refs/tags/0.9: 36870b185fc5f5486636d4515f0e22677493f225
2323
refs/tags/0.10: ac33f2b15782272ae348dbd7b14b8257b2148b5a
2424
refs/tags/0.11.0: e1247cb1d0d681be034adb4b558b5a0c0d5720f9
2525
refs/tags/0.12.0: f0c419429ef30723ceaf6b42f9b5a2aeb5d2e2d1
26-
refs/heads/beta: a48c9a11a63aba48eacbeef36c340c5c59c56b83
26+
refs/heads/beta: 5b08ab50f783bc8e52655f05c98f4da19881d7f3
2727
refs/tags/1.0.0-alpha: e42bd6d93a1d3433c486200587f8f9e12590a4d7
2828
refs/heads/tmp: e06d2ad9fcd5027bcaac5b08fc9aa39a49d0ecd3
2929
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f

branches/beta/configure

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1252,7 +1252,7 @@ $ pacman -R cmake && pacman -S mingw-w64-x86_64-cmake
12521252
bits=x86_64
12531253
msvc_part=amd64
12541254
;;
1255-
i*86-*)
1255+
i686-*)
12561256
bits=i386
12571257
msvc_part=
12581258
;;

branches/beta/mk/crates.mk

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,11 @@ TARGET_CRATES := libc std term \
5353
getopts collections test rand \
5454
core alloc \
5555
rustc_unicode rustc_bitflags \
56-
alloc_system alloc_jemalloc
56+
alloc_system alloc_jemalloc rustc_const_eval
5757
RUSTC_CRATES := rustc rustc_typeck rustc_mir rustc_borrowck rustc_resolve rustc_driver \
5858
rustc_trans rustc_back rustc_llvm rustc_privacy rustc_lint \
5959
rustc_data_structures rustc_front rustc_platform_intrinsics \
60-
rustc_plugin rustc_metadata rustc_passes rustc_save_analysis \
61-
rustc_const_eval
60+
rustc_plugin rustc_metadata rustc_passes rustc_save_analysis
6261
HOST_CRATES := syntax syntax_ext $(RUSTC_CRATES) rustdoc fmt_macros \
6362
flate arena graphviz rbml log serialize
6463
TOOLS := compiletest rustdoc rustc rustbook error_index_generator
@@ -95,9 +94,9 @@ DEPS_syntax_ext := syntax fmt_macros
9594
DEPS_rustc_const_eval := std syntax
9695

9796
DEPS_rustc := syntax fmt_macros flate arena serialize getopts rbml rustc_front\
98-
log graphviz rustc_back rustc_data_structures\
97+
log graphviz rustc_llvm rustc_back rustc_data_structures\
9998
rustc_const_eval
100-
DEPS_rustc_back := std syntax rustc_front flate log libc
99+
DEPS_rustc_back := std syntax rustc_llvm rustc_front flate log libc
101100
DEPS_rustc_borrowck := rustc rustc_front rustc_mir log graphviz syntax
102101
DEPS_rustc_data_structures := std log serialize
103102
DEPS_rustc_driver := arena flate getopts graphviz libc rustc rustc_back rustc_borrowck \
@@ -111,7 +110,7 @@ DEPS_rustc_metadata := rustc rustc_front syntax rbml rustc_const_eval
111110
DEPS_rustc_passes := syntax rustc core rustc_front
112111
DEPS_rustc_mir := rustc rustc_front syntax rustc_const_eval
113112
DEPS_rustc_resolve := arena rustc rustc_front log syntax
114-
DEPS_rustc_platform_intrinsics := std
113+
DEPS_rustc_platform_intrinsics := rustc rustc_llvm
115114
DEPS_rustc_plugin := rustc rustc_metadata syntax rustc_mir
116115
DEPS_rustc_privacy := rustc rustc_front log syntax
117116
DEPS_rustc_trans := arena flate getopts graphviz libc rustc rustc_back rustc_mir \

branches/beta/mk/main.mk

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ endif
493493
LD_LIBRARY_PATH_ENV_HOSTDIR$(1)_T_$(2)_H_$(3) := \
494494
$$(CURDIR)/$$(HLIB$(1)_H_$(3)):$$(CFG_LLVM_INST_DIR_$(3))/lib
495495
LD_LIBRARY_PATH_ENV_TARGETDIR$(1)_T_$(2)_H_$(3) := \
496-
$$(CURDIR)/$$(TLIB$(1)_T_$(2)_H_$(3))
496+
$$(CURDIR)/$$(TLIB$(1)_T_$(2)_H_$(CFG_BUILD))
497497

498498
HOST_RPATH_VAR$(1)_T_$(2)_H_$(3) := \
499499
$$(LD_LIBRARY_PATH_ENV_NAME$(1)_T_$(2)_H_$(3))=$$(LD_LIBRARY_PATH_ENV_HOSTDIR$(1)_T_$(2)_H_$(3)):$$$$$$(LD_LIBRARY_PATH_ENV_NAME$(1)_T_$(2)_H_$(3))
@@ -506,14 +506,18 @@ RPATH_VAR$(1)_T_$(2)_H_$(3) := $$(HOST_RPATH_VAR$(1)_T_$(2)_H_$(3))
506506
# if you're building a cross config, the host->* parts are
507507
# effectively stage1, since it uses the just-built stage0.
508508
#
509-
# Also be sure to use the right rpath because we're loading libraries from the
510-
# CFG_BUILD's stage1 directory for our target, so switch this one instance of
511-
# `RPATH_VAR` to get the bootstrap working.
509+
# This logic is similar to how the LD_LIBRARY_PATH variable must
510+
# change be slightly different when doing cross compilations.
511+
# The build doesn't copy over all target libraries into
512+
# a new directory, so we need to point the library path at
513+
# the build directory where all the target libraries came
514+
# from (the stage0 build host). Otherwise the relative rpaths
515+
# inside of the rustc binary won't get resolved correctly.
512516
ifeq ($(1),0)
513517
ifneq ($(strip $(CFG_BUILD)),$(strip $(3)))
514518
CFGFLAG$(1)_T_$(2)_H_$(3) = stage1
515519

516-
RPATH_VAR$(1)_T_$(2)_H_$(3) := $$(TARGET_RPATH_VAR1_T_$(2)_H_$$(CFG_BUILD))
520+
RPATH_VAR$(1)_T_$(2)_H_$(3) := $$(TARGET_RPATH_VAR$(1)_T_$(2)_H_$(3))
517521
endif
518522
endif
519523

branches/beta/mk/rt.mk

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,11 +236,11 @@ COMPRT_LIB_$(1) := $$(RT_OUTPUT_DIR_$(1))/$$(COMPRT_NAME_$(1))
236236
COMPRT_BUILD_DIR_$(1) := $$(RT_OUTPUT_DIR_$(1))/compiler-rt
237237

238238
ifeq ($$(findstring msvc,$(1)),msvc)
239-
$$(COMPRT_LIB_$(1)): $$(COMPRT_DEPS) $$(MKFILE_DEPS) $$(LLVM_CONFIG_$$(CFG_BUILD))
239+
$$(COMPRT_LIB_$(1)): $$(COMPRT_DEPS) $$(MKFILE_DEPS) $$(LLVM_CONFIG_$(1))
240240
@$$(call E, cmake: compiler-rt)
241241
$$(Q)cd "$$(COMPRT_BUILD_DIR_$(1))"; $$(CFG_CMAKE) "$(S)src/compiler-rt" \
242242
-DCMAKE_BUILD_TYPE=$$(LLVM_BUILD_CONFIG_MODE) \
243-
-DLLVM_CONFIG_PATH=$$(LLVM_CONFIG_$$(CFG_BUILD)) \
243+
-DLLVM_CONFIG_PATH=$$(LLVM_CONFIG_$(1)) \
244244
-G"$$(CFG_CMAKE_GENERATOR)"
245245
$$(Q)$$(CFG_CMAKE) --build "$$(COMPRT_BUILD_DIR_$(1))" \
246246
--target lib/builtins/builtins \

branches/beta/src/etc/platform-intrinsics/generator.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -759,11 +759,12 @@ def open(self, platform):
759759
760760
use {{Intrinsic, Type}};
761761
use IntrinsicDef::Named;
762+
use rustc::middle::ty::TyCtxt;
762763
763764
// The default inlining settings trigger a pathological behaviour in
764765
// LLVM, which causes makes compilation very slow. See #28273.
765766
#[inline(never)]
766-
pub fn find(name: &str) -> Option<Intrinsic> {{
767+
pub fn find<'tcx>(_tcx: &TyCtxt<'tcx>, name: &str) -> Option<Intrinsic> {{
767768
if !name.starts_with("{0}") {{ return None }}
768769
Some(match &name["{0}".len()..] {{'''.format(platform.intrinsic_prefix())
769770

branches/beta/src/libcore/ptr.rs

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,16 @@ pub unsafe fn write_volatile<T>(dst: *mut T, src: T) {
212212
#[lang = "const_ptr"]
213213
impl<T: ?Sized> *const T {
214214
/// Returns true if the pointer is null.
215+
///
216+
/// # Examples
217+
///
218+
/// Basic usage:
219+
///
220+
/// ```
221+
/// let s: &str = "Follow the rabbit";
222+
/// let ptr: *const u8 = s.as_ptr();
223+
/// assert!(ptr.is_null() == false);
224+
/// ```
215225
#[stable(feature = "rust1", since = "1.0.0")]
216226
#[inline]
217227
pub fn is_null(self) -> bool where T: Sized {
@@ -227,6 +237,20 @@ impl<T: ?Sized> *const T {
227237
/// null-safety, it is important to note that this is still an unsafe
228238
/// operation because the returned value could be pointing to invalid
229239
/// memory.
240+
///
241+
/// # Examples
242+
///
243+
/// Basic usage:
244+
///
245+
/// ```ignore
246+
/// let val: *const u8 = &10u8 as *const u8;
247+
///
248+
/// unsafe {
249+
/// if let Some(val_back) = val.as_ref() {
250+
/// println!("We got back the value: {}!", val_back);
251+
/// }
252+
/// }
253+
/// ```
230254
#[unstable(feature = "ptr_as_ref",
231255
reason = "Option is not clearly the right return type, and we \
232256
may want to tie the return lifetime to a borrow of \
@@ -250,6 +274,20 @@ impl<T: ?Sized> *const T {
250274
/// byte past the end of an allocated object. If either pointer is out of
251275
/// bounds or arithmetic overflow occurs then
252276
/// any further use of the returned value will result in undefined behavior.
277+
///
278+
/// # Examples
279+
///
280+
/// Basic usage:
281+
///
282+
/// ```
283+
/// let s: &str = "123";
284+
/// let ptr: *const u8 = s.as_ptr();
285+
///
286+
/// unsafe {
287+
/// println!("{}", *ptr.offset(1) as char);
288+
/// println!("{}", *ptr.offset(2) as char);
289+
/// }
290+
/// ```
253291
#[stable(feature = "rust1", since = "1.0.0")]
254292
#[inline]
255293
pub unsafe fn offset(self, count: isize) -> *const T where T: Sized {
@@ -260,6 +298,16 @@ impl<T: ?Sized> *const T {
260298
#[lang = "mut_ptr"]
261299
impl<T: ?Sized> *mut T {
262300
/// Returns true if the pointer is null.
301+
///
302+
/// # Examples
303+
///
304+
/// Basic usage:
305+
///
306+
/// ```
307+
/// let mut s = [1, 2, 3];
308+
/// let ptr: *mut u32 = s.as_mut_ptr();
309+
/// assert!(ptr.is_null() == false);
310+
/// ```
263311
#[stable(feature = "rust1", since = "1.0.0")]
264312
#[inline]
265313
pub fn is_null(self) -> bool where T: Sized {
@@ -275,6 +323,20 @@ impl<T: ?Sized> *mut T {
275323
/// null-safety, it is important to note that this is still an unsafe
276324
/// operation because the returned value could be pointing to invalid
277325
/// memory.
326+
///
327+
/// # Examples
328+
///
329+
/// Basic usage:
330+
///
331+
/// ```ignore
332+
/// let val: *mut u8 = &mut 10u8 as *mut u8;
333+
///
334+
/// unsafe {
335+
/// if let Some(val_back) = val.as_ref() {
336+
/// println!("We got back the value: {}!", val_back);
337+
/// }
338+
/// }
339+
/// ```
278340
#[unstable(feature = "ptr_as_ref",
279341
reason = "Option is not clearly the right return type, and we \
280342
may want to tie the return lifetime to a borrow of \
@@ -297,6 +359,20 @@ impl<T: ?Sized> *mut T {
297359
/// The offset must be in-bounds of the object, or one-byte-past-the-end.
298360
/// Otherwise `offset` invokes Undefined Behavior, regardless of whether
299361
/// the pointer is used.
362+
///
363+
/// # Examples
364+
///
365+
/// Basic usage:
366+
///
367+
/// ```
368+
/// let mut s = [1, 2, 3];
369+
/// let ptr: *mut u32 = s.as_mut_ptr();
370+
///
371+
/// unsafe {
372+
/// println!("{}", *ptr.offset(1));
373+
/// println!("{}", *ptr.offset(2));
374+
/// }
375+
/// ```
300376
#[stable(feature = "rust1", since = "1.0.0")]
301377
#[inline]
302378
pub unsafe fn offset(self, count: isize) -> *mut T where T: Sized {
@@ -310,6 +386,15 @@ impl<T: ?Sized> *mut T {
310386
///
311387
/// As with `as_ref`, this is unsafe because it cannot verify the validity
312388
/// of the returned pointer.
389+
///
390+
/// # Examples
391+
///
392+
/// Basic usage:
393+
///
394+
/// ```
395+
/// let mut s = [1, 2, 3];
396+
/// let ptr: *mut u32 = s.as_mut_ptr();
397+
/// ```
313398
#[unstable(feature = "ptr_as_ref",
314399
reason = "return value does not necessarily convey all possible \
315400
information",

branches/beta/src/librustc/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@ rustc_bitflags = { path = "../librustc_bitflags" }
2121
rustc_const_eval = { path = "../librustc_const_eval" }
2222
rustc_data_structures = { path = "../librustc_data_structures" }
2323
rustc_front = { path = "../librustc_front" }
24+
rustc_llvm = { path = "../librustc_llvm" }
2425
serialize = { path = "../libserialize" }
2526
syntax = { path = "../libsyntax" }

branches/beta/src/librustc/infer/mod.rs

Lines changed: 49 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,33 @@ pub fn normalizing_infer_ctxt<'a, 'tcx>(tcx: &'a TyCtxt<'tcx>,
386386
infcx
387387
}
388388

389+
/// Computes the least upper-bound of `a` and `b`. If this is not possible, reports an error and
390+
/// returns ty::err.
391+
pub fn common_supertype<'a, 'tcx>(cx: &InferCtxt<'a, 'tcx>,
392+
origin: TypeOrigin,
393+
a_is_expected: bool,
394+
a: Ty<'tcx>,
395+
b: Ty<'tcx>)
396+
-> Ty<'tcx>
397+
{
398+
debug!("common_supertype({:?}, {:?})",
399+
a, b);
400+
401+
let trace = TypeTrace {
402+
origin: origin,
403+
values: Types(expected_found(a_is_expected, a, b))
404+
};
405+
406+
let result = cx.commit_if_ok(|_| cx.lub(a_is_expected, trace.clone()).relate(&a, &b));
407+
match result {
408+
Ok(t) => t,
409+
Err(ref err) => {
410+
cx.report_and_explain_type_error(trace, err).emit();
411+
cx.tcx.types.err
412+
}
413+
}
414+
}
415+
389416
pub fn mk_subty<'a, 'tcx>(cx: &InferCtxt<'a, 'tcx>,
390417
a_is_expected: bool,
391418
origin: TypeOrigin,
@@ -407,7 +434,7 @@ pub fn can_mk_subty<'a, 'tcx>(cx: &InferCtxt<'a, 'tcx>,
407434
origin: TypeOrigin::Misc(codemap::DUMMY_SP),
408435
values: Types(expected_found(true, a, b))
409436
};
410-
cx.sub(true, trace, &a, &b).map(|_| ())
437+
cx.sub(true, trace).relate(&a, &b).map(|_| ())
411438
})
412439
}
413440

@@ -668,32 +695,32 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
668695
cause: None}
669696
}
670697

671-
pub fn equate<T>(&'a self, a_is_expected: bool, trace: TypeTrace<'tcx>, a: &T, b: &T)
672-
-> RelateResult<'tcx, T>
673-
where T: Relate<'a, 'tcx>
698+
// public so that it can be used from the rustc_driver unit tests
699+
pub fn equate(&'a self, a_is_expected: bool, trace: TypeTrace<'tcx>)
700+
-> equate::Equate<'a, 'tcx>
674701
{
675-
self.combine_fields(a_is_expected, trace).equate().relate(a, b)
702+
self.combine_fields(a_is_expected, trace).equate()
676703
}
677704

678-
pub fn sub<T>(&'a self, a_is_expected: bool, trace: TypeTrace<'tcx>, a: &T, b: &T)
679-
-> RelateResult<'tcx, T>
680-
where T: Relate<'a, 'tcx>
705+
// public so that it can be used from the rustc_driver unit tests
706+
pub fn sub(&'a self, a_is_expected: bool, trace: TypeTrace<'tcx>)
707+
-> sub::Sub<'a, 'tcx>
681708
{
682-
self.combine_fields(a_is_expected, trace).sub().relate(a, b)
709+
self.combine_fields(a_is_expected, trace).sub()
683710
}
684711

685-
pub fn lub<T>(&'a self, a_is_expected: bool, trace: TypeTrace<'tcx>, a: &T, b: &T)
686-
-> RelateResult<'tcx, T>
687-
where T: Relate<'a, 'tcx>
712+
// public so that it can be used from the rustc_driver unit tests
713+
pub fn lub(&'a self, a_is_expected: bool, trace: TypeTrace<'tcx>)
714+
-> lub::Lub<'a, 'tcx>
688715
{
689-
self.combine_fields(a_is_expected, trace).lub().relate(a, b)
716+
self.combine_fields(a_is_expected, trace).lub()
690717
}
691718

692-
pub fn glb<T>(&'a self, a_is_expected: bool, trace: TypeTrace<'tcx>, a: &T, b: &T)
693-
-> RelateResult<'tcx, T>
694-
where T: Relate<'a, 'tcx>
719+
// public so that it can be used from the rustc_driver unit tests
720+
pub fn glb(&'a self, a_is_expected: bool, trace: TypeTrace<'tcx>)
721+
-> glb::Glb<'a, 'tcx>
695722
{
696-
self.combine_fields(a_is_expected, trace).glb().relate(a, b)
723+
self.combine_fields(a_is_expected, trace).glb()
697724
}
698725

699726
fn start_snapshot(&self) -> CombinedSnapshot {
@@ -834,7 +861,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
834861
debug!("sub_types({:?} <: {:?})", a, b);
835862
self.commit_if_ok(|_| {
836863
let trace = TypeTrace::types(origin, a_is_expected, a, b);
837-
self.sub(a_is_expected, trace, &a, &b).map(|_| ())
864+
self.sub(a_is_expected, trace).relate(&a, &b).map(|_| ())
838865
})
839866
}
840867

@@ -847,7 +874,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
847874
{
848875
self.commit_if_ok(|_| {
849876
let trace = TypeTrace::types(origin, a_is_expected, a, b);
850-
self.equate(a_is_expected, trace, &a, &b).map(|_| ())
877+
self.equate(a_is_expected, trace).relate(&a, &b).map(|_| ())
851878
})
852879
}
853880

@@ -866,7 +893,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
866893
origin: origin,
867894
values: TraitRefs(expected_found(a_is_expected, a.clone(), b.clone()))
868895
};
869-
self.equate(a_is_expected, trace, &a, &b).map(|_| ())
896+
self.equate(a_is_expected, trace).relate(&a, &b).map(|_| ())
870897
})
871898
}
872899

@@ -885,7 +912,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
885912
origin: origin,
886913
values: PolyTraitRefs(expected_found(a_is_expected, a.clone(), b.clone()))
887914
};
888-
self.sub(a_is_expected, trace, &a, &b).map(|_| ())
915+
self.sub(a_is_expected, trace).relate(&a, &b).map(|_| ())
889916
})
890917
}
891918

@@ -1434,7 +1461,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
14341461
origin: TypeOrigin::Misc(codemap::DUMMY_SP),
14351462
values: Types(expected_found(true, e, e))
14361463
};
1437-
self.equate(true, trace, a, b)
1464+
self.equate(true, trace).relate(a, b)
14381465
}).map(|_| ())
14391466
}
14401467

0 commit comments

Comments
 (0)