Skip to content

Commit b0c692a

Browse files
committed
---
yaml --- r: 226263 b: refs/heads/snap-stage3 c: 4b4119d h: refs/heads/master i: 226261: 658e402 226259: a818ec6 226255: ef36087 v: v3
1 parent 2377f3b commit b0c692a

File tree

149 files changed

+2110
-988
lines changed

Some content is hidden

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

149 files changed

+2110
-988
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
refs/heads/master: e5d90d98402475b6e154ce216f9efcb80da1a747
3-
refs/heads/snap-stage3: cf1ff56f3c8a7a55fa38bcdda3907147d25382a2
3+
refs/heads/snap-stage3: 4b4119d5c082e02f34b8ffb9aff41c8a71f30a13
44
refs/heads/try: b53c0f93eedcdedd4fd89bccc5a3a09d1c5cd23e
55
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
66
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596

branches/snap-stage3/configure

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,9 @@ valopt llvm-root "" "set LLVM root"
601601
valopt python "" "set path to python"
602602
valopt jemalloc-root "" "set directory where libjemalloc_pic.a is located"
603603
valopt build "${DEFAULT_BUILD}" "GNUs ./configure syntax LLVM build triple"
604-
valopt android-cross-path "/opt/ndk_standalone" "Android NDK standalone path"
604+
valopt android-cross-path "/opt/ndk_standalone" "Android NDK standalone path (deprecated)"
605+
valopt arm-linux-androideabi-ndk "" "arm-linux-androideabi NDK standalone path"
606+
valopt aarch64-linux-android-ndk "" "aarch64-linux-android NDK standalone path"
605607
valopt release-channel "dev" "the name of the release channel to build"
606608
valopt musl-root "/usr/local" "MUSL root installation directory"
607609

@@ -1112,20 +1114,24 @@ do
11121114
fi
11131115

11141116
case $i in
1115-
arm-linux-androideabi)
1116-
1117-
if [ ! -f $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-gcc ]
1118-
then
1119-
err "NDK $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-gcc not found"
1120-
fi
1121-
if [ ! -f $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-g++ ]
1122-
then
1123-
err "NDK $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-g++ not found"
1124-
fi
1125-
if [ ! -f $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-ar ]
1117+
*android*)
1118+
upper_snake_target=$(echo "$i" | tr '[:lower:]' '[:upper:]' | tr '\-' '\_')
1119+
eval ndk=\$"CFG_${upper_snake_target}_NDK"
1120+
if [ -z "$ndk" ]
11261121
then
1127-
err "NDK $CFG_ANDROID_CROSS_PATH/bin/arm-linux-androideabi-ar not found"
1122+
ndk=$CFG_ANDROID_CROSS_PATH
1123+
eval "CFG_${upper_snake_target}_NDK"=$CFG_ANDROID_CROSS_PATH
1124+
warn "generic/default Android NDK option is deprecated (use --$i-ndk option instead)"
11281125
fi
1126+
1127+
# Perform a basic sanity check of the NDK
1128+
for android_ndk_tool in "$ndk/bin/$i-gcc" "$ndk/bin/$i-g++" "$ndk/bin/$i-ar"
1129+
do
1130+
if [ ! -f $android_ndk_tool ]
1131+
then
1132+
err "NDK tool $android_ndk_tool not found (bad or missing --$i-ndk option?)"
1133+
fi
1134+
done
11291135
;;
11301136

11311137
arm-apple-darwin)
@@ -1177,8 +1183,13 @@ do
11771183
# INCLUDE and LIB variables for MSVC so we can set those in the
11781184
# build system as well.
11791185
install=$(reg QUERY \
1180-
'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0' \
1186+
'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0' \
11811187
-v InstallDir)
1188+
if [ -z "$install" ]; then
1189+
install=$(reg QUERY \
1190+
'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0' \
1191+
-v InstallDir)
1192+
fi
11821193
need_ok "couldn't find visual studio install root"
11831194
CFG_MSVC_ROOT=$(echo "$install" | grep InstallDir | sed 's/.*REG_SZ[ ]*//')
11841195
CFG_MSVC_ROOT=$(dirname "$CFG_MSVC_ROOT")
@@ -1460,12 +1471,22 @@ do
14601471

