Commit graph

16312 commits

Author SHA1 Message Date
Cameron Hart
5cccd6a9ee Apply packed and align restrictions to unions. 2017-07-24 07:54:48 +10:00
Cameron Hart
200c4d0410 Better detection of repr packed and align
Fixes issue #43317.
2017-07-23 17:27:13 +10:00
bors
504328a31a Auto merge of #43274 - bitshifter:union-align, r=petrochenkov
Support repr alignment on unions.

Requested as part of RFC 1358 https://github.com/rust-lang/rust/issues/33626#issuecomment-309137284.
2017-07-21 23:46:05 +00:00
bors
e3c8433ebb Auto merge of #43183 - michaelwoerister:internalize-symbols-without-llvm, r=eddyb
trans: Internalize symbols without relying on LLVM

This PR makes the compiler use the information gather by the trans collector in order to determine which symbols/trans-items can be made internal. This has the advantages:
+ of being LLVM independent,
+ of also working in incremental mode, and
+ of allowing to not keep all LLVM modules in memory at the same time.

This is in preparation for fixing issue #39280.

cc @rust-lang/compiler
2017-07-21 02:24:18 +00:00
bors
1edbc3df0d Auto merge of #43270 - petrochenkov:fixstab, r=alexcrichton
Fix checking for missing stability annotations

This was a regression from https://github.com/rust-lang/rust/pull/37676 causing "unmarked API" ICEs like https://github.com/rust-lang/rust/issues/43027.

r? @alexcrichton
2017-07-20 09:01:58 +00:00
bors
1beaea26ff Auto merge of #43251 - gaurikholkar:span_reorder, r=nikomatsakis
Reorder span suggestions to appear below main labels

A fix to #41698

r? @nikomatsakis
2017-07-20 03:36:14 +00:00
bors
582af6e1ad Auto merge of #43178 - zackmdavis:some_suggestion, r=eddyb
suggest one-argument enum variant to fix type mismatch when applicable

Following @est31's [suggestion](https://github.com/rust-lang/rust/issues/42764#issuecomment-309680886).

