Skip to content

Commit 24c3d0e

Browse files
committed
---
yaml --- r: 152512 b: refs/heads/try2 c: 2c6caad h: refs/heads/master v: v3
1 parent 0724393 commit 24c3d0e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+1336
-432
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: 0188bebbb703baa7d3cc9608196d9cbd7707a1e0
8+
refs/heads/try2: 2c6caad1bab0660ce8b4797c10d5530964d6e8d9
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/configure

Lines changed: 19 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,6 @@ opt mingw-cross 0 "cross-compile for win32 using mingw"
416416
opt clang 0 "prefer clang to gcc for building the runtime"
417417
opt ccache 0 "invoke gcc/clang via ccache to reuse object files between builds"
418418
opt local-rust 0 "use an installed rustc rather than downloading a snapshot"
419-
opt pax-flags 0 "apply PaX flags to rustc binaries (required for GRSecurity/PaX-patched kernels)"
420419
opt inject-std-version 1 "inject the current compiler version of libstd into programs"
421420
opt llvm-static-stdcpp 0 "statically link to libstdc++ for LLVM"
422421
opt rpath 1 "build rpaths into rustc itself"
@@ -518,12 +517,6 @@ then
518517
fi
519518
fi
520519

521-
if [ "$CFG_OSTYPE" = "unknown-linux-gnu" ]
522-
then
523-
probe CFG_PAXCTL paxctl /sbin/paxctl
524-
probe CFG_ZCAT zcat
525-
fi
526-
527520
step_msg "looking for target specific programs"
528521

529522
probe CFG_ADB adb
@@ -546,51 +539,6 @@ then
546539
fi
547540
fi
548541

549-
if [ "$CFG_OSTYPE" = "unknown-linux-gnu" ]
550-
then
551-
if [ ! -z "$CFG_ENABLE_PAX_FLAGS" -a -z "$CFG_PAXCTL" ]
552-
then
553-
err "enabled PaX markings but no paxctl binary found"
554-
fi
555-
556-
if [ -z "$CFG_DISABLE_PAX_FLAGS" ]
557-
then
558-
# GRSecurity/PaX detection. This can be very flaky.
559-
GRSEC_DETECTED=
560-
561-
# /dev/grsec only exists if CONFIG_GRKERNSEC_NO_RBAC is not set.
562-
# /proc/sys/kernel/grsecurity is not available if ÇONFIG_GRKERNSEC_SYSCTL is not set.
563-
if [ -e /dev/grsec -o -d /proc/sys/kernel/grsecurity ]
564-
then
565-
GRSEC_DETECTED=1
566-
# /proc/config.gz is normally only available to root, and only if CONFIG_IKCONFIG_PROC has been set.
567-
elif [ -r /proc/config.gz -a ! -z "$CFG_ZCAT" ]
568-
then
569-
if "$CFG_ZCAT" /proc/config.gz | grep --quiet "CONFIG_GRKERNSEC=y"
570-
then
571-
GRSEC_DETECTED=1
572-
fi
573-
# Flaky.
574-
elif grep --quiet grsec /proc/version
575-
then
576-
GRSEC_DETECTED=1
577-
fi
578-
579-
if [ ! -z "$GRSEC_DETECTED" ]
580-
then
581-
step_msg "GRSecurity: yes"
582-
if [ ! -z "$CFG_PAXCTL" ]
583-
then
584-
CFG_ENABLE_PAX_FLAGS=1
585-
else
586-
warn "GRSecurity kernel detected but no paxctl binary found: not setting CFG_ENABLE_PAX_FLAGS"
587-
fi
588-
else
589-
step_msg "GRSecurity: no"
590-
fi
591-
fi
592-
fi
593-
594542
BIN_SUF=
595543
if [ "$CFG_OSTYPE" = "pc-mingw32" ] || [ "$CFG_OSTYPE" = "w64-mingw32" ]
596544
then
@@ -942,16 +890,33 @@ then
942890
msg "git: submodule sync"
943891
"${CFG_GIT}" submodule sync
944892