14611472
msg "configuring LLVM with:"
14621473
msg "$CMAKE_ARGS"
1474+
case "$CFG_MSVC_ROOT" in
1475+
*14.0*)
1476+
generator="Visual Studio 14 2015"
1477+
;;
1478+
*12.0*)
1479+
generator="Visual Studio 12 2013"
1480+
;;
1481+
*)
1482+
err "can't determine generator for LLVM cmake"
1483+
;;
1484+
esac
14631485
case "$t" in
14641486
x86_64-*)
1465-
generator="Visual Studio 12 2013 Win64"
1487+
generator="$generator Win64"
14661488
;;
14671489
i686-*)
1468-
generator="Visual Studio 12 2013"
14691490
;;
14701491
*)
14711492
err "can only build LLVM for x86 platforms"
@@ -1667,7 +1688,8 @@ putvar CFG_HOST
16671688
putvar CFG_TARGET
16681689
putvar CFG_LIBDIR_RELATIVE
16691690
putvar CFG_DISABLE_MANAGE_SUBMODULES
1670-
putvar CFG_ANDROID_CROSS_PATH
1691+
putvar CFG_AARCH64_LINUX_ANDROID_NDK
1692+
putvar CFG_ARM_LINUX_ANDROIDEABI_NDK
16711693
putvar CFG_MANDIR
16721694

16731695
# Avoid spurious warnings from clang by feeding it original source on

branches/snap-stage3/mk/cfg/aarch64-linux-android.mk

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# aarch64-linux-android configuration
22
# CROSS_PREFIX_aarch64-linux-android-
3-
CC_aarch64-linux-android=$(CFG_ANDROID_CROSS_PATH)/bin/aarch64-linux-android-gcc
4-
CXX_aarch64-linux-android=$(CFG_ANDROID_CROSS_PATH)/bin/aarch64-linux-android-g++
5-
CPP_aarch64-linux-android=$(CFG_ANDROID_CROSS_PATH)/bin/aarch64-linux-android-gcc -E
6-
AR_aarch64-linux-android=$(CFG_ANDROID_CROSS_PATH)/bin/aarch64-linux-android-ar
3+
CC_aarch64-linux-android=$(CFG_AARCH64_LINUX_ANDROID_NDK)/bin/aarch64-linux-android-gcc
4+
CXX_aarch64-linux-android=$(CFG_AARCH64_LINUX_ANDROID_NDK)/bin/aarch64-linux-android-g++
5+
CPP_aarch64-linux-android=$(CFG_AARCH64_LINUX_ANDROID_NDK)/bin/aarch64-linux-android-gcc -E
6+
AR_aarch64-linux-android=$(CFG_AARCH64_LINUX_ANDROID_NDK)/bin/aarch64-linux-android-ar
77
CFG_LIB_NAME_aarch64-linux-android=lib$(1).so
88
CFG_STATIC_LIB_NAME_aarch64-linux-android=lib$(1).a
99
CFG_LIB_GLOB_aarch64-linux-android=lib$(1)-*.so

