Commit graph

11679 commits

Author SHA1 Message Date
Oliver Schneider
c71dcca452 add test for const eval errors in patterns 2015-12-06 12:59:53 +01:00
Oliver Schneider
5e1276a694 add unit tests for #29927 2015-12-06 12:59:53 +01:00
Oliver Schneider
d23800f3f2 allow const function calls in consts that are used in patterns
closes #30117
2015-12-06 12:59:53 +01:00
bors
d75f861518 Auto merge of #30102 - jFransham:feature/better-lifetime-errors, r=Manishearth
Fixes #30086
2015-12-05 12:52:30 +00:00
bors
e70c733250 Auto merge of #30211 - pnkfelix:fix-getopts-for-issue-30204, r=alexcrichton
Fix internal `getopts` so `--a=b=c` acts like `--a b=c` rather than `--a b`.

Fix #30204
2015-12-05 05:30:47 +00:00
Felix S. Klock II
288034bda2 Expand run-make test with regression tests for #30204
Fix #30204.
2015-12-04 22:02:48 +01:00
bors
68c15be8b5 Auto merge of #30084 - oli-obk:const_fn, r=pnkfelix 2015-12-04 17:47:18 +00:00
bors
77ed39cfe3 Auto merge of #29850 - Kimundi:attributes_that_make_a_statement, r=pnkfelix
See https://github.com/rust-lang/rfcs/pull/16 and https://github.com/rust-lang/rust/issues/15701

- Added syntax support for attributes on expressions and all syntax nodes in statement position.
- Extended `#[cfg]` folder to allow removal of statements, and
of expressions in optional positions like expression lists and trailing
block expressions.
- Extended lint checker to recognize lint levels on expressions and
locals.
- As per RFC, attributes are not yet accepted on `if` expressions.

Examples:
  ```rust
let x = y;
{
        ...
}
assert_eq!((1, #[cfg(unset)] 2, 3), (1, 3));

let FOO = 0;
```

Implementation wise, there are a few rough corners and open questions:
- The parser work ended up a bit ugly.
- The pretty printer change was based mostly on guessing.
- Similar to the `if` case, there are some places in the grammar where a new `Expr` node starts,
  but where it seemed weird to accept attributes and hence the parser doesn't. This includes:
  - const expressions in patterns
  - in the middle of an postfix operator chain (that is, after `.`, before indexing, before calls)
  - on range expressions, since `#[attr] x .. y` parses as  `(#[attr] x) .. y`, which is inconsistent with
    `#[attr] .. y` which would parse as `#[attr] (.. y)`
- Attributes are added as additional `Option<Box<Vec<Attribute>>>` fields in expressions and locals.
- Memory impact has not been measured yet.
- A cfg-away trailing expression in a block does not currently promote the previous `StmtExpr` in a block to a new trailing expr. That is to say, this won't work:
```rust
let x = {
    #[cfg(foo)]
    Foo { data: x }
    #[cfg(not(foo))]
    Foo { data: y }
};
```
- One-element tuples can have their inner expression removed to become Unit, but just Parenthesis can't. Eg, `(#[cfg(unset)] x,) == ()` but `(#[cfg(unset)] x) == error`. This seemed reasonable to me since tuples and unit are type constructors, but could probably be argued either way.
- Attributes on macro nodes are currently unconditionally dropped during macro expansion, which seemed fine since macro disappear at that point?
- Attributes on `ast::ExprParens` will be prepend-ed to the inner expression in the hir folder.
- The work on pretty printer tests for this did trigger, but not fix errors regarding macros:
  - expression `foo![]` prints as `foo!()`
  - expression `foo!{}` prints as `foo!()`
  - statement `foo![];` prints as `foo!();`
  - statement `foo!{};` prints as `foo!();`
  - statement `foo!{}` triggers a `None` unwrap ICE.
2015-12-04 08:46:29 +00:00
Marvin Löbel
d06f48054c Ignore rpass-fulldeps test in cross compile tests 2015-12-04 03:47:53 +01:00
bors
c7d58321e1 Auto merge of #30149 - mitaa:fqn, r=alexcrichton
Fixes #30109
2015-12-03 23:09:30 +00:00
mitaa
af1ad419e1 Use the extern item-path for documentation links
The local item-path includes the local crates path to the extern crate
declaration which breaks cross-crate rustdoc links if the extern crate
is not linked into the crate root or renamed via `extern foo as bar`.
2015-12-03 23:11:19 +01:00
bors
abfadfeee6 Auto merge of #30165 - dotdash:no_null_elim, r=alexcrichton
This pass causes mis-optimizations in some cases and is probably no
longer really important for us, so let's disable it for now.

