Commit graph

11336 commits

Author SHA1 Message Date
Björn Steinbrink
677367599e Revamp codegen tests to check IR quality instead of quantity
The current codegen tests only compare IR line counts between similar
rust and C programs, the latter getting compiled with clang. That looked
like a good idea back then, but actually things like lifetime intrinsics
mean that less IR isn't always better, so the metric isn't really
helpful.

Instead, we can start doing tests that check specific aspects of the
generated IR, like attributes or metadata. To do that, we can use LLVM's
FileCheck tool which has a number of useful features for such tests.

To start off, I created some tests for a few things that were recently
added and/or broken.
2015-05-27 12:08:31 +02:00
bors
eb16ad6e71 Auto merge of #25790 - eddyb:oh-snap-ctfe-arrived, r=alexcrichton 2015-05-27 08:47:53 +00:00
Eduard Burtescu
377b0900ae Use const fn to abstract away the contents of UnsafeCell & friends. 2015-05-27 11:19:03 +03:00
bors
a2cf2c66e0 Auto merge of #25791 - barosl:use-paths-as-items, r=alexcrichton
Currently, for `use` declarations with multiple paths, only the `use` item itself is saved in the AST map, not the individual path nodes. This can lead to a problem when a span of a specific path node is needed.

For example, #24818 caused an ICE because of this, in `ImportResolver::check_for_conflicting_import()`.

Fixes #25763.
2015-05-27 07:14:45 +00:00
bors
e4c64a1499 Auto merge of #25713 - Stebalien:pattern, r=alexcrichton
Needed to support:

```rust
match X {
  pattern if Y ...
}

for pattern in Y {}
```

IMO, this shouldn't require an RFC because it can't interfere with any future language changes (because `pattern if` and `pattern in` are already legal in rust) and can't cause any ambiguity.
2015-05-27 00:42:55 +00:00
bors
fe85342ef6 Auto merge of #25688 - nham:E0055_E0192, r=alexcrichton
- Adds explanations for E0055, E0089, E0192, E0261-E0263, E0318
 - Improves explanations for E0250, E0368, E0372.
 - Converts 15 diagnostics to have error codes (E0380-E0394). Adds an explanation for E0380.
 - The E0087-E0090 messages currently look like "expected {} parameter(s) found {} parameter(s)". This changes them to either use "parameter" or "parameters", based on the number.

This is, in part, more progress towards #24407
2015-05-26 23:10:06 +00:00
Nick Cameron
ff68204880 Add a WONTFIX message to a failing test.
Closes #20184
2015-05-27 10:16:49 +12:00
bors
cccc137b88 Auto merge of #25675 - bluss:rustdoc-assoc-types-index, r=alexcrichton
rustdoc: Associated type fixes

The first commit fixes a bug with "dud" items in the search index from
misrepresented `type` items in trait impl blocks.

For a trait *implementation* there are typedefs which are the types for
that particular trait and implementor. Skip these in the search index.