branches/snap-stage3/mk/cfg/arm-linux-androideabi.mk

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# arm-linux-androideabi configuration
2-
CC_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-gcc
3-
CXX_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-g++
4-
CPP_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-gcc -E
5-
AR_arm-linux-androideabi=$(CFG_ANDROID_CROSS_PATH)/bin/arm-linux-androideabi-ar
2+
CC_arm-linux-androideabi=$(CFG_ARM_LINUX_ANDROIDEABI_NDK)/bin/arm-linux-androideabi-gcc
3+
CXX_arm-linux-androideabi=$(CFG_ARM_LINUX_ANDROIDEABI_NDK)/bin/arm-linux-androideabi-g++
4+
CPP_arm-linux-androideabi=$(CFG_ARM_LINUX_ANDROIDEABI_NDK)/bin/arm-linux-androideabi-gcc -E
5+
AR_arm-linux-androideabi=$(CFG_ARM_LINUX_ANDROIDEABI_NDK)/bin/arm-linux-androideabi-ar
66
CFG_LIB_NAME_arm-linux-androideabi=lib$(1).so
77
CFG_STATIC_LIB_NAME_arm-linux-androideabi=lib$(1).a
88
CFG_LIB_GLOB_arm-linux-androideabi=lib$(1)-*.so

branches/snap-stage3/src/doc/trpl/compiler-plugins.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ fn expand_rn(cx: &mut ExtCtxt, sp: Span, args: &[TokenTree])
6161
("I", 1)];
6262
6363
let text = match args {
64-
[TtToken(_, token::Ident(s, _))] => token::get_ident(s).to_string(),
64+
[TtToken(_, token::Ident(s, _))] => s.to_string(),
6565
_ => {
6666
cx.span_err(sp, "argument should be a single identifier");
6767
return DummyResult::any(sp);
@@ -186,8 +186,7 @@ impl LintPass for Pass {
186186
}
187187
188188
fn check_item(&mut self, cx: &Context, it: &ast::Item) {
189-
let name = token::get_ident(it.ident);
190-
if name.get() == "lintme" {
189+
if it.ident.name == "lintme" {
191190
cx.span_lint(TEST_LINT, it.span, "item is named 'lintme'");
192191
}
193192
}

branches/snap-stage3/src/liballoc/boxed.rs

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
use core::prelude::*;
5757

5858
use heap;
59+
use raw_vec::RawVec;
5960

6061
use core::any::Any;
6162
use core::cmp::Ordering;
@@ -65,7 +66,7 @@ use core::marker::{self, Unsize};
6566
use core::mem;
6667
use core::ops::{CoerceUnsized, Deref, DerefMut};
6768
use core::ops::{Placer, Boxed, Place, InPlace, BoxPlace};
68-
use core::ptr::Unique;
69+
use core::ptr::{self, Unique};
6970
use core::raw::{TraitObject};
7071

7172
/// A value that represents the heap. This is the default place that the `box`
@@ -86,10 +87,13 @@ use core::raw::{TraitObject};
8687
#[lang = "exchange_heap"]
8788
#[unstable(feature = "box_heap",
8889
reason = "may be renamed; uncertain about custom allocator design")]
90+
#[allow(deprecated)]
8991
pub const HEAP: ExchangeHeapSingleton =
9092
ExchangeHeapSingleton { _force_singleton: () };
9193

9294
/// This the singleton type used solely for `boxed::HEAP`.
95+
#[unstable(feature = "box_heap",
96+
reason = "may be renamed; uncertain about custom allocator design")]
9397
#[derive(Copy, Clone)]
9498
pub struct ExchangeHeapSingleton { _force_singleton: () }
9599