893+
msg "git: submodule init"
894+
"${CFG_GIT}" submodule init
895+
896+
# Disable submodules that we're not using
897+
if [ ! -z "${CFG_LLVM_ROOT}" ]; then
898+
msg "git: submodule deinit src/llvm"
899+
"${CFG_GIT}" submodule deinit src/llvm
900+
fi
901+
if [ ! -z "${CFG_JEMALLOC_ROOT}" ]; then
902+
msg "git: submodule deinit src/jemalloc"
903+
"${CFG_GIT}" submodule deinit src/jemalloc
904+
fi
905+
if [ ! -z "${CFG_LIBUV_ROOT}" ]; then
906+
msg "git: submodule deinit src/libuv"
907+
"${CFG_GIT}" submodule deinit src/libuv
908+
fi
909+
945910
msg "git: submodule update"
946-
"${CFG_GIT}" submodule update --init
911+
"${CFG_GIT}" submodule update
947912
need_ok "git failed"
948913

949914
msg "git: submodule foreach sync"
950915
"${CFG_GIT}" submodule foreach --recursive 'if test -e .gitmodules; then git submodule sync; fi'
951916
need_ok "git failed"
952917

953918
msg "git: submodule foreach update"
954-
"${CFG_GIT}" submodule update --init --recursive
919+
"${CFG_GIT}" submodule update --recursive
955920
need_ok "git failed"
956921

957922
# NB: this is just for the sake of getting the submodule SHA1 values

branches/try2/mk/stage0.mk

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@ ifdef CFG_ENABLE_LOCAL_RUST
1818
$(Q)$(S)src/etc/local_stage0.sh $(CFG_BUILD) $(CFG_LOCAL_RUST_ROOT) rustlib
1919
else
2020
$(Q)$(CFG_PYTHON) $(S)src/etc/get-snapshot.py $(CFG_BUILD) $(SNAPSHOT_FILE)
21-
ifdef CFG_ENABLE_PAX_FLAGS
22-
@$(call E, apply PaX flags: $@)
23-
@"$(CFG_PAXCTL)" -cm "$@"
24-
endif
2521
endif
2622
$(Q)touch $@
2723

branches/try2/src/libcollections/slice.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2034,6 +2034,16 @@ mod tests {
20342034
assert!(xs == [1,2,0,4,3,0,0,6,5,0]);
20352035
}
20362036

2037+
#[test]
2038+
fn test_get_mut() {
2039+
let mut v = [0,1,2];
2040+
assert_eq!(v.get_mut(3), None);
2041+
v.get_mut(1).map(|e| *e = 7);
2042+
assert_eq!(v[1], 7);
2043+
let mut x = 2;
2044+
assert_eq!(v.get_mut(2), Some(&mut x));
2045+
}
2046+
20372047
#[test]
20382048
fn test_mut_chunks() {
20392049
let mut v = [0u8, 1, 2, 3, 4, 5, 6];

branches/try2/src/libcollections/treemap.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,7 @@ pub struct IntersectionItems<'a, T> {
761761
b: Peekable<&'a T, SetItems<'a, T>>,
762762
}
763763

764-
/// Lazy iterator producing elements in the set intersection (in-order)
764+
/// Lazy iterator producing elements in the set union (in-order)
765765
pub struct UnionItems<'a, T> {
766766
a: Peekable<&'a T, SetItems<'a, T>>,
767767
b: Peekable<&'a T, SetItems<'a, T>>,

branches/try2/src/libcore/any.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11-
//! Traits for dynamic typing of any type (through runtime reflection)
11+
//! Traits for dynamic typing of any `'static` type (through runtime reflection)
1212
//!
1313
//! This module implements the `Any` trait, which enables dynamic typing
14-
//! of any type, through runtime reflection.
14+
//! of any `'static` type through runtime reflection.
1515
//!
1616
//! `Any` itself can be used to get a `TypeId`, and has more features when used as a trait object.
1717
//! As `&Any` (a borrowed trait object), it has the `is` and `as_ref` methods, to test if the
@@ -32,8 +32,10 @@ pub enum Void { }
3232
// Any trait
3333
///////////////////////////////////////////////////////////////////////////////
3434

35-
/// The `Any` trait is implemented by all types, and can be used as a trait object
36-
/// for dynamic typing
35+
/// The `Any` trait is implemented by all `'static` types, and can be used for dynamic typing
36+
///
37+
/// Every type with no non-`'static` references implements `Any`, so `Any` can be used as a trait
38+
/// object to emulate the effects dynamic typing.
3739
pub trait Any {
3840
/// Get the `TypeId` of `self`
3941
fn get_type_id(&self) -> TypeId;
@@ -261,6 +263,14 @@ mod tests {
261263
let s = format!("{}", b);
262264
assert_eq!(s.as_slice(), "&Any");
263265
}
266+
267+
#[test]
268+
fn any_fixed_vec() {
269+
let test = [0u, ..8];
270+
let test = &test as &Any;
271+
assert!(test.is::<[uint, ..8]>());
272+
assert!(!test.is::<[uint, ..10]>());
273+
}
264274
}
265275

