Commit Graph

65614 Commits

Author SHA1 Message Date
Tommy Ip
b89db83e6c Only emit one error for use foo::self;
Currently `use foo::self;` would emit both E0429 and E0432. This
commit silence the latter one (assuming `foo` is a valid module).

Fixes #42559
2017-06-10 13:03:11 +01:00
Inokentiy Babushkin
3d2cff0c94
Added source hashes to FileMap
We can use these to perform lazy loading of source files belonging to
external crates. That way we will be able to show the source code of
external spans that have been translated.
2017-06-10 13:39:39 +02:00
Eduard-Mihai Burtescu
1f874ded52 rustc: do not depend on infcx.tables in MemCategorizationContext. 2017-06-10 14:34:45 +03:00
Inokentiy Babushkin
70fa1fbea7
Added a StableHasherResult impl for u128. 2017-06-10 12:21:24 +02:00
bors
995f741a0e Auto merge of #42556 - scottmcm:ctz-nz, r=BurntSushi
Get LLVM to stop generating dead assembly in next_power_of_two

It turns out that LLVM can turn `@llvm.ctlz.i64(_, true)` into `@llvm.ctlz.i64(_, false)` ([`ctlz`](http://llvm.org/docs/LangRef.html#llvm-ctlz-intrinsic)) where valuable, but never does the opposite.  That leads to some silly assembly getting generated in certain cases.

A contrived-but-clear example https://is.gd/VAIKuC:
```rust
fn foo(x:u64) -> u32 {
    if x == 0 { return !0; }
    x.leading_zeros()
}
```
Generates
```asm
	testq	%rdi, %rdi
	je	.LBB0_1
	je	.LBB0_3    ; <-- wha?
	bsrq	%rdi, %rax
	xorq	$63, %rax
	retq
.LBB0_1:
	movl	$-1, %eax
	retq
.LBB0_3:
	movl	$64, %eax  ; <-- dead
	retq
```

I noticed this in `next_power_of_two`, which without this PR generates the following:
```asm
	cmpq	$2, %rcx
	jae	.LBB1_2
	movl	$1, %eax
	retq
.LBB1_2:
	decq	%rcx
	je	.LBB1_3
	bsrq	%rcx, %rcx
	xorq	$63, %rcx
	jmp	.LBB1_5
.LBB1_3:
	movl	$64, %ecx  ; <-- dead
.LBB1_5:
	movq	$-1, %rax
	shrq	%cl, %rax
	incq	%rax
	retq
```

And with this PR becomes
```asm
	cmpq	$2, %rcx
	jae	.LBB0_2
	movl	$1, %eax
	retq
.LBB0_2:
	decq	%rcx
	bsrq	%rcx, %rcx
	xorl	$63, %ecx
	movq	$-1, %rax
	shrq	%cl, %rax
	incq	%rax
	retq
```
2017-06-10 09:11:36 +00:00
bors
e1480499b4 Auto merge of #42533 - Mark-Simulacrum:macro-parse-speed-small, r=jseyfried
Speed up expansion

This reduces duplication, thereby increasing expansion speed. Based on tests with rust-uinput, this produces a 29x performance win (440 seconds to 15 seconds). I want to land this first, since it's a minimal patch, but with more changes to the macro parsing I can get down to 12 seconds locally.

There is one FIXME added to the code that I'll keep for now since changing it will spread outward and increase the patch size, I think.

Fixes #37074.

r? @jseyfried
cc @oberien
2017-06-10 06:50:12 +00:00
Dylan Maccora
f52ac18840 env docs completion. 2017-06-10 16:19:28 +10:00
bors
60ac9f467c Auto merge of #42573 - frewsxcv:rollup, r=frewsxcv
Rollup of 5 pull requests

- Successful merges: #42307, #42385, #42531, #42551, #42558
- Failed merges:
2017-06-09 23:19:49 +00:00
Clar Charr
f8d5f90ade Move Drop to module. 2017-06-09 19:07:27 -04:00
Clar Charr
b099e0e786 Move CoerceUnsized to module. 2017-06-09 19:07:27 -04:00
Clar Charr
6693b4d505 Move Index to module. 2017-06-09 19:07:27 -04:00
Clar Charr
fefa521e50 Move Deref to module. 2017-06-09 19:07:27 -04:00
Clar Charr
bc9dc0ab3e Move Try to module. 2017-06-09 19:07:27 -04:00
Clar Charr
f774cddcf2 Move placement new operators to module. 2017-06-09 19:07:26 -04:00
Clar Charr
d460aca720 Move bit ops to module. 2017-06-09 19:07:26 -04:00
Clar Charr
75677e0646 Move arithmetic ops to module. 2017-06-09 19:07:26 -04:00
Clar Charr
b9c8e99955 Move Fn to module. 2017-06-09 19:07:25 -04:00
Corey Farwell
3be7f8bfed Rollup merge of #42558 - xfq:patch-1, r=steveklabnik
Update TRPL link in README.md
2017-06-09 18:29:29 -04:00
Corey Farwell
ad1a83863f Rollup merge of #42551 - tshepang:better-cell-replace-docs, r=steveklabnik
doc: a more complete explanation, and a better example
2017-06-09 18:29:28 -04:00
Corey Farwell
19ba908ac0 Rollup merge of #42531 - mmatyas:aarch64_compile-test_fix, r=nagisa
Ignore variadic FFI test on AArch64

I've cross compiled Rust to `aarch64-linux-gnu`, and tried to run the compile-fail tests, but `variadic-ffi.rs` fails with the following error:

```
The ABI `"stdcall"` is not supported for the current target [E0570]
```

The test seems to be ignored on (32-bit) ARM, so I turned it off for AArch64 too.
2017-06-09 18:29:27 -04:00
Corey Farwell
1fcb6d86dc Rollup merge of #42385 - Manishearth:its-a-vec, r=steveklabnik
Vec<T> is pronounced 'vec'

I've never heard it pronounced "vector". Is this an outdated recommendation?

(or have I been doing it wrong all this time)

r? @steveklabnik
2017-06-09 18:29:26 -04:00
Corey Farwell
9163f338f9 Rollup merge of #42307 - clarcharr:js-license, r=frewsxcv
Make rustdoc.js use license comments.

This will ensure that JS minifiers and the like will preserve the license statement even after minimisation.
2017-06-09 18:29:25 -04:00
Oliver Middleton
577c059d50 rustdoc: Use create_dir_all to create output directory
Currently rustdoc will fail if passed `-o foo/doc` if the `foo`
directory doesn't exist.

Also remove unneeded `mkdir` as `create_dir_all` can now handle
concurrent invocations.
2017-06-09 23:03:08 +01:00
Georg Brandl
496bd63f33 Simplify FromIterator example of Result 2017-06-09 22:20:32 +02:00
arthurprs
1cd077dd40 Revert "Update jemalloc to 4.5.0"
This reverts commit 65d0be3b7b.
2017-06-09 20:23:38 +02:00
bors
3d5b8c6266 Auto merge of #42278 - gentoo90:gdb-pretty-printers, r=michaelwoerister
Fix GDB pretty-printer for tuples and pointers

Names of children should not be the same, because GDB uses them to distinguish the children.

|Before|After|
|---|---|
|![tuples_before](https://cloud.githubusercontent.com/assets/1297574/26527639/5d6cf10e-43a0-11e7-9498-abfcddb08055.png)|![tuples_after](https://cloud.githubusercontent.com/assets/1297574/26527655/9699233a-43a0-11e7-83c6-f58f713b51a0.png)|

`main.rs`
```rust
enum Test {
    Zero,
    One(i32),
    Two(i32, String),
    Three(i32, String, Vec<String>),
}

fn main() {
    let tuple = (1, 2, "Asdfgh");
    let zero = Test::Zero;
    let one = Test::One(10);
    let two = Test::Two(42, "Qwerty".to_owned());
    let three = Test::Three(9000,
                            "Zxcvbn".to_owned(),
                            vec!["lorem".to_owned(), "ipsum".to_owned(), "dolor".to_owned()]);
    println!(""); // breakpoint here
}
```

`launch.json`
```json
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "gdb",
            "request": "launch",
            "gdbpath": "rust-gdb",
            "name": "Launch Program",
            "valuesFormatting": "prettyPrinters", //this requires plugin Native Debug >= 0.20.0
            "target": "./target/debug/test_pretty_printers",
            "cwd": "${workspaceRoot}"
        }
    ]
}
```
2017-06-09 18:17:15 +00:00
gentoo90
63076ddbb8 Add compat_str() which works with unicode in both Python 2 and 3
GDB can be built with Python 2 or with Python 3
2017-06-09 19:09:02 +03:00
gentoo90
d7c0d7569b Pretty-printers tests: gdbr -> gdb 2017-06-09 18:51:28 +03:00
Michael Woerister
7f482808f9 incr.comp.: Clean up and optimize dep-graph loading. 2017-06-09 15:03:34 +02:00
Michael Woerister
3607174909 incr.comp.: Uniformly represent DepNodes as (Kind, StableHash) pairs. 2017-06-09 15:03:34 +02:00
bors
5fe923d434 Auto merge of #42507 - ibabushkin:external-span-trans, r=eddyb
Fix translation of external spans

Previously, I noticed that spans from external crates don't generate any output. This limitation is problematic if analysis is performed on one or more external crates, as is the case with [rust-semverver](https://github.com/ibabushkin/rust-semverver). This change should address this behaviour, with the potential drawback that a minor performance hit is to be expected, as spans from potentially large crates have to be translated now.
2017-06-09 12:49:49 +00:00
bors
a7ac71b978 Auto merge of #42521 - alexcrichton:enosys, r=cuviper
std: Handle ENOSYS when calling `pipe2`

Should help fix an accidental regression from #39386.
2017-06-09 10:28:12 +00:00
Eduard-Mihai Burtescu
5175bc18b5 rustc_typeck: do not mutate tables directly during upvar inference. 2017-06-09 12:27:56 +03:00
Eduard-Mihai Burtescu
8b1b05bceb rustc: track the current ty::ParamEnv in lint::LateContext. 2017-06-09 12:27:56 +03:00
Eduard-Mihai Burtescu
76a50706a8 rustc: remove redundant krate field from lint::LateContext. 2017-06-09 12:27:56 +03:00
bors
19193d6390 Auto merge of #42504 - michaelwoerister:hash-dep-nodes-prep, r=nikomatsakis
Some preparatory refactorings for hash-based DepNodes

This PR collects some changes that turn out to be necessary for implementing `DepNodes` based on stable hashes (see #42294). The commits are self-contained and mostly straightforward.

The most interesting change here is the introduction of `DefIndices` for things that are not part of the AST: Some pieces of crate metadata now have a `DefIndex` too.

cc @eddyb
r? @nikomatsakis
2017-06-09 08:03:14 +00:00
Djzin
83f1f118e5 hack around bug in emscripten 2017-06-09 07:07:58 +01:00
Scott McMurray
6d86f0c018 Use ctlz_nonzero to improve ASM from next_power_of_two 2017-06-08 23:01:39 -07:00
Scott McMurray
13e2400347 Add ctlz_nonzero & cttz_nonzero intrinsics
LLVM currently doesn't remove the "bypass if argument is zero" assembly inside branches where the value is known to be non-zero, pessimizing code that uses uN::leading_zeros
2017-06-08 23:01:39 -07:00
Fuqiao Xue
09ac478c5c Update TRPL link in README.md 2017-06-09 13:37:22 +08:00
bors
2416e222ec Auto merge of #42027 - mjkillough:typedef_assoc_items, r=QuietMisdreavus
Document direct implementations on type aliases.

This improves #32077, but is not a complete fix.

For a type alias `type NewType = AliasedType`, it will include any `impl NewType` and `impl
Trait for NewType` blocks in the documentation for `NewType`.

A complete fix would include the implementations from the aliased type in the type alias' documentation, so that users have a complete picture of methods that are available on the alias. However, to do this properly would require a fix for #14072, as the alias may affect the type parameters of the type alias, making the documentation difficult to understand. (That is, for `type Result = std::result::Result<(), ()>` we would ideally show documentation for `impl Result<(), ()>`, rather than generic documentation for `impl<T, E> Result<T, E>`).

I think this improvement is worthwhile, as it exposes implementations which are not currently documented by rustdoc. The documentation for the implementations on the aliased type are still accessible by clicking through to the docs for that type. (Although perhaps it's now less obvious to the user that they should click-through to get there).
2017-06-09 04:09:39 +00:00
Michael Killough
2da350168d Document direct implementations on type aliases.
This improves #32077, but is not a complete fix. For a type alias `type
NewType = AliasedType`, it will include any `impl NewType` and `impl
Trait for NewType` blocks in the documentation for `NewType`.

A complete fix would include the implementations from the aliased type
in the type alias' documentation, so that users have a complete
picture of methods that are available on the alias. However, to do this
properly would require a fix for #14072, as the alias may affect the
type parameters of the type alias, making the documentation difficult to
understand. (That is, for `type Result = std::result::Result<(), ()>` we
would ideally show documentation for `impl Result<(), ()>`, rather than
generic documentation for `impl<T, E> Result<T, E>`).

I think this improvement is worthwhile, as it exposes implementations
which are not currently documented by rustdoc. The documentation for the
implementations on the aliased type are still accessible by clicking
through to the docs for that type. (Although perhaps it's now less
obvious to the user that they should click-through to get there).
2017-06-09 10:57:08 +09:00
bors
9454dd5d2d Auto merge of #42491 - RalfJung:bootstrap-help, r=alexcrichton
bootstrap: improve 'build --help' by explaining what exactly the last example does

I recently found myself confused about what exactly gets built how often when I run which command; I think this would have helped me.

One thing I did not touch, but I feel could also be improved, is the wording just above: "For a quick build with a usable compile, you can pass".  I am not a native speaker, but this sounds odd to me. Do you mean "For a quick build of a usable compiler" (but then it should say where the usable compiler is produced)? Or do you mean "For a quick build testing if the compiler is usable"? I can reword this, but I'd like to make sure I understand the intent of the message.

What about
```
    For a quick build of a usable compiler, you can pass:

        ./x.py build --stage 1 src/libtest

    This will first build everything once (like --stage 0 without further
    arguments would), and then use the compiler built in stage 0 to build
    src/libtest and its dependencies.
    Once this is done, build/$ARCH/stage1 contains a usable compiler.
```
However, I am not sure this is actually true. In particular, why even bother building the libstd in stage 1? AFAIK that ends up in `build/*/stage1-std`, not in `build/*/stage1` (which is filled from `build/*/stage0-*`).
2017-06-08 22:21:29 +00:00
Tshepang Lekhonkhobe
c288864ed0 doc: a more complete explanation, and a better example 2017-06-08 22:52:54 +02:00
bors
148e917148 Auto merge of #42487 - alexcrichton:smaller-personality, r=vadimcn
std: Avoid panics in rust_eh_personality

This commit removes a few calls to panic and/or assert in `rust_eh_personality`.
This function definitely can't itself panic (that'd probably segfault or do
something else weird) and I was also noticing that a `pub extern fn foo() {}`
cdylib was abnormally large. Turns out all that size was the panicking machinery
brought in by the personality function!

The change here is to return a `Result` internally so we can bubble up the fatal
error, eventually translating to the appropriate error code for the libunwind
ABI.
2017-06-08 19:52:53 +00:00
Squirrel
de8bbd2b16 Assert failure message easier to read
By having the left and right strings above and below on the same line it helps spot the difference between the two. E.g.

thread 'tests::test_safe_filename' panicked at 'assertion failed: `(left == right)`
left:  `"-aandb--S123.html"`
right: `"-aandb-S123.html"`',

When the strings are both on the same line it take a lot longer to spot the difference. It is a small change but the small time savings add up with repetition. This helps Rust be an excellent language to write tests in.
2017-06-08 18:38:49 +01:00
Mark Simulacrum
3d9ebf2916 Speed up expansion.
This reduces duplication, thereby increasing expansion speed.
2017-06-08 08:53:31 -06:00
Alex Crichton
44e6406f9a std: Handle ENOSYS when calling pipe2
Should help fix an accidental regression from #39386.
2017-06-08 07:31:05 -07:00
Simonas Kazlauskas
8938269db6 Upgrade LLVM
Includes https://github.com/rust-lang/llvm/pull/80
Includes https://github.com/rust-lang/llvm/pull/79

Also adds tests and thus fixes #24194
2017-06-08 17:09:28 +03:00
Alex Crichton
52805d233b std: Avoid panics in rust_eh_personality
This commit removes a few calls to panic and/or assert in `rust_eh_personality`.
This function definitely can't itself panic (that'd probably segfault or do
something else weird) and I was also noticing that a `pub extern fn foo() {}`
cdylib was abnormally large. Turns out all that size was the panicking machinery
brought in by the personality function!

The change here is to return a `Result` internally so we can bubble up the fatal
error, eventually translating to the appropriate error code for the libunwind
ABI.
2017-06-08 07:06:43 -07:00