@@ -297,7 +301,7 @@ impl<T: Clone> Clone for Box<T> {
297301
/// let y = x.clone();
298302
/// ```
299303
#[inline]
300-
fn clone(&self) -> Box<T> { box (HEAP) {(**self).clone()} }
304+
fn clone(&self) -> Box<T> { box {(**self).clone()} }
301305
/// Copies `source`'s contents into `self` without creating a new allocation.
302306
///
303307
/// # Examples
@@ -511,3 +515,55 @@ impl<'a,A,R> FnOnce<A> for Box<FnBox<A,Output=R>+Send+'a> {
511515
}
512516

513517
impl<T: ?Sized+Unsize<U>, U: ?Sized> CoerceUnsized<Box<U>> for Box<T> {}
518+
519+
#[stable(feature = "box_slice_clone", since = "1.3.0")]
520+
impl<T: Clone> Clone for Box<[T]> {
521+
fn clone(&self) -> Self {
522+
let mut new = BoxBuilder {
523+
data: RawVec::with_capacity(self.len()),
524+
len: 0
525+
};
526+
527+
let mut target = new.data.ptr();
528+
529+
for item in self.iter() {
530+
unsafe {
531+
ptr::write(target, item.clone());
532+
target = target.offset(1);
533+
};
534+
535+
new.len += 1;
536+
}
537+
538+
return unsafe { new.into_box() };
539+
540+
// Helper type for responding to panics correctly.
541+
struct BoxBuilder<T> {
542+
data: RawVec<T>,
543+
len: usize,
544+
}
545+
546+
impl<T> BoxBuilder<T> {
547+
unsafe fn into_box(self) -> Box<[T]> {
548+
let raw = ptr::read(&self.data);
549+
mem::forget(self);
550+
raw.into_box()
551+
}
552+
}
553+
554+
impl<T> Drop for BoxBuilder<T> {
555+
fn drop(&mut self) {
556+
let mut data = self.data.ptr();
557+
let max = unsafe { data.offset(self.len as isize) };
558+
559+
while data != max {
560+
unsafe {
561+
ptr::read(data);
562+
data = data.offset(1);
563+
}
564+
}
565+
}
566+
}
567+
}
568+
}
569+

branches/snap-stage3/src/liballoc/lib.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,13 @@
7070
test(no_crate_inject))]
7171
#![no_std]
7272

73-
// SNAP d4432b3
74-
#![allow(unused_features)] // until feature(placement_in_syntax) is in snap
7573
#![feature(allocator)]
7674
#![feature(box_syntax)]
7775
#![feature(coerce_unsized)]
7876
#![feature(core)]
7977
#![feature(core_intrinsics)]
8078
#![feature(core_prelude)]
79+
#![feature(core_slice_ext)]
8180
#![feature(custom_attribute)]
8281
#![feature(fundamental)]
8382
#![feature(lang_items)]

branches/snap-stage3/src/libcollections/slice.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -762,12 +762,16 @@ impl<T> [T] {
762762

763763
/// Find the first index containing a matching value.
764764
#[unstable(feature = "slice_position_elem")]
765+
#[deprecated(since = "1.3.0",
766+
reason = "less idiomatic than .iter().position()")]
765767
pub fn position_elem(&self, t: &T) -> Option<usize> where T: PartialEq {
766768
core_slice::SliceExt::position_elem(self, t)
767769
}
768770

769771
/// Find the last index containing a matching value.
770772
#[unstable(feature = "slice_position_elem")]
773+
#[deprecated(since = "1.3.0",
774+
reason = "less idiomatic than .iter().rev().position()")]
771775
pub fn rposition_elem(&self, t: &T) -> Option<usize> where T: PartialEq {
772776
core_slice::SliceExt::rposition_elem(self, t)
773777
}
@@ -1009,6 +1013,8 @@ impl<T> [T] {
10091013
/// ```
10101014
#[unstable(feature = "move_from",
10111015
reason = "uncertain about this API approach")]
1016+
#[deprecated(since = "1.3.0",
1017+
reason = "unclear that it must belong in the standard library")]
10121018
#[inline]
10131019
pub fn move_from(&mut self, mut src: Vec<T>, start: usize, end: usize) -> usize {
10141020
for (a, b) in self.iter_mut().zip(&mut src[start .. end]) {

branches/snap-stage3/src/libcollections/str.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,9 @@ impl str {
553553
/// ```
554554
#[unstable(feature = "slice_chars",
555555
reason = "may have yet to prove its worth")]
556+
#[deprecated(since = "1.3.0",
557+
reason = "can be implemented with char_indices and \
558+
hasn't seen enough use to justify inclusion")]
556559
pub fn slice_chars(&self, begin: usize, end: usize) -> &str {
557560
core_str::StrExt::slice_chars(self, begin, end)
558561
}
@@ -1666,6 +1669,8 @@ impl str {
16661669
/// ```
16671670
#[unstable(feature = "subslice_offset",
16681671
reason = "awaiting convention about comparability of arbitrary slices")]
1672+
#[deprecated(since = "1.3.0",
1673+
reason = "replaced with other pattern-related methods")]
16691674
pub fn subslice_offset(&self, inner: &str) -> usize {
16701675
core_str::StrExt::subslice_offset(self, inner)
16711676
}