There were lots of dud items in the search index due to this (search for
Item, Iterator's associated type).

Add a boolean to clean::TypedefItem so that it tracks whether the it is
a type alias on its own, or if it's a `type` item in a trait impl.

The second commit fixes a bug that made signatures and where bounds
using associated types (if they were not on `Self`) incorrect.

The third commit fixes so that where clauses in type alias definititons
are shown.

Fixes #22442
Fixes #24417
Fixes #25769
2015-05-26 21:36:57 +00:00
Nick Hamann
fbef978fd7 Pluralize E0087-E0090 messages based on number of parameters. 2015-05-26 15:12:52 -05:00
Nick Hamann
d8d4a6a842 Fix typo. 2015-05-26 15:12:52 -05:00
bors
1742a01f8d Auto merge of #24657 - aochagavia:rustdoc, r=alexcrichton
Fixes #24575 
Fixes #25673 

r? @alexcrichton
2015-05-26 20:04:09 +00:00
bors
6a003abc37 Auto merge of #25593 - nham:E0210_E0326, r=alexcrichton
Changes:

 - adds explanations for E0185, E0186, E0202, E0326
 - fixes the explanation for E0053. The previous description was too narrow; there are other error cases.
 - changes the error message for E0202 to be specific for associated types, since it seems inherent associated constants are implemented.

Part of #24407
2015-05-26 18:30:42 +00:00
Ariel Ben-Yehuda
65a3245319 Add tests for fixed issues
Fixes #23037.
Fixes #25339.
2015-05-26 20:01:20 +03:00
bors
0ea80faae8 Auto merge of #25091 - quantheory:trait_associated_const_fixes, r=nikomatsakis
Closes #25046 (by rejecting the code that causes the ICE) and #24946. I haven't been able to deal with the array size or recursion issues yet for associated consts, though my hope was that the change I made for range match patterns might help with array sizes, too.

This PR is pretty much orthogonal to #25065.
2015-05-26 16:58:07 +00:00
Eduard Burtescu
d957e04d01 Do not trip an assert when coercing &Trait to &Trait in constants.
Fixes #24644.
2015-05-26 17:57:50 +03:00
Ariel Ben-Yehuda
ae10e478eb Implement defaults for associated types 2015-05-26 17:22:29 +03:00
Alex Crichton
fa0834d630 rustc_back: Don't pass 'u' to ar invocations
This flag indicates that when files are being replaced or added to archives (the
`r` flag) that the new file should not be inserted if it is not newer than the
file that already exists in the archive. The compiler never actually has a use
case of *not* wanting to insert a file because it already exists, and this
causes rlibs to not be updated in some cases when the compiler was re-run too
quickly.

Closes #18913
2015-05-26 07:06:31 -07:00
bors
8a872943ff Auto merge of #25778 - econoplas:master, r=pnkfelix
A regression was introduced by commit 7b1916d253 #25612.  Negative signed integer literals less than -9223372036854775808i64 were no longer properly reported as #[warn(overflowing_literals)].

Also adding missing test cases to test/compile-fail/lint-type-overflow.rs which could have detected the regression.

Further explanation:

The expression `(negative && v > max as u64 + 1)` relies on the fact that algebraically speaking `-min == max + 1` to avoid negation and removing the need for `min` completely.

If i128 or i256 are ever added, it should also work for these types without requiring a change to `min != i64::MIN &&` also simplifying maintenance.

r? @pnkfelix
2015-05-26 09:49:36 +00:00
Barosl Lee
0ae30e608c Associate each path in a use declaration with the item in the AST map
Currently, for `use` declarations with multiple paths, only the `use`
item itself is saved in the AST map, not the individual path nodes. This
can lead to a problem when a span of a specific path node is needed.

For example, #24818 caused an ICE because of this, in
`ImportResolver::check_for_conflicting_import()`.

Fixes #25763.
2015-05-26 17:42:56 +09:00
Ulrik Sverdrup
06304ed522 rustdoc: Show where clauses in type aliases
Yes, it's allowed. Example:

    type MapFn<I, B> where I: Iterator = Map<I, fn(I::Item) -> B>;

Fixes #25769
2015-05-25 23:10:36 +02:00
Ulrik Sverdrup
d1cd689b48 rustdoc: Fix associated types in signatures
Functions such as `fn foo<I: Iterator>(x: I::Item)` would not
render correctly and displayed `I` instead of `I::Item`. Same thing
with `I::Item` appearing in where bounds.

This fixes the bug by using paths for generics.

Fixes #24417
2015-05-25 19:06:58 +02:00
bors
45001c0ef8 Auto merge of #25773 - dotdash:deref_dst, r=eddyb
Fat pointers aren't immediate, so in a datum, they're not actually
ByValue but ByRef.

Fixes #24589
2015-05-25 15:54:39 +00:00
Björn Steinbrink
efd3e75503 Fix auto_ref for fat pointers
Fat pointers aren't immediate, so in a datum, they're not actually
ByValue but ByRef.

Fixes #24589
2015-05-25 17:25:41 +02:00
econoplas
43502adf07 - Fix regression of literal out of range check for negative i64 values which was introduced by commit 7b1916d253.
- Add missing test cases to test/compile-fail/lint-type-overflow.rs which would have detected the regression.
2015-05-25 07:42:16 -06:00
Adolfo Ochagavía
87038831f1 Rustdoc: ignore deref-inherited static methods
Fixes #24575
2015-05-25 15:35:10 +02:00
Björn Steinbrink
8527c7f43b Fix transmutes with boolean source values
Fixes #25746
2015-05-25 13:08:31 +02:00
bors
ba0e1cd814 Auto merge of #25609 - nikomatsakis:const-fn, r=pnkfelix
This is a port of @eddyb's `const-fn` branch. I rebased it, tweaked a few things, and added tests as well as a feature gate. The set of tests is still pretty rudimentary, I'd appreciate suggestions on new tests to write. Also, a double-check that the feature-gate covers all necessary cases.

One question: currently, the feature-gate allows the *use* of const functions from stable code, just not the definition. This seems to fit our usual strategy, and implies that we might (perhaps) allow some constant functions in libstd someday, even before stabilizing const-fn, if we were willing to commit to the existence of const fns but found some details of their impl unsatisfactory.

r? @pnkfelix
2015-05-24 11:12:34 +00:00
bors
cc56c20ba4 Auto merge of #25168 - Manishearth:register_attr, r=eddyb
This lets plugin authors opt attributes out of the `custom_attribute`
and `unused_attribute` checks.


cc @thepowersgang
2015-05-24 09:38:26 +00:00
Oliver Schneider
04fe212e1f Rollup merge of #25710 - Manishearth:no_decorator_clone, r=sfackler
fixes #25683

I have a very nonscientific measurement of the data via valgrind/massif [here](https://gist.github.com/Manishearth/4c47f15f6835cb3957c4)

I measured the memory usage for both --pretty=expanded and -Z no-trans

It *seems* like there's a 20-25MB decrease during expansion on stage2 librustc; but I'm not quite sure.

r? @eddyb

(have not yet run tests, but it compiles fine, might want to wait before giving r+)

cc @nrc @huon
2015-05-23 19:03:19 +02:00
bors
88e6976acf Auto merge of #25653 - dotdash:unsize_c, r=luqmana
Fixes #25581
2015-05-23 14:22:35 +00:00
bors
8bc80ba9fc Auto merge of #24847 - sfackler:debug-builders-stability, r=aturon
The `debug_builders` feature is up for 1.1 stabilization in #24028. This commit stabilizes the API as-is with no changes.

Some nits that @alexcrichton mentioned that may be worth discussing now if anyone cares:

* Should `debug_tuple_struct` and `DebugTupleStruct` be used instead of `debug_tuple` and `DebugTuple`? It's more typing but is a technically more correct name.
* `DebugStruct` and `DebugTuple` have `field` methods while `DebugSet`, `DebugMap` and `DebugList` have `entry` methods. Should we switch those to something else for consistency?

cc @alexcrichton @aturon
2015-05-23 09:36:56 +00:00
Steven Allen
f21655ec02 Allow patterns to be followed by if and in.
Needed to support:

match X {
  pattern if Y ...
}

for pattern in Y {}
2015-05-22 12:47:52 -04:00
Manish Goregaokar
6bc5a92484 Let MultiItemDecorator take &Annotatable (fixes #25683) 2015-05-22 21:10:27 +05:30
Sean Patrick Santos
8db699d18d Add diagnostic code for generic associated const error. 2015-05-21 21:12:49 -06:00
Niko Matsakis
df93deab10 Make various fixes:
- add feature gate
- add basic tests
- adjust parser to eliminate conflict between `const fn` and associated
constants
- allow `const fn` in traits/trait-impls, but forbid later in type check
- correct some merge conflicts
2015-05-21 11:47:30 -04:00
Ulrik Sverdrup
093e18d184 rustdoc: Skip types in impls in search index
For a trait *implementation* there are typedefs which are the types for
that particular trait and implementor. Skip these in the search index.

There were lots of dud items in the search index due to this (search for
Item, Iterator's associated type).

Add a boolean to clean::TypedefItem so that it tracks whether the it is
a type alias on its own, or if it's a `type` item in a trait impl.

Fixes #22442
2015-05-21 14:17:37 +02:00
Björn Steinbrink
a3c4ce4444 Fix ICE trying to pass DST to C functions
Fixes #25581
2015-05-21 10:46:30 +02:00
Ariel Ben-Yehuda
7b1e8446d1 Substitute free lifetimes when Self is used within a method body
This is needed because `Self` can be substituted to a type with
lifetime parameters.

Fixes #24308
Fixes #25071
Fixes #25259
Fixes #25279
2015-05-20 21:23:41 +03:00
bors
cec980a1a7 Auto merge of #25645 - luqmana:lnr, r=eddyb
This micro-optimization actually led to generating broken IR in certain cases.

Fixes #18845.
Fixes #25497.
2015-05-20 13:58:10 +00:00
bors
bacd8bc4b7 Auto merge of #25615 - petrochenkov:issue25542, r=alexcrichton
Closes https://github.com/rust-lang/rust/issues/25542

r? @alexcrichton
2015-05-20 12:22:34 +00:00
Luqman Aden
54dbd0baad librustc_trans: Remove misoptimization in treating derefs of Box as rvalues. 2015-05-20 05:07:27 -04:00
bors
6d718f236d Auto merge of #25595 - dotdash:issue25549, r=eddyb
When taking the address of an unsized field we generate a rvalue datum
for the field and then convert it to an lvalue datum. At that point,
cleanup is scheduled for the field, leading to multiple drop calls.

The problem is that we generate an rvalue datum for the field, since the
pointer does not own the data and there's already cleanup scheduled
elsewhere by the true owner. Instead, an lvalue datum must be created.

Thanks to @eddyb for identifying the underlying cause and suggesting the
correct fix.

Fixes #25549.
2015-05-20 07:38:45 +00:00
Nick Hamann
cc9d1de692 Add error explanation for E0202. 2015-05-20 00:38:10 -05:00
Steven Fackler
e161d5cf73 Stabilize debug builders for 1.2.0 2015-05-19 21:57:39 -07:00
bors
c322dbbf8a Auto merge of #24333 - arielb1:implement-rfc401, r=nrc 2015-05-19 20:56:51 +00:00
petrochenkov
9e1f531d53 Fix test run-pass-fulldeps\issue-15149.rs on Windows 2015-05-19 20:37:17 +03:00
Ariel Ben-Yehuda
27d2bd13c3 Make float -> int casts actually work 2015-05-19 17:42:15 +03:00
Ariel Ben-Yehuda
32fe2e3ad4 Address review commets
I think I didn't run tests properly - my second call to
select_all_obligations_or_error has made 3 tests fail. However, this is
just an error message change - integer fallback never worked with casts.
2015-05-19 17:42:14 +03:00
Ariel Ben-Yehuda
d9b9f4ee7d fix conflicts 2015-05-19 17:42:14 +03:00
Ariel Ben-Yehuda
9ee2335bfc Fix test fallout, and add some rather comprehensive tests. 2015-05-19 17:42:14 +03:00