Fixes #30081
2015-12-02 23:18:11 +00:00
bors
d5321f2abe Auto merge of #30133 - jseyfried:fix_regression, r=alexcrichton
r? @nikomatsakis
2015-12-02 17:54:30 +00:00
Björn Steinbrink
d7ccea6c1c Disable the null check elimination pass
This pass causes mis-optimizations in some cases and is probably no
longer really important for us, so let's disable it for now.

Fixes #30081
2015-12-02 18:19:10 +01:00
bors
eb1d018c01 Auto merge of #25570 - oli-obk:const_indexing, r=nikomatsakis
This PR allows the constant evaluation of index operations on constant arrays and repeat expressions. This allows index expressions to appear in the expression path of the length expression of a repeat expression or an array type.

An example is

```rust
const ARR: [usize; 5] = [1, 2, 3, 4, 5];
const ARR2: [usize; ARR[1]] = [42, 99];
```

In most other locations llvm's const evaluator figures it out already. This is not specific to index expressions and could be remedied in the future.
2015-12-01 19:47:38 +00:00
Jack Fransham
829e8bf2a5 Update lifetime compile tests 2015-12-01 14:08:00 +00:00
Jeffrey Seyfried
15b1f56499 Add test for #30089 2015-12-01 09:34:45 +00:00
Marvin Löbel
8f3bc2c24e Added test for attributes on parens hir folder 2015-11-30 20:57:43 +01:00
Marvin Löbel
232d145a78 Added a test for #[cfg] on non-optional positions 2015-11-30 18:16:27 +01:00
Vadim Petrochenkov
23c7e66589 Fix regression in patterns with empty variants 2015-11-30 19:56:19 +03:00
bors
5ea65c03d9 Auto merge of #30074 - jonas-schievink:macro-doc, r=sanxiyn
Fixes #17616

New docs for `panic!`:
```rust
macro_rules! panic {
    () => { ... };
    ($msg:expr) => { ... };
    ($fmt:expr, $($arg:tt)+) => { ... };
}
```

New docs for `assert!`:
```rust
macro_rules! assert {
    ( $ cond : expr ) => { ... };
    (
$ cond : expr , $ ( $ arg : tt ) + ) => { ... };
}
```
<sup>not pretty, but at least it's not worse 😂
2015-11-28 16:22:27 +00:00
Jonas Schievink
ff339bd6f9 Add a test 2015-11-28 14:47:12 +01:00
bors
e9ac44026d Auto merge of #29383 - petrochenkov:empstr, r=pnkfelix
Fixes https://github.com/rust-lang/rust/issues/28692
Fixes https://github.com/rust-lang/rust/issues/28992
Fixes some other similar issues (see the tests)

[breaking-change], needs crater run (cc @brson or @alexcrichton )

The pattern with parens `UnitVariant(..)` for unit variants seems to be popular in rustc (see the second commit), but mostly used by one person (@nikomatsakis), according to git blame. If it causes breakage on crates.io I'll add an exceptional case for it.
2015-11-28 00:45:34 +00:00
bors
bac2b13a5a Auto merge of #30085 - oli-obk:fix/pnkfelix_test, r=pnkfelix
for discussion see https://github.com/rust-lang/rust/pull/26848/files#r43151926

r? @pnkfelix
2015-11-27 20:39:28 +00:00
bors
5dc91a74b1 Auto merge of #30064 - fhartwig:macro-suggestions, r=sanxiyn
Fixes #13677
This does the same sort of suggestion for misspelt macros that we already do for misspelt identifiers.
Example. Compiling this program:

```rust
macro_rules! foo {
    ($e:expr) => ( $e )
}

fn main() {
    fob!("hello!");
}
```

gives the following error message:

```
/Users/mcp/temp/test.rs:7:5: 7:8 error: macro undefined: 'fob!'
/Users/mcp/temp/test.rs:7     fob!("hello!");
                              ^~~
/Users/mcp/temp/test.rs:7:5: 7:8 help: did you mean `foo`?
/Users/mcp/temp/test.rs:7     fob!("hello!");
```