branches/snap-stage3/src/libcollections/vec.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -772,6 +772,9 @@ impl<T> Vec<T> {
772772
/// ```
773773
#[unstable(feature = "map_in_place",
774774
reason = "API may change to provide stronger guarantees")]
775+
#[deprecated(since = "1.3.0",
776+
reason = "unclear that the API is strong enough and did \
777+
not proven itself")]
775778
pub fn map_in_place<U, F>(self, mut f: F) -> Vec<U> where F: FnMut(T) -> U {
776779
// FIXME: Assert statically that the types `T` and `U` have the same
777780
// size.
@@ -1627,6 +1630,7 @@ impl<T> IntoIter<T> {
16271630
#[inline]
16281631
/// Drops all items that have not yet been moved and returns the empty vector.
16291632
#[unstable(feature = "iter_to_vec")]
1633+
#[deprecated(since = "1.3.0", reason = "replaced by drain()")]
16301634
pub fn into_inner(mut self) -> Vec<T> {
16311635
unsafe {
16321636
for _x in self.by_ref() { }

branches/snap-stage3/src/libcollectionstest/slice.rs

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,6 +1270,59 @@ fn test_to_vec() {
12701270
assert_eq!(ys, [1, 2, 3]);
12711271
}
12721272

1273+
#[test]
1274+
fn test_box_slice_clone() {
1275+
let data = vec![vec![0, 1], vec![0], vec![1]];
1276+
let data2 = data.clone().into_boxed_slice().clone().to_vec();
1277+
1278+
assert_eq!(data, data2);
1279+
}
1280+
1281+
#[test]
1282+
fn test_box_slice_clone_panics() {
1283+
use std::sync::Arc;
1284+
use std::sync::atomic::{AtomicUsize, Ordering};
1285+
use std::thread::spawn;
1286+
1287+
struct Canary {
1288+
count: Arc<AtomicUsize>,
1289+
panics: bool
1290+
}
1291+
1292+
impl Drop for Canary {
1293+
fn drop(&mut self) {
1294+
self.count.fetch_add(1, Ordering::SeqCst);
1295+
}
1296+
}
1297+
1298+
impl Clone for Canary {
1299+
fn clone(&self) -> Self {
1300+
if self.panics { panic!() }
1301+
1302+
Canary {
1303+
count: self.count.clone(),
1304+
panics: self.panics
1305+
}
1306+
}
1307+
}
1308+
1309+
let drop_count = Arc::new(AtomicUsize::new(0));
1310+
let canary = Canary { count: drop_count.clone(), panics: false };
1311+
let panic = Canary { count: drop_count.clone(), panics: true };
1312+
1313+
spawn(move || {
1314+
// When xs is dropped, +5.
1315+
let xs = vec![canary.clone(), canary.clone(), canary.clone(),
1316+
panic, canary].into_boxed_slice();
1317+
1318+
// When panic is cloned, +3.
1319+
xs.clone();
1320+
}).join().unwrap_err();
1321+
1322+
// Total = 8
1323+
assert_eq!(drop_count.load(Ordering::SeqCst), 8);
1324+
}
1325+
12731326
mod bench {
12741327
use std::iter::repeat;
12751328
use std::{mem, ptr};

0 commit comments

Comments
 (0)