Skip to content

Commit 0f5a94c

Browse files
committed
---
yaml --- r: 234860 b: refs/heads/stable c: d5fdb55 h: refs/heads/master v: v3
1 parent 41e061b commit 0f5a94c

File tree

12 files changed

+130
-23
lines changed

12 files changed

+130
-23
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ refs/heads/tmp: afae2ff723393b3ab4ccffef6ac7c6d1809e2da0
2929
refs/tags/1.0.0-alpha.2: 4c705f6bc559886632d3871b04f58aab093bfa2f
3030
refs/tags/homu-tmp: f859507de8c410b648d934d8f5ec1c52daac971d
3131
refs/tags/1.0.0-beta: 8cbb92b53468ee2b0c2d3eeb8567005953d40828
32-
refs/heads/stable: 1f14e195b4ba526afc7b3696d04e6992f23b0298
32+
refs/heads/stable: d5fdb55187ba319801b60f1d8e777cebbde71715
3333
refs/tags/1.0.0: 55bd4f8ff2b323f317ae89e254ce87162d52a375
3434
refs/tags/1.1.0: bc3c16f09287e5545c1d3f76b7abd54f2eca868b
3535
refs/tags/1.2.0: f557861f822c34f07270347b94b5280de20a597e

branches/stable/configure

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1037,6 +1037,14 @@ for target_file in ${CFG_SRC_DIR}mk/cfg/*.mk; do
10371037
CFG_SUPPORTED_TARGET="${CFG_SUPPORTED_TARGET} $(basename "$target_file" .mk)"
10381038
done
10391039

1040+
# copy build-triples to host-triples so that builds are a subset of hosts
1041+
V_TEMP=""
1042+
for i in $CFG_BUILD $CFG_HOST;
1043+
do
1044+
echo "$V_TEMP" | grep -qF $i || V_TEMP="$V_TEMP${V_TEMP:+ }$i"
1045+
done
1046+
CFG_HOST=$V_TEMP
1047+
10401048
# copy host-triples to target-triples so that hosts are a subset of targets
10411049
V_TEMP=""
10421050
for i in $CFG_HOST $CFG_TARGET;

branches/stable/src/doc/trpl/documentation.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ we could have added more explanation in a new paragraph.
102102
#### Special sections
103103

104104
Next, are special sections. These are indicated with a header, `#`. There
105-
are three kinds of headers that are commonly used. They aren't special syntax,
105+
are four kinds of headers that are commonly used. They aren't special syntax,
106106
just convention, for now.
107107

108108
```rust
@@ -144,7 +144,7 @@ responsible for upholding.
144144
# fn foo() {}
145145
```
146146

147-
Third, `Examples`. Include one or more examples of using your function or
147+
Fourth, `Examples`. Include one or more examples of using your function or
148148
method, and your users will love you for it. These examples go inside of
149149
code block annotations, which we'll talk about in a moment, and can have
150150
more than one section:

branches/stable/src/doc/trpl/installing-rust.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ $ sudo /usr/local/lib/rustlib/uninstall.sh
4141
If you used the Windows installer, just re-run the `.msi` and it will give you
4242
an uninstall option.
4343

44+
## That disclaimer we promised
45+
4446
Some people, and somewhat rightfully so, get very upset when we tell you to
4547
`curl | sh`. Basically, when you do this, you are trusting that the good
4648
people who maintain Rust aren't going to hack your computer and do bad things.
@@ -50,6 +52,8 @@ binary downloads][install-page].
5052

5153
[from-source]: https://github.com/rust-lang/rust#building-from-source
5254

55+
## Platform support
56+
5357
Oh, we should also mention the officially supported platforms:
5458

5559
* Windows (7, 8, Server 2008 R2)
@@ -66,6 +70,8 @@ integrated as the Linux/OS X experience is. We're working on it! If anything
6670
does not work, it is a bug. Please let us know if that happens. Each and every
6771
commit is tested against Windows just like any other platform.
6872

73+
## After installation
74+
6975
If you've got Rust installed, you can open up a shell, and type this:
7076

7177
```bash

branches/stable/src/liblibc/lib.rs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -441,12 +441,12 @@ pub mod types {
441441
pub type intmax_t = i64;
442442
pub type uintmax_t = u64;
443443
}
444-
#[cfg(any(target_arch = "x86",
445-
target_arch = "mips",
444+
#[cfg(any(target_arch = "mips",
446445
target_arch = "mipsel",
447446
target_arch = "powerpc",
448447
target_arch = "le32",
449-
all(target_arch = "arm", not(target_os = "android"))))]
448+
all(any(target_arch = "arm", target_arch = "x86"),
449+
not(target_os = "android"))))]
450450
pub mod posix88 {
451451
pub type off_t = i32;
452452
pub type dev_t = u64;
@@ -458,7 +458,8 @@ pub mod types {
458458
pub type mode_t = u32;
459459
pub type ssize_t = i32;
460460
}
461-
#[cfg(all(target_arch = "arm", target_os = "android"))]
461+
#[cfg(all(any(target_arch = "arm", target_arch = "x86"),
462+
target_os = "android"))]
462463
pub mod posix88 {
463464
pub type off_t = i32;
464465
pub type dev_t = u32;
@@ -473,7 +474,8 @@ pub mod types {
473474
#[cfg(any(target_arch = "x86",
474475
target_arch = "le32",
475476
target_arch = "powerpc",
476-
all(target_arch = "arm", not(target_os = "android"))))]
477+
all(any(target_arch = "arm", target_arch = "x86"),
478+
not(target_os = "android"))))]
477479
pub mod posix01 {
478480
use types::os::arch::c95::{c_short, c_long, time_t};
479481
use types::os::arch::posix88::{dev_t, gid_t, ino_t};
@@ -519,7 +521,8 @@ pub mod types {
519521
pub __size: [u32; 9]
520522
}
521523
}
522-
#[cfg(all(target_arch = "arm", target_os = "android"))]
524+
#[cfg(all(any(target_arch = "arm", target_arch = "x86"),
525+
target_os = "android"))]
523526
pub mod posix01 {
524527
use types::os::arch::c95::{c_uchar, c_uint, c_ulong, time_t};
525528
use types::os::arch::c99::{c_longlong, c_ulonglong};
@@ -5916,13 +5919,15 @@ pub mod funcs {
59165919
use types::os::arch::c95::c_int;
59175920
use types::os::common::posix01::sighandler_t;
59185921

5919-
#[cfg(not(all(target_os = "android", target_arch = "arm")))]
5922+
#[cfg(not(all(target_os = "android", any(target_arch = "arm",
5923+
target_arch = "x86"))))]
59205924
extern {
59215925
pub fn signal(signum: c_int,
59225926
handler: sighandler_t) -> sighandler_t;
59235927
}
59245928

5925-
#[cfg(all(target_os = "android", target_arch = "arm"))]
5929+
#[cfg(all(target_os = "android", any(target_arch = "arm",
5930+
target_arch = "x86")))]
59265931
extern {
59275932
#[link_name = "bsd_signal"]
59285933
pub fn signal(signum: c_int,

branches/stable/src/librustc/middle/stability.rs

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ use syntax::feature_gate::emit_feature_err;
3030
use util::nodemap::{DefIdMap, FnvHashSet, FnvHashMap};
3131

3232
use std::mem::replace;
33+
use std::cmp::Ordering;
3334

3435
/// A stability index, giving the stability level for items and methods.
3536
pub struct Index<'tcx> {
@@ -59,9 +60,57 @@ impl<'a, 'tcx: 'a> Annotator<'a, 'tcx> {
5960
if self.index.staged_api[&ast::LOCAL_CRATE] {
6061
debug!("annotate(id = {:?}, attrs = {:?})", id, attrs);
6162
match attr::find_stability(self.tcx.sess.diagnostic(), attrs, item_sp) {
62-
Some(stab) => {
63+
Some(mut stab) => {
6364
debug!("annotate: found {:?}", stab);
65+
// if parent is deprecated and we're not, inherit this by merging
66+
// deprecated_since and its reason.
67+
if let Some(parent_stab) = self.parent {
68+
if parent_stab.deprecated_since.is_some()
69+
&& stab.deprecated_since.is_none() {
70+
stab.deprecated_since = parent_stab.deprecated_since.clone();
71+
stab.reason = parent_stab.reason.clone();
72+
}
73+
}
74+
6475
let stab = self.tcx.intern_stability(stab);
76+
77+
// Check if deprecated_since < stable_since. If it is,
78+
// this is *almost surely* an accident.
79+
let deprecated_predates_stable = match (stab.deprecated_since.as_ref(),
80+
stab.since.as_ref()) {
81+
(Some(dep_since), Some(stab_since)) => {
82+
// explicit version of iter::order::lt to handle parse errors properly
83+
let mut is_less = false;
84+
for (dep_v, stab_v) in dep_since.split(".").zip(stab_since.split(".")) {
85+
match (dep_v.parse::<u64>(), stab_v.parse::<u64>()) {
86+
(Ok(dep_v), Ok(stab_v)) => match dep_v.cmp(&stab_v) {
87+
Ordering::Less => {
88+
is_less = true;
89+
break;
90+
}
91+
Ordering::Equal => { continue; }
92+
Ordering::Greater => { break; }
93+
},
94+
_ => {
95+
self.tcx.sess.span_err(item_sp,
96+
"Invalid stability or deprecation version found");
97+
// act like it isn't less because the question is now
98+
// nonsensical, and this makes us not do anything else
99+
// interesting.
100+
break;
101+
}
102+
}
103+
}
104+
is_less
105+
},
106+
_ => false,
107+
};
108+
109+
if deprecated_predates_stable {
110+
self.tcx.sess.span_err(item_sp,
111+
"An API can't be stabilized after it is deprecated");
112+
}
113+
65114
self.index.map.insert(local_def(id), Some(stab));
66115

67116
// Don't inherit #[stable(feature = "rust1", since = "1.0.0")]

branches/stable/src/libstd/sys/windows/os.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,8 @@ impl ExactSizeIterator for Args {
311311

312312
impl Drop for Args {
313313
fn drop(&mut self) {
314+
// self.cur can be null if CommandLineToArgvW previously failed,
315+
// but LocalFree ignores NULL pointers
314316
unsafe { c::LocalFree(self.cur as *mut c_void); }
315317
}
316318
}
@@ -321,6 +323,9 @@ pub fn args() -> Args {
321323
let lpCmdLine = c::GetCommandLineW();
322324
let szArgList = c::CommandLineToArgvW(lpCmdLine, &mut nArgs);
323325

326+
// szArcList can be NULL if CommandLinToArgvW failed,
327+
// but in that case nArgs is 0 so we won't actually
328+
// try to read a null pointer
324329
Args { cur: szArgList, range: 0..(nArgs as isize) }
325330
}
326331
}

branches/stable/src/libstd/tuple.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
//! * `Eq`
2626
//! * `PartialOrd`
2727
//! * `Ord`
28+
//! * `Debug`
2829
//! * `Default`
30+
//! * `Hash`
2931
//!
3032
//! # Examples
3133
//!

branches/stable/src/libsyntax/attr.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ fn find_stability_generic<'a,
397397
-> (Option<Stability>, Vec<&'a AM>) {
398398

399399
let mut stab: Option<Stability> = None;
400-
let mut deprecated: Option<(InternedString, Option<InternedString>)> = None;
400+
let mut deprecated: Option<(Option<InternedString>, Option<InternedString>)> = None;
401401
let mut used_attrs: Vec<&'a AM> = vec![];
402402

403403
'outer: for attr in attrs {
@@ -484,7 +484,7 @@ fn find_stability_generic<'a,
484484
diagnostic.span_err(item_sp, "multiple deprecated attributes");
485485
}
486486

487-
deprecated = Some((since.unwrap_or(intern_and_get_ident("bogus")), reason));
487+
deprecated = Some((since, reason));
488488
}
489489
}
490490

@@ -493,7 +493,7 @@ fn find_stability_generic<'a,
493493
match stab {
494494
Some(ref mut s) => {
495495
let (since, reason) = deprecated.unwrap();
496-
s.deprecated_since = Some(since);
496+
s.deprecated_since = since;
497497
s.reason = reason;
498498
}
499499
None => {

branches/stable/src/test/compile-fail/lint-stability-fields.rs

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,20 @@ mod cross_crate {
116116
//~^ ERROR use of deprecated item
117117
//~^^ ERROR use of unstable
118118
override1: 2,
119-
override2: 3, //~ ERROR use of unstable
119+
//~^ ERROR use of deprecated item
120+
override2: 3,
121+
//~^ ERROR use of deprecated item
122+
//~^^ ERROR use of unstable
120123
};
121124

122125
let _ = x.inherit;
123126
//~^ ERROR use of deprecated item
124127
//~^^ ERROR use of unstable
125128
let _ = x.override1;
126-
let _ = x.override2; //~ ERROR use of unstable
129+
//~^ ERROR use of deprecated item
130+
let _ = x.override2;
131+
//~^ ERROR use of deprecated item
132+
//~^^ ERROR use of unstable
127133

128134
let Deprecated {
129135
//~^ ERROR use of deprecated item
@@ -132,7 +138,10 @@ mod cross_crate {
132138
//~^ ERROR use of deprecated item
133139
//~^^ ERROR use of unstable
134140
override1: _,
135-
override2: _ //~ ERROR use of unstable
141+
//~^ ERROR use of deprecated item
142+
override2: _
143+
//~^ ERROR use of unstable
144+
//~^^ ERROR use of deprecated item
136145
} = x;
137146

138147
let Deprecated
@@ -149,7 +158,10 @@ mod cross_crate {
149158
//~^ ERROR use of deprecated item
150159
//~^^ ERROR use of unstable
151160
let _ = x.1;
152-
let _ = x.2; //~ ERROR use of unstable
161+
//~^ ERROR use of deprecated item
162+
let _ = x.2;
163+
//~^ ERROR use of deprecated item
164+
//~^^ ERROR use of unstable
153165

154166
let Deprecated2
155167
//~^ ERROR use of deprecated item
@@ -158,7 +170,10 @@ mod cross_crate {
158170
//~^ ERROR use of deprecated item
159171
//~^^ ERROR use of unstable
160172
_,
161-
_) //~ ERROR use of unstable
173+
//~^ ERROR use of deprecated item
174+
_)
175+
//~^ ERROR use of deprecated item
176+
//~^^ ERROR use of unstable
162177
= x;
163178
let Deprecated2
164179
//~^ ERROR use of deprecated item
@@ -300,20 +315,26 @@ mod this_crate {
300315
inherit: 1,
301316
//~^ ERROR use of deprecated item
302317
override1: 2,
318+
//~^ ERROR use of deprecated item
303319
override2: 3,
320+
//~^ ERROR use of deprecated item
304321
};
305322

306323
let _ = x.inherit;
307324
//~^ ERROR use of deprecated item
308325
let _ = x.override1;
326+
//~^ ERROR use of deprecated item
309327
let _ = x.override2;
328+
//~^ ERROR use of deprecated item
310329

311330
let Deprecated {
312331
//~^ ERROR use of deprecated item
313332
inherit: _,
314333
//~^ ERROR use of deprecated item
315334
override1: _,
335+
//~^ ERROR use of deprecated item
316336
override2: _
337+
//~^ ERROR use of deprecated item
317338
} = x;
318339

319340
let Deprecated
@@ -327,14 +348,18 @@ mod this_crate {
327348
let _ = x.0;
328349
//~^ ERROR use of deprecated item
329350
let _ = x.1;
351+
//~^ ERROR use of deprecated item
330352
let _ = x.2;
353+
//~^ ERROR use of deprecated item
331354

332355
let Deprecated2
333356
//~^ ERROR use of deprecated item
334357
(_,
335358
//~^ ERROR use of deprecated item
336359
_,
360+
//~^ ERROR use of deprecated item
337361
_)
362+
//~^ ERROR use of deprecated item
338363
= x;
339364
let Deprecated2
340365
//~^ ERROR use of deprecated item

branches/stable/src/test/compile-fail/lint-stability.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,11 @@ mod cross_crate {
128128
<Foo as Trait>::trait_stable_text(&foo);
129129

130130
let _ = DeprecatedStruct { i: 0 }; //~ ERROR use of deprecated item
131-
let _ = DeprecatedUnstableStruct { i: 0 }; //~ ERROR use of deprecated item
132-
//~^ ERROR use of unstable library feature
131+
let _ = DeprecatedUnstableStruct {
132+
//~^ ERROR use of deprecated item
133+
//~^^ ERROR use of unstable library feature
134+
i: 0 //~ ERROR use of deprecated item
135+
};
133136
let _ = UnstableStruct { i: 0 }; //~ ERROR use of unstable library feature
134137
let _ = StableStruct { i: 0 };
135138

@@ -417,7 +420,10 @@ mod this_crate {
417420
<Foo>::trait_stable_text(&foo);
418421
<Foo as Trait>::trait_stable_text(&foo);
419422

420-
let _ = DeprecatedStruct { i: 0 }; //~ ERROR use of deprecated item
423+
let _ = DeprecatedStruct {
424+
//~^ ERROR use of deprecated item
425+
i: 0 //~ ERROR use of deprecated item
426+
};
421427
let _ = UnstableStruct { i: 0 };
422428
let _ = StableStruct { i: 0 };
423429

branches/stable/src/test/compile-fail/stability-attribute-sanity.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ fn multiple3() { } //~ ERROR multiple stability levels
8888
#[deprecated(since = "b")]
8989
#[deprecated(since = "b")]
9090
fn multiple4() { } //~ ERROR multiple deprecated attributes
91+
//~^ ERROR Invalid stability or deprecation version found
9192

9293
#[deprecated(since = "a")]
9394
fn deprecated_without_unstable_or_stable() { } //~ ERROR deprecated attribute must be paired

0 commit comments

Comments
 (0)