![some_suggestion](https://user-images.githubusercontent.com/1076988/28101064-ee83f51e-667a-11e7-9e4f-d8f9eb2fb6c3.png)

Resolves #42764.
2017-07-19 20:12:56 +00:00
bors
9bbbd29e82 Auto merge of #42859 - eddyb:const-size-and-align-of, r=nikomatsakis
Implement const fn {size,align}_of.

Fixes #34078.

r? @nikomatsakis
2017-07-19 16:58:02 +00:00
Eduard-Mihai Burtescu
148718b4f3 Implement const fn {size,align}_of. 2017-07-19 14:46:54 +03:00
bors
88e2c396a4 Auto merge of #43168 - pnkfelix:check-attr-gating, r=aturon
Slew of builtin-attribute gating tests

Slew of builtin-attribute "gating" tests for issue #43106.

Some stray observations:

 * I don't know if its a good thing that so many attributes allow inputs which are silently discarded. (I  made heavy use of that in writing my tests, but that was more out of curiosity than necessity.)
 * The difference between crate-level and non-crate-level behavior is quite significant in some cases. Definitely worth making sure one has tests for both cases. (Not as clear whether it was worthwhile trying the various other AST forms like `fn f()` vs `struct S;`)
 * `#[no_builtins]` and `#[no_mangle]` occur twice on the `BUILTIN_ATTRIBUTES` list. Thats almost certainly a bug. (Filed as #43148)
 * We are maximally liberal in what we allow for `#[test]` and `#[bench]` when one compiles without `--test`.
 * We allow `#[no_mangle]` on arbitrary AST nodes, but only warn about potential misuse on `fn`
 * We allow `#[cold]`, `#[must_use]`, `#[windows_subsystem]`, and `#[no_builtins]` on arbitrary AST nodes. I don't know off-hand what the semantics are for e.g. a `#[cold] type T = ...;`
 * We allow crate-level `#![inline]`. That's probably a bug since its otherwise restricted to `fn` items
2017-07-19 03:06:21 +00:00
bors
83c3621910 Auto merge of #40989 - matklad:comma-arms, r=petrochenkov
Unify rules about commas in match arms and semicolons in expressions

Original discussion: https://internals.rust-lang.org/t/syntax-of-block-like-expressions-in-match-arms/5025/7.

Currently, rust uses different rules to determine if `,` is needed after an expression in a match arm and if `;` is needed in an expression statement:

```Rust
fn stmt() {
    # no need for semicolons
    { () }
    if true { () } else { () }
    loop {}
    while true {}
}

fn match_arm(n: i32) {
    match n {
        1 => { () } # can omit comma here
        2 => if true { () } else { () }, # but all other cases do need commas.
        3 => loop { },
        4 => while true {},
        _ => ()
    }
}
```

This seems weird: why would you want to require `,` after and `if`?

This PR unifies the rules. It is backwards compatible because it allows strictly more programs.
2017-07-19 00:35:33 +00:00
Mark Simulacrum
fc7f0fd40a Rollup merge of #43312 - lu-zero:master, r=alexcrichton
powerpc: Ignore the stack-probes test

One little step further to have the test working fine on power8 :)
2017-07-18 09:41:36 -06:00
Aleksey Kladov
e3d052f30a Ignore pretty-test 2017-07-18 15:21:18 +03:00
bors
83c659ef65 Auto merge of #42492 - petrochenkov:methlife, r=nikomatsakis
Support generic lifetime arguments in method calls

Fixes https://github.com/rust-lang/rust/issues/42403
Fixes https://github.com/rust-lang/rust/issues/42115
Lifetimes in a method call `x.f::<'a, 'b, T, U>()` are treated exactly like lifetimes in the equivalent UFCS call `X::f::<'a, 'b, T, U>`.
In addition, if the method has late bound lifetime parameters (explicit or implicit), then explicitly specifying lifetime arguments is not permitted (guarded by a compatibility lint).
[breaking-change] because previously lifetimes in method calls were accepted unconditionally.

r? @eddyb
2017-07-18 10:20:13 +00:00
Luca Barbato
e185c6c3d3 powerpc: Ignore the stack-probes test 2017-07-18 08:50:58 +00:00
Aleksey Kladov
9a7cb9398d Catch expression does not require semicolon to be a statement 2017-07-18 03:42:21 +03:00
Aleksey Kladov
5e25dc9966 Unify rules about commas in match arms and semicolons in expressions 2017-07-18 03:42:21 +03:00
Vadim Petrochenkov
39114f9169 Make late_bound_lifetime_arguments lint warn-by-default 2017-07-18 00:33:44 +03:00
Vadim Petrochenkov
46f427bee9 Fix incorrect subst index
Fix treatment of lifetimes defined in nested types during detection of late bound regions in signatures.
Do not replace substs with inference variables when "cannot specify lifetime arguments explicitly..." is reported as a lint.
2017-07-18 00:12:48 +03:00
Vadim Petrochenkov
e40cedb393 Detect implicitly defined late bound lifetime parameters as well 2017-07-18 00:12:48 +03:00
Vadim Petrochenkov
7ca378b251 Prohibit lifetime arguments in path segments with late bound lifetime parameters 2017-07-18 00:12:48 +03:00
Vadim Petrochenkov
9967e9e3e9 Support generic lifetime arguments in method calls 2017-07-18 00:12:48 +03:00
gaurikholkar
26a8357f5c reorder span labels 2017-07-18 00:07:37 +05:30
bors
2652ce6771 Auto merge of #42711 - Firstyear:san-on-dylib, r=alexcrichton
Add support for dylibs with Address Sanitizer

Many applications use address sanitizer to assert correct behaviour of their programs. When using Rust with C, it's much more important to assert correct programs with tools like asan/lsan due to the unsafe nature of the access across an ffi boundary. However, previously only rust bin types could use asan. This posed a challenge for existing C applications that link or dlopen .so when the C application is compiled with asan.

This PR enables asan to be linked to the dylib and cdylib crate type. We alter the test to check the proc-macro crate does not work with -Z sanitizer=address. Finally, we add a test that compiles a shared object in rust, then another rust program links it and demonstrates a crash through the call to the library.

This PR is nearly complete, but I do require advice on the change to fix the -lasan that currently exists in the dylib test. This is required because the link statement is not being added correctly to the rustc build when -Z sanitizer=address is added (and I'm not 100% sure why)

Thanks,
2017-07-17 17:02:18 +00:00
bors
028569ab1b Auto merge of #43266 - feadoor:issue-43253-exclusive-range-warning, r=nikomatsakis
Fix `range_covered_by_constructor` for exclusive ranges.

This resolves #43253
2017-07-17 13:31:37 +00:00
Oliver Schneider
eb7f429ea5 Move resolve diagnostic instability to compile-fail
The produced paths aren't stable between builds, since
reporting paths inside resolve, before resolve is finished
might produce paths resolved to type aliases instead of
the concrete type.

Compile-fail tests can match just parts of messages, so they
don't "suffer" from this issue.

This is just a workaround, the instability should be fixed
in the future.
2017-07-17 10:16:08 +02:00
Oliver Schneider
a9d9a4aab4
Change some helps to suggestions 2017-07-17 10:03:37 +02:00
Oliver Schneider
4a286639e8
Move some tests from compile-fail to ui 2017-07-17 08:38:54 +02:00
Cameron Hart
ebc2f7d6ed Support repr alignment on unions. 2017-07-17 07:55:49 +10:00
Vadim Petrochenkov
465ada623a Fix checking for missing stability annotations
Remove couple of unnecessary `#![feature(staged_api)]`.
2017-07-16 23:15:07 +03:00
Sam Cappleman-Lynes
b11596867d Fix range_covered_by_constructor for exclusive ranges.
This resolves #43253
2017-07-16 17:34:09 +01:00
bors
8f1339af2e Auto merge of #43237 - zackmdavis:missing_sum_and_product_for_128_bit_integers, r=nagisa
add u128/i128 to sum/product implementors

Resolves #43235.
2017-07-16 12:42:56 +00:00
Zack M. Davis
80c603fc65 path, not name, in sole-argument variant type mismatch suggestion
We want the suggested replacement (which IDE tooling and such might offer to
automatically swap in) to, like, actually be correct: suggesting `MyVariant(x)`
when the actual fix is `MyEnum::MyVariant(x)` might be better than nothing, but
Rust is supposed to be the future of computing: we're better than better than
nothing.

As an exceptional case, we excise the prelude path, preferring to suggest
`Some` or `Ok` rather than `std::prelude::v1::Some` and
`std::prelude::v2::Ok`. (It's not worth the effort to future-proof against
hypothetical preludes v2, v3, &c.: we trust our successors to grep—excuse me,
ripgrep—for that.)

Also, don't make this preëmpt the existing probe-for-return-type suggestions,
despite their being looked unfavorably upon, at least in this situation
(https://github.com/rust-lang/rust/issues/42764#issuecomment-311388958): Cody
Schafer pointed out that that's a separate issue
(https://github.com/rust-lang/rust/pull/43178#issuecomment-314953229).

This is in the matter of #42764.
2017-07-15 12:46:03 -07:00
bors
086eaa78ea Auto merge of #43224 - jseyfried:fix_macro_idents_regression, r=nrc
macros: fix regression involving identifiers in `macro_rules!` patterns.

Fixes #42019.
r? @nrc
2017-07-15 19:12:03 +00:00
bors
70cd955277 Auto merge of #43179 - oli-obk:mark_all_the_expansions, r=jseyfried
Reintroduce expansion info for proc macros 1.1

r? @jseyfried
2017-07-15 08:36:27 +00:00
bors
8658908cf8 Auto merge of #43185 - durka:thread-local-pub-restricted, r=alexcrichton
support pub(restricted) in thread_local! (round 2)

Resurrected #40984 now that the issue blocking it was fixed. Original description:

`pub(restricted)` was stabilized in #40556 so let's go!

Here is a [playground](https://play.rust-lang.org/?gist=f55f32f164a6ed18c219fec8f8293b98&version=nightly&backtrace=1).

I changed the interface of `__thread_local_inner!`, which is supposedly unstable but this is not checked for macros (#34097 cc @petrochenkov @jseyfried), so this may be an issue.
2017-07-15 06:14:11 +00:00
William Brown
0af5c002a2 Add support for dylibs with Address Sanitizer. This supports cdylibs and staticlibs on gnu-linux targets. 2017-07-15 08:22:46 +10:00
Zack M. Davis
30ad6252a3 add u128/i128 to sum/product implementors
Resolves #43235.
2017-07-14 10:51:14 -07:00
bors
20f77c6dfd Auto merge of #43026 - arielb1:llvm-next, r=alexcrichton
[LLVM] Avoid losing the !nonnull attribute in SROA

Fixes #37945.

r? @alexcrichton
2017-07-14 09:54:13 +00:00
Jeffrey Seyfried
b5c5a0c3fd Fix regression involving identifiers in macro_rules! patterns. 2017-07-13 14:12:57 -07:00
Steve Klabnik
8dc69ff9c4 Rollup merge of #43125 - aochagavia:stable_drop, r=arielb1
Add regression tests to ensure stable drop order

Work towards #43034

I think this is all we need to do on the testing front regarding RFC 1857
2017-07-13 10:45:17 -04:00
Michael Woerister
c93e62b2c5 Adapt cgu-partitioning tests to pre-trans symbol internalization. 2017-07-13 13:29:25 +02:00
bors
b2c0707872 Auto merge of #43158 - PlasmaPower:thread-local-try-with, r=alexcrichton
Thread local try with

https://github.com/rust-lang/rfcs/pull/2030 was turned into this PR (the RFC was closed, but it looks like just a PR should be good).

See also: state stabilization issue: #27716

`try_with` is used in two places in std: stdio and thread_info. In stdio, it would be better if the result was passed to the closure, but in thread_info, it's better as is where the result is returned from the function call. I'm not sure which is better, but I prefer the current way as it better represents the scope.
2017-07-13 10:50:23 +00:00
Zack M. Davis
eac7410405 suggest one-argument enum variant to fix type mismatch when applicable
Most notably, this will suggest `Some(x)` when the expected type was
an Option<T> but we got an x: T.

Resolves #42764.
2017-07-12 17:36:22 -07:00
Adolfo Ochagavía
f86e433b67 Add regression tests to ensure stable drop order 2017-07-12 16:14:47 +02:00
Mark Simulacrum
e5288c9d6c Rollup merge of #43011 - qnighy:unsized-tuple-impls, r=aturon
Implement Eq/Hash/Debug etc. for unsized tuples.

As I mentioned in [the comment in #18469](https://github.com/rust-lang/rust/issues/18469#issuecomment-306767422), the implementations of `PartialEq`, `Eq`, `PartialOrd`, `Ord`, `Debug`, `Hash` can be generalized to unsized tuples.

This is consistent with the `derive` behavior for unsized structs.

```rust
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug, Default, Hash)]
struct MyTuple<X, Y, Z: ?Sized>(X, Y, Z);

fn f(x: &MyTuple<i32, i32, [i32]>) {
    x == x;
    x < x;
    println!("{:?}", x);
}
```

Questions:

- Need an RFC?
- Need a feature gate? I don't think it does because the unsized tuple coercion #42527 is feature-gated.
- I changed `builder.field($name);` into `builder.field(&$name);` in the `Debug` implementation to pass compilation. This won't affect the behavior because `Debug for &'a T` is a mere redirection to `Debug for T`. However, I don't know if it affects code size / performance.
2017-07-12 06:58:45 -06:00
Mark Simulacrum
1a7dc0a2cb Rollup merge of #43000 - estebank:on-unimplemented-path, r=arielb1
`rustc_on_unimplemented` supports referring to trait

Add support to `rustc_on_unimplemented` to reference the full path of
the annotated trait. For the following code:

```rust
pub mod Bar {
    #[rustc_on_unimplemented = "test error `{Self}` with `{Bar}` `{Baz}` `{Quux}` in `{Foo}`"]
    pub trait Foo<Bar, Baz, Quux> {}
}
```

the error message will be:

```
test error `std::string::String` with `u8` `_` `u32` in `Bar::Foo`
```
2017-07-12 06:58:44 -06:00
Mark Simulacrum
0926f9b72f Rollup merge of #42826 - Yorwba:type-mismatch-same-absolute-paths, r=arielb1
Note different versions of same crate when absolute paths of different types match.

The current check to address #22750 only works when the paths of the mismatched types relative to the current crate are equal, but this does not always work if one of the types is only included through an indirect dependency. If reexports are involved, the indirectly included path can e.g. [contain private modules](https://github.com/rust-lang/rust/issues/22750#issuecomment-302755516).

This PR takes care of these cases by also comparing the *absolute* path, which is equal if the type hasn't moved in the module hierarchy between versions. A more coarse check would be to compare only the crate names instead of full paths, but that might lead to too many false positives.

Additionally, I believe it would be helpful to show where the differing crates came from, i.e. the information in `rustc::middle::cstore::CrateSource`, but I'm not sure yet how to nicely display all of that, so I'm leaving it to a future PR.
2017-07-12 06:58:44 -06:00
Ariel Ben-Yehuda
ecf62e4cdc [LLVM] Avoid losing the !nonnull attribute in SROA
This still does not work on 32-bit archs because of an LLVM limitation,
but this is only an optimization, so let's push it on 64-bit only for now.

Fixes #37945
2017-07-12 14:38:49 +03:00
bors
8bba5ad309 Auto merge of #43107 - michaelwoerister:less-span-info-in-debug, r=nikomatsakis
incr.comp.: Don't include span information in the ICH of type definitions

This should improve some of the `regex` tests on perf.rlo. Not including spans into the ICH is harmless until we also cache warnings. To really solve the problem, we need to do more refactoring (see #43088).

r? @nikomatsakis
2017-07-12 08:45:39 +00:00