Commit graph

11280 commits

Author SHA1 Message Date
Scott Olson
55e48420db Minor code cleanup. 2015-09-28 19:21:18 -06:00
bors
a305b0624b Auto merge of #28703 - gavinb:master, r=alexcrichton
Tests invoking a static method using a type alias.

Closes #11047
2015-09-28 21:08:40 +00:00
Gavin Baker
f5b6a32230 Test case for Issue 11047
Tests invoking a static method using a type alias
2015-09-28 22:33:29 +10:00
Manish Goregaokar
7e6e64b12d Rollup merge of #28681 - arielb1:destructor-fixes, r=eddyb
Fixes #28568 

r? @eddyb
2015-09-27 15:05:17 +05:30
Manish Goregaokar
5f90904e5a Rollup merge of #28673 - wthrowe:bad-archive, r=alexcrichton 2015-09-27 15:05:17 +05:30
bors
dde7283b80 Auto merge of #28651 - dotdash:exhaustive_match, r=eddyb
By putting an "unreachable" instruction into the default arm of a switch
instruction we can let LLVM know that the match is exhaustive, allowing
for better optimizations.

For example, this match:
```rust
pub enum Enum {
    One,
    Two,
    Three,
}

impl Enum {
    pub fn get_disc(self) -> u8 {
        match self {
            Enum::One => 0,
            Enum::Two => 1,
            Enum::Three => 2,
        }
    }
}
```

Currently compiles to this on x86_64:
```asm
  .cfi_startproc
  movzbl  %dil, %ecx
  cmpl  $1, %ecx
  setne %al
  testb %cl, %cl
  je  .LBB0_2
  incb  %al
  movb  %al, %dil
.LBB0_2:
  movb  %dil, %al
  retq
.Lfunc_end0:
```

But with this change we get:
```asm
  .cfi_startproc
  movb  %dil, %al
  retq
.Lfunc_end0:
```
2015-09-27 05:29:39 +00:00
bors
7bf4c885fc Auto merge of #28646 - vadimcn:imps, r=alexcrichton
As discussed in the referenced issues, this PR makes rustc emit `__imp_<symbol>` stubs for all public static data to ensure smooth linking in on `-windows-msvc` targets.  
Resolves #26591, cc #27438
2015-09-26 23:38:54 +00:00
Ariel Ben-Yehuda
9a86713166 don't crash when there are multiple conflicting implementations of Drop
Fixes #28568
2015-09-26 23:14:26 +03:00
bors
54f7b1d455 Auto merge of #28632 - alexcrichton:update-match-indices, r=Kimundi
This commit updates the `MatchIndices` and `RMatchIndices` iterators to follow
the same pattern as the `chars` and `char_indices` iterators. The `matches`
iterator currently yield `&str` elements, so the `MatchIndices` iterator now
yields the index of the match as well as the `&str` that matched (instead of
start/end indexes).

cc #27743
2015-09-26 20:06:51 +00:00
Ariel Ben-Yehuda
346088b555 show each object-safety violation once
different supertraits can suffer from the same object-safety violation,
leading to duplication in the error message. Avoid it.

Fixes #20692
2015-09-26 21:49:54 +03:00
Ariel Ben-Yehuda
fe6ad097c6 deduplicate trait errors before they are displayed
Because of type inference, duplicate obligations exist and cause duplicate
errors. To avoid this, only display the first error for each (predicate,span).

The inclusion of the span is somewhat bikesheddy, but *is* the more
conservative option (it does not remove some instability, as duplicate
obligations are ignored by `duplicate_set` under some inference conditions).

Fixes #28098
cc #21528 (is it a dupe?)
2015-09-26 21:13:31 +03:00
bors
2e88c36ebc Auto merge of #28642 - petrochenkov:name3, r=nrc
This PR removes random remaining `Ident`s outside of libsyntax and performs general cleanup
In particular, interfaces of `Name` and `Ident` are tidied up, `Name`s and `Ident`s being small `Copy` aggregates are always passed to functions by value, and `Ident`s are never used as keys in maps, because `Ident` comparisons are tricky.