I had to move the levenshtein distance function into libsyntax for this. Maybe this should live somewhere else (some utility crate?), but I couldn't find a crate to put it in that is imported by libsyntax and the other rustc crates.
2015-11-27 18:41:53 +00:00
Oliver Schneider
5951418c66 revert test to check runtime evaluation instead of constant evaluation
see https://github.com/rust-lang/rust/pull/26848/files#r43151926
2015-11-27 16:46:11 +01:00
Oliver Schneider
8e64e22ef7 implement calling of const fn-methods in true constants 2015-11-27 16:43:24 +01:00
Sébastien Marie
efc17a598c pass at least one argument to execve
under OpenBSD and Bitrig, it is an error to pass an empty argv
argument to execve(2). It results the test fail as execve(2) don't exec
and set errno to EINVAL.

instead, make argv with two arguments (in order to differenciate the
initial call, from the execve call).
2015-11-27 13:48:07 +01:00
Marvin Löbel
49e997406a Extended simple macro test 2015-11-26 21:47:44 +01:00
Marvin Löbel
296c3613ca Added stmt_expr_attribute feature gate 2015-11-26 21:47:44 +01:00
Marvin Löbel
c56b47ab8c Some TLC for the MoveMap trait 2015-11-26 21:46:12 +01:00
Marvin Löbel
2a8f358de7 Add syntax support for attributes on expressions and all syntax
nodes in statement position.

Extended #[cfg] folder to allow removal of statements, and
of expressions in optional positions like expression lists and trailing
block expressions.

Extended lint checker to recognize lint levels on expressions and
locals.
2015-11-26 21:46:12 +01:00
Ariel Ben-Yehuda
4190dce3a7 fix tidy 2015-11-26 18:22:40 +02:00
Ariel Ben-Yehuda
52dd2b4c35 fix tests & rustdoc 2015-11-26 18:22:40 +02:00
Ariel Ben-Yehuda
1430a35000 move librustc/plugin to librustc_plugin
this is a [breaking-change] to all plugin authors - sorry
2015-11-26 18:22:39 +02:00
Ariel Ben-Yehuda
26b19206d3 make check works 2015-11-26 18:21:17 +02:00
Ariel Ben-Yehuda
11dbb69bd1 remove csearch from the rest of rustc 2015-11-26 18:21:17 +02:00
Florian Hartwig
9ba657cad5 Add '!' to macro name suggestion, use fileline_help instead of span_help 2015-11-26 11:59:41 +01:00
bors
6d88afe477 Auto merge of #30015 - petrochenkov:staged, r=brson
Closes https://github.com/rust-lang/rust/issues/30008

`#[stable]`, `#[unstable]` and `#[rustc_deprecated]` are now guarded by `#[feature(staged_api)]`

r? @brson
2015-11-26 10:22:37 +00:00
Florian Hartwig
ac0220cf4c Add test for macro suggestions 2015-11-26 00:36:30 +01:00
bors
498f08d369 Auto merge of #30060 - jonas-schievink:asparagus, r=nikomatsakis
Fixes #27092
Fixes #30005
2015-11-25 22:31:10 +00:00
Jonas Schievink
47cb5d8dbd Add a test 2015-11-25 21:01:23 +01:00
Vadim Petrochenkov
be8ace8cac Remove all uses of #[staged_api] 2015-11-25 21:55:26 +03:00
Vadim Petrochenkov
5127d24a3e Remove #[staged_api] 2015-11-25 21:55:26 +03:00
bors
1bb91be05f Auto merge of #30044 - nikomatsakis:issue-29466, r=arielb1
The graph extent mechanism is not good. I have some ideas for a better replacement, but this PR simply removes it. It also stops recursing on statement scopes and processes them using an "on the heap" stack, which fixes #29466.

r? @dotdash
2015-11-25 18:49:56 +00:00
bors
7fa2c6ca31 Auto merge of #30011 - jonas-schievink:macro-context, r=nrc
Fixes #22425

Also fixes #30007, since it's just a change from `true` to `false`.
2015-11-25 03:02:05 +00:00
Niko Matsakis
1fe7525180 Rewrite stmt processing not to recurse to avoid stack overflow if there
are tons of let statements. Fixes #29466.
2015-11-24 19:31:48 -05:00
bors
483fb8fb60 Auto merge of #30009 - apasel422:tests, r=alexcrichton
Closes #25810.
Closes #29276.

r? @alexcrichton
2015-11-24 21:36:54 +00:00
Jonas Schievink
5cb5d20bf9 Fix test failures 2015-11-24 17:46:10 +01:00
bors
ebb560a069 Auto merge of #29934 - arielb1:constrained-projection-2, r=nikomatsakis
Fixes #29861 - it was a bug I accidentally introduced in #26275.

r? @nikomatsakis
2015-11-24 14:30:46 +00:00