Commit Graph

60509 Commits

Author SHA1 Message Date
bors
e357178146 Auto merge of #38814 - Ralith:cfg-fields, r=jseyfried
syntax: enable attributes and cfg on struct fields

This enables conditional compilation of field initializers in a struct literal, simplifying construction of structs whose fields are themselves conditionally present. For example, the intializer for the constant in the following becomes legal, and has the intuitive effect:

```rust
struct Foo {
    #[cfg(unix)]
    bar: (),
}

const FOO: Foo = Foo {
    #[cfg(unix)]
    bar: (),
};
```

It's not clear to me whether this calls for the full RFC process, but the implementation was simple enough that I figured I'd begin the conversation with code.
2017-01-12 20:44:02 +00:00
Michael Woerister
71274ac9ad Mark some BitVector methods with #[inline] 2017-01-12 15:13:02 -05:00
Ximin Luo
cadebc7571 Disable jemalloc tests on platforms where it is disabled (closes #38612)
See also #37392
2017-01-12 21:10:31 +01:00
Ximin Luo
246e7492af Add mips architectures to conditional-compile test 2017-01-12 19:33:45 +01:00
Ximin Luo
5740f94fed Detect mips CPUs in ./configure
This mirrors existing logic already in src/bootstrap/bootstrap.py
2017-01-12 19:33:45 +01:00
Ximin Luo
417953f238 Disable jemalloc on s390x as well (closes #38596)
See also #37320 and #37392
2017-01-12 19:33:40 +01:00
bors
27b9e6d450 Auto merge of #38569 - chris-morgan:rustdoc-highlight-kw-2, r=steveklabnik
Fix rustdoc highlighting of `&` and `*`

Whitespace tokens were included, so the span check used with `&` was incorrect, and it was never highlighted as kw-2 (RefKeyword).

The `*` in `*foo` and `*const T` should also be highlighted kw-2, so I added them. Note that this *will* cause mishighlighting of code like `1*2`, but that should have been written `1 * 2`. Same deal with `1&2`.
2017-01-12 18:32:28 +00:00
bors
ac5046cf67 Auto merge of #38779 - Craig-Macomber:bench, r=alexcrichton
Do not run outer setup part of benchmarks multiple times to fix issue 20142

Fix #20142

This is my first real rust code, so I expect the quality is quite bad. Please let me know in which ways it is horrible and I'll fix it.

Previously the whole benchmark function was rerun many times, but with this change, only the callback passed to iter is rerun. This improves performances by saving benchmark startup time. The setup used to be called a minimum of 101 times, and now only runs once.

I wasn't sure exactly what should be done for the case where iter is never called, so I left a FIXME for that: currently it does not error, and I added tests to cover that.

I have left the algorithm and statistics unchanged: I don't like how the minimum number of runs is 301 (that's bad for very slow benchmarks) but I consider such changes out of scope for this fix.
2017-01-12 14:42:02 +00:00
bors
139d7412cd Auto merge of #38654 - alexcrichton:rustbuild-destdir, r=brson
rustbuild: Implement DESTDIR support

This commit primarily starts supporting the `DESTDIR` environment variable like
the old build system. Along the way this brings `config.toml` up to date with
support in `config.mk` with install options supported.

Closes #38441
2017-01-12 08:31:50 +00:00
Vadim Petrochenkov
2092682191 resolve: Do not use "resolve"/"resolution" in error messages 2017-01-12 10:08:27 +03:00
Benjamin Saunders
7972c1905b syntax: struct field attributes and cfg 2017-01-11 21:33:17 -08:00
bors
408c2f7827 Auto merge of #37926 - bluss:from-utf8-small-simplification, r=sfackler
UTF-8 validation: Compute block end upfront

Simplify the conditional used for ensuring that the whole word loop is
only used if there are at least two whole words left to read.

This makes the function slightly smaller and simpler, a 0-5% reduction
in runtime for various test cases.
2017-01-12 05:14:50 +00:00
bors
2782e8f8fc Auto merge of #38867 - alexcrichton:ignore-test-on-windows, r=brson
std: Ignore close_read_wakes_up on Windows

It looks like in practice at least this test will not pass on Windows.
Empirically it is prone to blocking forever, presumably because a call to
`shutdown` doesn't actually wake up other threads on Windows.

We don't document this as a guarantee for `shutdown`, nor do we internally rely
on it. This test originated in a time long since passed when it was leveraged
for canceling I/O, but nowadays there's nothing fancy happening in the standard
library so it's not really a productive test anyway, hence just ignoring it on
Windows.

Closes #31657
2017-01-12 03:13:48 +00:00
bors
1ca100d042 Auto merge of #38605 - estebank:fix-38371, r=nikomatsakis
Suggest solutions for `fn foo(&foo: Foo)`

For a given file:

```rust
struct Foo {}

fn foo(&foo: Foo) {}
```

suggest:

```
error[E0308]: mismatched types
 --> file.rs:3:8
  |
3 | fn foo(&foo: Foo) {}
  |        ^^^^ expected struct `Foo`, found reference
  |
  = note: expected type `Foo`
  = note:    found type `&_`
  = help: did you mean `foo: &Foo`?
```

Fix #38371.
2017-01-12 01:01:06 +00:00
Guillaume Gomez
28d1ac3191 Add missing links and examples for path modules and structs 2017-01-11 23:26:27 +01:00
bors
b27c709560 Auto merge of #38313 - jseyfried:self_imports, r=nrc
resolve: clean up the semantics of `self` in an import list

Change `self` in an import list `use foo::bar::{self, ...};` to import `bar` only in the type namespace. Today, `bar` is imported in every namespace in which `foo::bar` is defined.

This is a [breaking-change], see https://github.com/rust-lang/rust/issues/38293#issue-194817974 for examples of code that would break.

Fixes #38293.
r? @nrc
2017-01-11 20:12:26 +00:00
Clar Charr
3a79f2e2f1 Implement Display for char Escape*, To*case. 2017-01-11 12:39:56 -05:00
Simonas Kazlauskas
e97f104da6 Fix two const-eval issues related to i128 negation
First issue here was the fact that we’d only allow negating integers in i64 range in case the
integer was not infered yes. While this is not the direct cause of the issue, its still good to fix
it.

The real issue here is the code handling specifically the `min_value` literals. While I128_OVERFLOW
has the expected value (0x8000_..._0000), match using this value as a pattern is handled
incorrectly by the stage1 compiler (it seems to be handled correctly, by the stage2 compiler). So
what we do here is extract this pattern into an explicit `==` until the next snapshot.

Fixes #38987
2017-01-11 19:38:44 +02:00
Ben Wiederhake
09df83b247 Fix some typos in Nomicon 2017-01-11 18:07:08 +01:00
Vadim Petrochenkov
bf02534750 Fix docs for min/max algorithms 2017-01-11 19:02:30 +03:00
bors
513d942a7e Auto merge of #38989 - arielb1:constant-mir-overflow2, r=eddyb
fix function arguments in constant promotion

we can't create the target block until *after* we promote the arguments - otherwise the arguments will be promoted into the target block. oops.

Fixes #38985.

This is a regression introduced in the beta-nominated #38833, so beta-nominating this one too (sorry @brson).

r? @eddyb
2017-01-11 15:45:28 +00:00
bors
52c03d1d61 Auto merge of #38984 - alexcrichton:less-debuginfo, r=brson
rustbuild: Don't enable debuginfo in rustc

In #37280 we enabled line number debugging information in release artifacts,
primarily to close out #36452 where debugging information was critical for MSVC
builds of Rust to be useful in production. This commit, however, apparently had
some unfortunate side effects.

Namely it was noticed in #37477 that if `RUST_BACKTRACE=1` was set then any
compiler error would take a very long time for the compiler to exit. The cause
of the problem here was somewhat deep:

* For all compiler errors, the compiler will `panic!` with a known value. This
  tears down the main compiler thread and allows cleaning up all the various
  resources. By default, however, this panic output is suppressed for "normal"
  compiler errors.
* When `RUST_BACKTRACE=1` was set this caused every compiler error to generate a
  backtrace.
* The libbacktrace library hits a pathological case where it spends a very long
  time in its custom allocation function, `backtrace_alloc`, because the
  compiler has so much debugging information. More information about this can be
  found in #29293 with a summary at the end of #37477.

To solve this problem this commit simply removes debuginfo from the compiler but
not from the standard library. This should allow us to keep #36452 closed while
also closing #37477. I've measured the difference to be orders of magnitude
faster than it was before, so we should see a much quicker time-to-exit after a
compile error when `RUST_BACKTRACE=1` is set.

Closes #37477
Closes #37571
2017-01-11 13:42:52 +00:00
bors
0d03d51cc0 Auto merge of #38925 - petrochenkov:varass, r=jseyfried
Fix ICE when variant is used as a part of associated path

Fixes https://github.com/rust-lang/rust/issues/38862
r? @jseyfried
2017-01-11 09:22:56 +00:00
Ariel Ben-Yehuda
61b0b212f9 fix function arguments in constant promotion
we can't create the target block until *after* we promote the arguments
- otherwise the arguments will be promoted into the target block. oops.

Fixes #38985.
2017-01-11 09:50:24 +02:00
Tyler Julian
30380137f8 std/net/udp: Improve set_nonblocking test 2017-01-10 22:06:17 -08:00
bors
e57f061be2 Auto merge of #38916 - estebank:pad-suggestion-list, r=nikomatsakis
Teach diagnostics to correct margin of multiline messages

Make the suggestion list have a correct padding:

```
error[E0308]: mismatched types
 --> file.rs:3:20
  |
3 |     let x: usize = "";
  |                    ^^ expected usize, found reference
  |
  = note: expected type `usize`
  = note:    found type `&'static str`
  = help: here are some functions which might fulfill your needs:
          - .len()
          - .foo()
          - .bar()
```
2017-01-11 05:27:11 +00:00
Alex Crichton
099e7cb120 rustbuild: Don't enable debuginfo in rustc
In #37280 we enabled line number debugging information in release artifacts,
primarily to close out #36452 where debugging information was critical for MSVC
builds of Rust to be useful in production. This commit, however, apparently had
some unfortunate side effects.

Namely it was noticed in #37477 that if `RUST_BACKTRACE=1` was set then any
compiler error would take a very long time for the compiler to exit. The cause
of the problem here was somewhat deep:

* For all compiler errors, the compiler will `panic!` with a known value. This
  tears down the main compiler thread and allows cleaning up all the various
  resources. By default, however, this panic output is suppressed for "normal"
  compiler errors.
* When `RUST_BACKTRACE=1` was set this caused every compiler error to generate a
  backtrace.
* The libbacktrace library hits a pathological case where it spends a very long
  time in its custom allocation function, `backtrace_alloc`, because the
  compiler has so much debugging information. More information about this can be
  found in #29293 with a summary at the end of #37477.

To solve this problem this commit simply removes debuginfo from the compiler but
not from the standard library. This should allow us to keep #36452 closed while
also closing #37477. I've measured the difference to be orders of magnitude
faster than it was before, so we should see a much quicker time-to-exit after a
compile error when `RUST_BACKTRACE=1` is set.

Closes #37477
Closes #37571
2017-01-10 20:33:12 -08:00
Mark Simulacrum
e393046380 Simplify code since CEnum is always immediate now. 2017-01-10 19:42:37 -07:00
Mark Simulacrum
08290b20c4 Make type_is_fat_ptr not depend on LLVM. 2017-01-10 19:42:37 -07:00
Mark Simulacrum
7461038608 Make type_is_immediate not depend on LLVM.
This has the nice benefit of making it much simpler to work with,
since it now consists of a single match statement.
2017-01-10 19:42:37 -07:00
bors
e4fee525e0 Auto merge of #38960 - arielb1:blake-endian, r=michaelwoerister
Use little-endian encoding for Blake2 hashing on all architectures

Like many hash functions, the blake2 hash is mathematically defined on
a sequence of 64-bit words. As Rust's hash interface operates on
sequences of octets, some encoding must be used to bridge that
difference.

The Blake2 RFC (RFC 7693) specifies that:
```
   Byte (octet) streams are interpreted as words in little-endian order,
   with the least-significant byte first.
```

So use that encoding consistently.

Fixes #38891.

Beta-nominating since this is a regression since 1.15.

r? @michaelwoerister
2017-01-11 01:33:03 +00:00
bors
0500fbf6ba Auto merge of #38580 - shepmaster:result-sum, r=alexcrichton
Implement `iter::Sum` and `iter::Product` for `Result`

This introduces a private iterator adapter `ResultShunt`, which allows
treating an iterator of `Result<T, E>` as an iterator of `T`.
2017-01-10 23:25:31 +00:00
bors
d6b927dd91 Auto merge of #38843 - Manishearth:proposed, r=GuillaumeGomez
Improved rustdoc rendering for unstable features

This replaces "unstable" with "this is an experimental API", and uses a `<details>` tag to expand to the reason.

The `<details>` tag renders as a regular div (with the details show) on browsers which don't support it, On browsers which do support it, it shows only the summary line with an expandy-arrow next to it, and on clicking it the details will turn up below it.

This is somewhat a strawman proposal. The main issue is that we need to improve our messaging around unstable APIs. Since they turn up in the docs, we should be clearer that they are experimental (and perhaps add something about nightly-only). I'm making this PR to kickstart discussion on this.

Example rendering: http://manishearth.github.io/rust-internals-docs/std/io/trait.Read.html#method.chars

<img width="375" alt="screen shot 2017-01-04 at 10 15 37 pm" src="https://cloud.githubusercontent.com/assets/1617736/21670712/5a96c7de-d2cb-11e6-86a6-87f70818d634.png">

expands to

<img width="799" alt="screen shot 2017-01-04 at 10 15 43 pm" src="https://cloud.githubusercontent.com/assets/1617736/21670714/5db88bb4-d2cb-11e6-8fcc-5cf11d198b75.png">

cc @steveklabnik @jdub
2017-01-10 21:16:06 +00:00
Niko Matsakis
d723e02dfc update test case to include fn(&&u32: Foo) 2017-01-10 15:13:42 -05:00
Guillaume Gomez
346c84fb0b Add missing doc examples for Mutex 2017-01-10 20:58:17 +01:00
Niko Matsakis
59d7d4c80e only emit suggestion to move & if the inner pattern is a binding 2017-01-10 14:47:58 -05:00
Jake Goulding
23715d344d Implement iter::Sum and iter::Product for Result
This introduces a private iterator adapter `ResultShunt`, which allows
treating an iterator of `Result<T, E>` as an iterator of `T`.
2017-01-10 14:24:06 -05:00
Ariel Ben-Yehuda
a89475d7ec Use little-endian encoding for Blake2 hashing on all architectures
Like many hash functions, the blake2 hash is mathematically defined on
a sequence of 64-bit words. As Rust's hash interface operates on
sequences of octets, some encoding must be used to bridge that
difference.

The Blake2 RFC (RFC 7693) specifies that:
   Byte (octet) streams are interpreted as words in little-endian order,
   with the least-significant byte first.

So use that encoding consistently.

Fixes #38891.
2017-01-10 20:43:32 +02:00
bors
7bffede97c Auto merge of #38958 - sanxiyn:rollup, r=sanxiyn
Rollup of 11 pull requests

- Successful merges: #38606, #38607, #38623, #38664, #38799, #38816, #38836, #38839, #38841, #38849, #38874
- Failed merges: #38845
2017-01-10 14:08:21 +00:00
Seo Sanghyeon
db74f11f78 Rollup merge of #38874 - derekdreery:patch-1, r=steveklabnik
Update vec.rs

Add a warning not to convert  char* from c to Vec<u8> (I thought you could until I asked on irc).

Reasoning is that it will help people avoid an error that could cause crashes and undefined behaviour. Only drawback is that it could confuse someone not familiar with C, but beginners are unlikely to be using this function anyway.
2017-01-10 20:27:48 +09:00
Seo Sanghyeon
8ccb3ef5ee Rollup merge of #38849 - michaelwoerister:ich-trait-impl-test, r=nikomatsakis
ICH: Add some more test cases for trait impls.

r? @nikomatsakis
2017-01-10 20:27:47 +09:00
Seo Sanghyeon
833d6938e9 Rollup merge of #38841 - F001:Fix, r=steveklabnik
Update usage of rustc

Add proc_macro crate type
2017-01-10 20:27:46 +09:00
Seo Sanghyeon
20c7dbc9b4 Rollup merge of #38839 - frewsxcv:osstr-to-str, r=GuillaumeGomez
Expand {Path,OsStr}::{to_str,to_string_lossy} doc examples.

None
2017-01-10 20:27:45 +09:00
Seo Sanghyeon
a62f1b536e Rollup merge of #38836 - ollie27:patch-1, r=steveklabnik
Fix typo in tuple docs

r? @steveklabnik
2017-01-10 20:27:44 +09:00
Seo Sanghyeon
ac2723886f Rollup merge of #38816 - Manishearth:coercion-doc, r=GuillaumeGomez
Add more docs for CoerceUnsized and Unsize

here be dragons

r? @ubsan @steveklabnik
2017-01-10 20:27:43 +09:00
Seo Sanghyeon
25a9d91929 Rollup merge of #38799 - minaguib:patch-1, r=steveklabnik
Doc fix
2017-01-10 20:27:42 +09:00
Seo Sanghyeon
d350c9b15f Rollup merge of #38664 - apasel422:may-dangle, r=pnkfelix
Replace uses of `#[unsafe_destructor_blind_to_params]` with `#[may_dangle]`

CC #34761

r? @pnkfelix
2017-01-10 20:27:41 +09:00
Seo Sanghyeon
4d3d2c7397 Rollup merge of #38623 - alexcrichton:less-osx-warnings, r=aturon
std: Remove unused objects from compiler-builtins

We don't actually use trampoline_setup.c and all the `*tf3` business
seems related to f80/f128 business. Specifically this'll fix some
warnings showing up during builds on OSX.
2017-01-10 20:27:40 +09:00
Seo Sanghyeon
3149261273 Rollup merge of #38607 - estebank:test-for-36935, r=alexcrichton
Test for appropriate span on second custom derive

Adds test for and closes #36935.
2017-01-10 20:27:39 +09:00
Seo Sanghyeon
a81cd326c3 Rollup merge of #38606 - estebank:test-for-27522, r=petrochenkov
Add test for correct span for type

Adds test for and closes #27522.
2017-01-10 20:27:38 +09:00