Although this PR closes https://github.com/rust-lang/rust/issues/6993 there's still work related to it:
- `Name` can be made `NonZero` to compress numerous `Option<Name>`s and `Option<Ident>`s but it requires const unsafe functions.
- Implementation of `PartialEq` on `Ident` should be eliminated and replaced with explicit hygienic, non-hygienic or member-wise comparisons.
- Finally, large parts of AST can potentially be converted to `Name`s in the same way as HIR to clearly separate identifiers used in hygienic and non-hygienic contexts.

r? @nrc
2015-09-26 14:48:56 +00:00
bors
9169e6c53c Auto merge of #28629 - arielb1:supertrait-self, r=eddyb
Fixes #28576

r? @eddyb
2015-09-26 13:03:08 +00:00
William Throwe
eef6030c92 Don't ICE if an archive isn't actually an archive 2015-09-26 01:54:12 -04:00
Vadim Chugunov
c21fcac293 Converted test to rpass. 2015-09-25 18:48:54 -07:00
bors
78ce46ffdd Auto merge of #28612 - gandro:targetvendor, r=alexcrichton
This adds a new target property, `target_vendor`. It is to be be used as a matcher for conditional compilation. The vendor is part of the [autoconf target triple](http://llvm.org/docs/doxygen/html/classllvm_1_1Triple.html#details): `<arch><sub>-<vendor>-<os>-<env>`. `arch`, `target_os` and `target_env` are already supported by Rust.

This change was suggested in PR #28593. It enables conditional compilation based on the vendor. This is needed for the rumprun target, which needs to match against both, target_os and target_vendor.

The default value for `target_vendor` is "unknown", "apple" and "pc" are other common values.

Matching against the `target_vendor` is introduced behind the feature gate `#![feature(cfg_target_vendor)]`.

This is the first time I messed around with rustc internals. I just added the my code where I found the existing `target_*` variables, hopefully I haven't missed anything. Please review with care. :)

r? @alexcrichton
2015-09-26 00:14:39 +00:00
Alex Crichton
d5f2d3b177 std: Update MatchIndices to return a subslice
This commit updates the `MatchIndices` and `RMatchIndices` iterators to follow
the same pattern as the `chars` and `char_indices` iterators. The `matches`
iterator currently yield `&str` elements, so the `MatchIndices` iterator now
yields the index of the match as well as the `&str` that matched (instead of
start/end indexes).

cc #27743
2015-09-25 09:29:23 -07:00
Björn Steinbrink
91f7c60d2d Tell LLVM when a match is exhaustive
By putting an "unreachable" instruction into the default arm of a switch
instruction we can let LLVM know that the match is exhaustive, allowing
for better optimizations.

For example, this match:
```rust
pub enum Enum {
    One,
    Two,
    Three,
}

impl Enum {
    pub fn get_disc(self) -> u8 {
        match self {
            Enum::One => 0,
            Enum::Two => 1,
            Enum::Three => 2,
        }
    }
}
```

Currently compiles to this on x86_64:
```asm
  .cfi_startproc
  movzbl  %dil, %ecx
  cmpl  $1, %ecx
  setne %al
  testb %cl, %cl
  je  .LBB0_2
  incb  %al
  movb  %al, %dil
.LBB0_2:
  movb  %dil, %al
  retq
.Lfunc_end0:
```

But with this change we get:
```asm
  .cfi_startproc
  movb  %dil, %al
  retq
.Lfunc_end0:
```
2015-09-25 11:09:19 +02:00
Vadim Chugunov
e82bb915e4 Fix dllimports of static data from rlibs 2015-09-24 22:07:12 -07:00
bors
6c2e3fbe90 Auto merge of #28505 - apasel422:issue-28448, r=alexcrichton
Closes #28448.

r? @brson
2015-09-25 02:05:25 +00:00
bors
5ca60d9431 Auto merge of #28608 - eddyb:no-place-for-an-old-box, r=pnkfelix
While this is technically a [breaking-change], there is no excuse for touching `HEAP`.
r? @pnkfelix
2015-09-24 20:42:56 +00:00
Vadim Petrochenkov
f284cbc7af Cleanup interfaces of Name, SyntaxContext and Ident
Make sure Name, SyntaxContext and Ident are passed by value
Make sure Idents don't serve as keys (or parts of keys) in maps, Ident comparison is not well defined
2015-09-24 23:05:02 +03:00
Ariel Ben-Yehuda
77e8f33c3d early-prohibit objects with Self-containing supertraits
Fixes #28576
2015-09-24 18:27:29 +03:00
Eduard Burtescu
f293ea28b4 Remove the deprecated box(PLACE) syntax. 2015-09-24 18:00:08 +03:00
Sebastian Wicki
af68cdfea1 rustc: Add target_vendor for target triples
This adds a new target property, `target_vendor` which can be used as a
matcher for conditional compilation. The vendor is part of the autoconf
target triple: <arch><sub>-<vendor>-<os>-<env>

The default value for `target_vendor` is "unknown".

Matching against the `target_vendor` with `#[cfg]` is currently feature
gated as `cfg_target_vendor`.
2015-09-24 01:44:55 +02:00
bors
4f15e465e5 Auto merge of #28596 - sanxiyn:dedup-unused, r=alexcrichton
Fix #22599.
2015-09-23 21:41:09 +00:00
bors
afae2ff723 Auto merge of #28569 - semarie:stdcpp-tests, r=alexcrichton
extend the search path of libraries to /usr/local/lib in `run-make`
testsuite. It should permit to find libstdc++.so on usual directory.

r? @alexcrichton
2015-09-23 18:55:01 +00:00
Vadim Petrochenkov
40ce80484c Remove random Idents outside of libsyntax 2015-09-23 20:04:49 +03:00
Seo Sanghyeon
54792febe0 Do not traverse RHS of assignment twice for unused variables lint
walk_expr includes call to visit_expr for subexpressions.
2015-09-23 11:52:37 +09:00
bors
b2f379cdc2 Auto merge of #28535 - petrochenkov:name, r=nrc
Part of https://github.com/rust-lang/rust/issues/6993

This patch replaces `Ident`s with `Name`s in data structures of HIR and updates the dependent crates to compile and pass `make check`.
Some HIR structures still use `Ident`s, namely `PathSegment`, `PatIdent`, `ExprWhile`, `ExprLoop`, `ExprBreak` and `ExprAgain`,  they need them for resolve (but `PathSegment` is special, see https://github.com/rust-lang/rust/issues/6993#issuecomment-141256292).

r? @nrc
2015-09-23 00:25:42 +00:00
bors
ad82e0ac18 Auto merge of #28504 - Eljay:fix-trait-privacy, r=nrc
Fixes #16264 / #18241.

As far as I can tell, it should be impossible for a trait to be inaccessible if it's in scope, so this check is unnecessary. Are there any cases where this check is actually needed?
2015-09-22 22:42:00 +00:00
bors
ecbd8c3b43 Auto merge of #28369 - ebfull:fix-higher-ranked, r=nikomatsakis
Fixes #28279.

Currently

`common_supertype(*mut for<'a> Fn(&'a usize), *mut for<'a> Fn(&'a usize) + 'static)`

equals `*mut Fn(&usize)` which seems to be caused by `higher_ranked_sub()` allowing region variables to escape the comparison. This prevents inference from working properly with stuff like `Rc<Fn(&T)>`.

r? @nikomatsakis
2015-09-22 20:57:43 +00:00
Sébastien Marie
8474af0321 run-make: search libstdc++ in /usr/local/lib too
extend the search path of libraries to /usr/local/lib in `run-make`
testsuite. It should permit to find libstdc++.so on usual directory.
2015-09-22 18:56:30 +02:00
Vadim Petrochenkov
a4af958786 Use Names in HIR Items 2015-09-22 19:53:52 +03:00
Lee Jeffery
b3e1aca40f Add UFCS privacy test. 2015-09-22 09:06:43 +01:00
bors
f07f4ef743 Auto merge of #28427 - DiamondLovesYou:gdb-debug-script-load, r=alexcrichton
This is so LLVM isn't forced to load every byte of it. Also sets the alignment of
the load. Adds a test for the debug script section.

r? @alexcrichton
2015-09-22 03:35:55 +00:00
bors
e9d2587766 Auto merge of #28364 - petrochenkov:usegate, r=alexcrichton
Closes https://github.com/rust-lang/rust/issues/28075
Closes https://github.com/rust-lang/rust/issues/28388

r? @eddyb 
cc @brson
2015-09-22 01:12:26 +00:00
Richard Diamond
9a24025661 Avoid loading the whole gdb debug scripts section.
This is so LLVM isn't forced to load every byte of it. Also sets the alignment of
the load. Adds a test for the debug script section.
2015-09-21 15:43:52 -05:00
bors
5120f4a3f9 Auto merge of #28562 - llogiq:shootout, r=alexcrichton
Since 1.3.0 the BufWriter has seen tremendous speedups. So when I use it in the shootout benchmarks, I see some nice speedup (which up to 1.2.0 was nixed by the pessimizations during initialization).
2015-09-21 18:21:56 +00:00
Andrew Paseltiner
22f86d09e9 Add tests for macro-based impls
Closes #28561.
2015-09-21 10:42:18 -04:00
llogiq
78eee36e5b Use BufWriter in fasta-redux for a nice speedup 2015-09-21 11:24:58 +02:00
bors
aed5c3a1c8 Auto merge of #28532 - Eljay:misc-fixes, r=bluss
As the title says, just cleaning up some old stuff.
2015-09-20 13:39:57 +00:00
Lee Jeffery
140e2d3a09 Miscellaneous cleanup for old issues. 2015-09-20 11:37:08 +01:00
bors
25aaeb40b1 Auto merge of #28529 - Manishearth:rollup, r=Manishearth
- Successful merges: #28463, #28507, #28522, #28525, #28526
- Failed merges:
2015-09-20 07:32:46 +00:00
Manish Goregaokar
fb690c7af6 Rollup merge of #28522 - apasel422:issue-28091, r=alexcrichton
Closes #28091.

r? @huonw
2015-09-20 11:16:27 +05:30
bors
fd38a75077 Auto merge of #28503 - marcusklaas:pub-extern, r=alexcrichton
Fixes https://github.com/rust-lang/rust/issues/28472.
2015-09-20 05:44:45 +00:00
bors
fbce4503f8 Auto merge of #28519 - wthrowe:fixup-28321, r=alexcrichton
I assume the expected error changed during the development of pull
request #28321 and that wasn't noticed because the test was
accidentally not running.

r? @nikomatsakis
2015-09-20 03:57:13 +00:00
Andrew Paseltiner
6fa0ff25bd Feature-gate #[no_debug] and #[omit_gdb_pretty_printer_section]
Closes #28091.
2015-09-19 19:39:25 -04:00
bors
783c3fcc1e Auto merge of #28345 - japaric:op-assign, r=nmatsakis
Implements overload-able augmented/compound assignments, like `a += b` via the `AddAssign` trait, as specified in RFC [953]

[953]: https://github.com/rust-lang/rfcs/blob/master/text/0953-op-assign.md

r? @nikomatsakis
2015-09-19 21:19:29 +00:00
William Throwe
a51ae514ab Move test to the right directory and make it pass
I assume the expected error changed during the development of pull
request #28321 and that wasn't noticed because the test was
accidentally not running.
2015-09-19 13:54:42 -04:00