266276
#[cfg(test)]

branches/try2/src/libcore/intrinsics.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,20 @@ extern "rust-intrinsic" {
307307
/// `forget` is unsafe because the caller is responsible for
308308
/// ensuring the argument is deallocated already.
309309
pub fn forget<T>(_: T) -> ();
310+
311+
/// Unsafely transforms a value of one type into a value of another type.
312+
///
313+
/// Both types must have the same size and alignment, and this guarantee
314+
/// is enforced at compile-time.
315+
///
316+
/// # Example
317+
///
318+
/// ```rust
319+
/// use std::mem;
320+
///
321+
/// let v: &[u8] = unsafe { mem::transmute("L") };
322+
/// assert!(v == [76u8]);
323+
/// ```
310324
pub fn transmute<T,U>(e: T) -> U;
311325

312326
/// Returns `true` if a type requires drop glue.

branches/try2/src/libcore/mem.rs

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ use ptr;
1717
use intrinsics;
1818
use intrinsics::{bswap16, bswap32, bswap64};
1919

20+
pub use intrinsics::transmute;
21+
2022
/// Returns the size of a type in bytes.
2123
#[inline]
2224
#[stable]
@@ -412,29 +414,6 @@ pub fn drop<T>(_x: T) { }
412414
#[stable]
413415
pub unsafe fn forget<T>(thing: T) { intrinsics::forget(thing) }
414416

415-
/// Unsafely transforms a value of one type into a value of another type.
416-
///
417-
/// Both types must have the same size and alignment, and this guarantee is
418-
/// enforced at compile-time.
419-
///
420-
/// # Example
421-
///
422-
/// ```rust
423-
/// use std::mem;
424-
///
425-
/// let v: &[u8] = unsafe { mem::transmute("L") };
426-
/// assert!(v == [76u8]);
427-
/// ```
428-
#[inline]
429-
#[unstable = "this function will be modified to reject invocations of it which \
430-
cannot statically prove that T and U are the same size. For \
431-
example, this function, as written today, will be rejected in \
432-
the future because the size of T and U cannot be statically \
433-
known to be the same"]
434-
pub unsafe fn transmute<T, U>(thing: T) -> U {
435-
intrinsics::transmute(thing)
436-
}
437-
438417
/// Interprets `src` as `&U`, and then reads `src` without moving the contained
439418
/// value.
440419
///

branches/try2/src/libcore/num/int_macros.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,33 @@ mod tests {
113113
assert!((0b1111001 as $T).count_zeros() == BITS as $T - 5);
114114
}
115115

116+
#[test]
117+
fn test_swap_bytes() {
118+
let n: $T = 0b0101100; assert_eq!(n.swap_bytes().swap_bytes(), n);
119+
let n: $T = 0b0100001; assert_eq!(n.swap_bytes().swap_bytes(), n);
120+
let n: $T = 0b1111001; assert_eq!(n.swap_bytes().swap_bytes(), n);
121+
122+
// Swapping these should make no difference
123+
let n: $T = 0; assert_eq!(n.swap_bytes(), n);
124+
let n: $T = -1; assert_eq!(n.swap_bytes(), n);
125+
}
126+
127+
#[test]
128+
fn test_rotate() {
129+
let n: $T = 0b0101100; assert_eq!(n.rotate_left(6).rotate_right(2).rotate_right(4), n);
130+
let n: $T = 0b0100001; assert_eq!(n.rotate_left(3).rotate_left(2).rotate_right(5), n);
131+
let n: $T = 0b1111001; assert_eq!(n.rotate_left(6).rotate_right(2).rotate_right(4), n);
132+
133+
// Rotating these should make no difference
134+
//
135+
// We test using 124 bits because to ensure that overlong bit shifts do
136+
// not cause undefined behaviour. See #10183.
137+
let n: $T = 0; assert_eq!(n.rotate_left(124), n);
138+
let n: $T = -1; assert_eq!(n.rotate_left(124), n);
139+
let n: $T = 0; assert_eq!(n.rotate_right(124), n);
140+
let n: $T = -1; assert_eq!(n.rotate_right(124), n);
141+
}
142+
116143
#[test]
117144
fn test_signed_checked_div() {
118145
assert!(10i.checked_div(&2) == Some(5));

0 commit comments

Comments
 (0)