about summary refs log tree commit diff
path: root/src
AgeCommit message (Collapse)AuthorLines
2016-12-12Fix accidental removal of importJeremy Soller-0/+1
2016-12-12Rollback prefixJeremy Soller-9/+4
2016-11-30Cleanup envJeremy Soller-4/+5
2016-11-28Commit to fix make tidyJeremy Soller-44/+157
2016-11-28Remove file path from std::fs::FileJeremy Soller-14/+2
2016-11-28Move stdout/err flush into sysJeremy Soller-9/+25
2016-11-28Switch to using Prefix::VerbatimJeremy Soller-6/+4
2016-11-28Switch to using syscall crate directly - without importJeremy Soller-188/+171
2016-11-25Fix canonicalizeJeremy Soller-3/+2
2016-11-25Use O_DIRECTORYJeremy Soller-9/+12
2016-11-23Allow setting nonblock on socketsJeremy Soller-11/+16
2016-11-23Add File set_permissionsJeremy Soller-0/+4
2016-11-23Merge branch 'master' into redoxJeremy Soller-3094/+5040
2016-11-23Auto merge of #37886 - Stebalien:set-perm, r=alexcrichtonbors-0/+85
Add a method for setting permissions directly on an open file. On unix like systems, the underlying file corresponding to any given path may change at any time. This function makes it possible to set the permissions of the a file corresponding to a `File` object even if its path changes. @retep998, what's the best way to do this on Windows? I looked into `SetFileInformationByHandle` but couldn't find a way to do it atomically risking clobbering access time information. This is a first step towards fixing #37885. This function doesn't *have* to be public but this is useful functionality that should probably be exposed.
2016-11-22Auto merge of #37681 - nrc:crate-metadata, r=@alexcrichtonbors-81/+374
add --crate-type metadata r? @alexcrichton
2016-11-22Auto merge of #37487 - goffrie:break, r=nikomatsakisbors-216/+641
Implement the `loop_break_value` feature. This implements RFC 1624, tracking issue #37339. - `FnCtxt` (in typeck) gets a stack of `LoopCtxt`s, which store the currently deduced type of that loop, the desired type, and a list of break expressions currently seen. `loop` loops get a fresh type variable as their initial type (this logic is stolen from that for arrays). `while` loops get `()`. - `break {expr}` looks up the broken loop, and unifies the type of `expr` with the type of the loop. - `break` with no expr unifies the loop's type with `()`. - When building MIR, loops no longer construct a `()` value at termination of the loop; rather, the `break` expression assigns the result of the loop. - ~~I have also changed the loop scoping in MIR-building so that the test of a while loop is not considered to be part of that loop. This makes the rules consistent with #37360. The new loop scopes in typeck also follow this rule. That means that `loop { while (break) {} }` now terminates instead of looping forever. This is technically a breaking change.~~ - ~~On that note, expressions like `while break {}` and `if break {}` no longer parse because `{}` is interpreted as an expression argument to `break`. But no code except compiler test cases should do that anyway because it makes no sense.~~ - The RFC did not make it clear, but I chose to make `break ()` inside of a `while` loop illegal, just in case we wanted to do anything with that design space in the future. This is my first time dealing with this part of rustc so I'm sure there's plenty of problems to pick on here ^_^
2016-11-23Rebasing and review changesNick Cameron-44/+126
2016-11-22Add a method for setting permissions directly on an open file.Steven Allen-0/+85
On unix like systems, the underlying file corresponding to any given path may change at any time. This function makes it possible to set the permissions of the a file corresponding to a `File` object even if its path changes.
2016-11-22Auto merge of #37843 - nikomatsakis:issue-33685-hard-error, r=eddybbors-1/+1
make HR_LIFETIME_IN_ASSOC_TYPE deny-by-default It's time to fix issue #32330. cc #33685 cc @arielb1
2016-11-22Auto merge of #37834 - bluss:peek-none, r=BurntSushibors-23/+109
Make Peekable remember peeking a None Peekable should remember if a None has been seen in the `.peek()` method. It ensures that `.peek(); .peek();` or `.peek(); .next();` only advances the underlying iterator at most once. This does not by itself make the iterator fused. Thanks to @s3bk for the code in `fn peek()` itself. Fixes #37784
2016-11-21Implement the `loop_break_value` feature.Geoffry Song-216/+641
This implements RFC 1624, tracking issue #37339. - `FnCtxt` (in typeck) gets a stack of `LoopCtxt`s, which store the currently deduced type of that loop, the desired type, and a list of break expressions currently seen. `loop` loops get a fresh type variable as their initial type (this logic is stolen from that for arrays). `while` loops get `()`. - `break {expr}` looks up the broken loop, and unifies the type of `expr` with the type of the loop. - `break` with no expr unifies the loop's type with `()`. - When building MIR, `loop` loops no longer construct a `()` value at termination of the loop; rather, the `break` expression assigns the result of the loop. `while` loops are unchanged. - `break` respects contexts in which expressions may not end with braced blocks. That is, `while break { break-value } { while-body }` is illegal; this preserves backwards compatibility. - The RFC did not make it clear, but I chose to make `break ()` inside of a `while` loop illegal, just in case we wanted to do anything with that design space in the future. This is my first time dealing with this part of rustc so I'm sure there's plenty of problems to pick on here ^_^
2016-11-21Auto merge of #37602 - jseyfried:directory_ownership, r=nikomatsakisbors-88/+199
parser: simplify directory ownership semantics This PR simplifies the semantics of "directory ownership". After this PR, - a non-inline module without a `#[path]` attribute (e.g. `mod foo;`) is allowed iff its parent module/block (whichever is nearer) is a directory owner, - an non-inline module is a directory owner iff its corresponding file is named `mod.rs` (c.f. [comment](https://github.com/rust-lang/rust/issues/32401#issuecomment-201021902)), - a block is never a directory owner (c.f. #31534), and - an inline module is a directory owner iff either - its parent module/block is a directory owner (again, c.f. #31534), or - it has a `#[path]` attribute (c.f. #36789). These semantics differ from today's in three orthogonal ways: - `#[path = "foo.rs"] mod foo;` is no longer a directory owner. This is a [breaking-change]. - #36789 is generalized to apply to modules that are not directory owners in addition to blocks. - A macro-expanded non-inline module is only allowed where an ordinary non-inline module would be allowed. Today, we incorrectly allow macro-expanded non-inline modules in modules that are not directory owners (but not in blocks). This is a [breaking-change]. Fixes #32401. r? @nikomatsakis
2016-11-22Start warning cycle.Jeffrey Seyfried-13/+92
2016-11-22Fix fallout in tests.Jeffrey Seyfried-0/+1
2016-11-22Add a regression test and organize tests.Jeffrey Seyfried-3/+19
2016-11-22Clean up directory ownership semantics.Jeffrey Seyfried-79/+94
2016-11-21Auto merge of #37642 - nnethercote:no-HirVec-of-P, r=michaelwoeristerbors-183/+183
Change HirVec<P<T>> to HirVec<T> in hir:: Expr. This PR changes data structures like this: ``` [ ExprArray | 8 | P ] | v [ P | P | P | P | P | P | P | P ] | v [ ExprTup | 2 | P ] | v [ P | P ] | v [ Expr ] ``` to this: ``` [ ExprArray | 8 | P ] | v [ [ ExprTup | 2 | P ] | ... ] | v [ Expr | Expr ] ``` I thought this would be a win for #36799, and on a cut-down version of that workload this reduces the peak heap size (as measured by Massif) from 885 MiB to 875 MiB. However, the peak RSS as measured by `-Ztime-passes` and by `/usr/bin/time` increases by about 30 MiB. I'm not sure why. Just look at the picture above -- the second data structure clearly takes up less space than the first. My best idea relates to unused elements in the slices. `HirVec<Expr>` is a typedef for `P<[Expr]>`. If there were any unused excess elements then I could see that memory usage would increase, because those excess elements are larger in `HirVec<Expr>` than in `HirVec<P<Expr>>`. But AIUI there are no such excess elements, and Massif's measurements corroborate that. However, the two main creation points for these data structures are these lines from `lower_expr`: ```rust ExprKind::Vec(ref exprs) => { hir::ExprArray(exprs.iter().map(|x| self.lower_expr(x)).collect()) } ExprKind::Tup(ref elts) => { hir::ExprTup(elts.iter().map(|x| self.lower_expr(x)).collect()) } ``` I suspect what is happening is that temporary excess elements are created within the `collect` calls. The workload from #36799 has many 2-tuples and 3-tuples and when `Vec` gets doubled it goes from a capacity of 1 to 4, which would lead to excess elements. Though, having said that, `Vec::with_capacity` doesn't create excess AFAICT. So I'm not sure. What goes on inside `collect` is complex. Anyway, in its current form this PR is a memory consumption regression and so not worth landing but I figured I'd post it in case anyone has additional insight.
2016-11-22Change HirVec<P<T>> to HirVec<T> in Expr.Nicholas Nethercote-183/+183
This changes structures like this: ``` [ ExprArray | 8 | P ] | v [ P | P | P | P | P | P | P | P ] | v [ ExprTup | 2 | P ] | v [ P | P ] | v [ Expr ] ``` to this: ``` [ ExprArray | 8 | P ] | v [ [ ExprTup | 2 | P ] | ... ] | v [ Expr | Expr ] ```
2016-11-21Auto merge of #37677 - jsen-:master, r=alexcrichtonbors-8/+26
libstd: support creation of anonymous pipe on WinXP/2K3 `PIPE_REJECT_REMOTE_CLIENTS` flag is not supported on Windows < VISTA, and every invocation of `anon_pipe` including attempts to pipe `std::process::Child`'s stdio fails. This PR should work around this issue by performing a runtime check of windows version and conditionally omitting this flag on "XP and friends". Getting the version should be probably moved out of the function `anon_pipe` itself (the OS version does not often change during runtime :) ), but: - I didn't find any precedent for this and assuming there's not much overhead (I hope windows does not perform any heuristics to find out it's own version, just fills couple of fields in the struct). - the code path is not especially performance sensitive anyway.
2016-11-21Auto merge of #37912 - sanxiyn:llvm-compat, r=eddybbors-27/+15
Restore compatibility with LLVM 3.7 and 3.8 This should fix Travis build.
2016-11-21Auto merge of #37824 - jseyfried:symbols, r=eddybbors-1829/+1519
Clean up `ast::Attribute`, `ast::CrateConfig`, and string interning This PR - removes `ast::Attribute_` (changing `Attribute` from `Spanned<Attribute_>` to a struct), - moves a `MetaItem`'s name from the `MetaItemKind` variants to a field of `MetaItem`, - avoids needlessly wrapping `ast::MetaItem` with `P`, - moves string interning into `syntax::symbol` (`ast::Name` is a reexport of `symbol::Symbol` for now), - replaces `InternedString` with `Symbol` in the AST, HIR, and various other places, and - refactors `ast::CrateConfig` from a `Vec` to a `HashSet`. r? @eddyb
2016-11-21Fix fallout in `rustdoc` and tests.Jeffrey Seyfried-130/+120
2016-11-21Restore compatibility with LLVM 3.7 and 3.8Seo Sanghyeon-27/+15
2016-11-21Auto merge of #37127 - jseyfried:stabilize_RFC_1560, r=nrcbors-599/+50
Stabilize RFC 1560 Fixes #13598, fixes #23157, fixes #32303. cc #35120 r? @nrc
2016-11-21Fix fallout in tests.Jeffrey Seyfried-528/+23
2016-11-21Cleanup.Jeffrey Seyfried-60/+22
2016-11-21Stabilize RFC 1560.Jeffrey Seyfried-12/+6
2016-11-21Fix incremental compilation hashing.Jeffrey Seyfried-16/+20
2016-11-21Remove `Rc` from the interner.Jeffrey Seyfried-51/+36
2016-11-21Cleanup `InternedString`.Jeffrey Seyfried-128/+63
2016-11-21Use `Symbol` instead of `InternedString` in the AST, HIR, and various other ↵Jeffrey Seyfried-453/+399
places.
2016-11-21Auto merge of #37895 - jseyfried:fix_proc_macro_deps, r=nrcbors-0/+45
Fix bug involving proc-macro dependencies Fixes #37893. r? @nrc
2016-11-20Move `syntax::util::interner` -> `syntax::symbol`, cleanup.Jeffrey Seyfried-806/+752
2016-11-20Auto merge of #37888 - bluss:chars-count, r=alexcrichtonbors-0/+17
Improve .chars().count() Use a simpler loop to count the `char` of a string: count the number of non-continuation bytes. Use `count += <conditional>` which the compiler understands well and can apply loop optimizations to. benchmark descriptions and results for two configurations: - ascii: ascii text - cy: cyrillic text - jp: japanese text - words ascii: counting each split_whitespace item from the ascii text - words jp: counting each split_whitespace item from the jp text ``` x86-64 rustc -Copt-level=3 name orig_ ns/iter cmov_ ns/iter diff ns/iter diff % count_ascii 1,453 (1755 MB/s) 1,398 (1824 MB/s) -55 -3.79% count_cy 5,990 (856 MB/s) 2,545 (2016 MB/s) -3,445 -57.51% count_jp 3,075 (1169 MB/s) 1,772 (2029 MB/s) -1,303 -42.37% count_words_ascii 4,157 (521 MB/s) 1,797 (1205 MB/s) -2,360 -56.77% count_words_jp 3,337 (1071 MB/s) 1,772 (2018 MB/s) -1,565 -46.90% x86-64 rustc -Ctarget-feature=+avx -Copt-level=3 name orig_ ns/iter cmov_ ns/iter diff ns/iter diff % count_ascii 1,444 (1766 MB/s) 763 (3343 MB/s) -681 -47.16% count_cy 5,871 (874 MB/s) 1,527 (3360 MB/s) -4,344 -73.99% count_jp 2,874 (1251 MB/s) 1,073 (3351 MB/s) -1,801 -62.67% count_words_ascii 4,131 (524 MB/s) 1,871 (1157 MB/s) -2,260 -54.71% count_words_jp 3,253 (1099 MB/s) 1,331 (2686 MB/s) -1,922 -59.08% ``` I briefly explored a more involved blocked algorithm (looking at 8 or more bytes at a time), but the code in this PR was always winning `count_words_ascii` in particular (counting many small strings); this solution is an improvement without tradeoffs.
2016-11-20support creation of anonymous pipe on WinXP/2K3jsen--8/+26
2016-11-20Auto merge of #37862 - shepmaster:llvm-4.0-always-set-eh-personality, r=eddybbors-0/+3
[LLVM 4.0] Set EH personality when resuming stack unwinding To resume stack unwinding, the LLVM `resume` instruction must be used. In order to use this instruction, the calling function must have an exception handling personality set. LLVM 4.0 adds a new IR validation check to ensure a personality is always set in these cases. This was introduced in [r277360](https://reviews.llvm.org/rL277360).
2016-11-21TestsNick Cameron-2/+153
2016-11-21Read in rmeta cratesNick Cameron-50/+93
2016-11-21Add --crate-type metadataNick Cameron-26/+43
With the same semantics as -Zno-trans
2016-11-20Auto merge of #37896 - GuillaumeGomez:rollup, r=GuillaumeGomezbors-24/+1183
Rollup of 8 pull requests - Successful merges: #37835, #37840, #37841, #37848, #37876, #37880, #37881, #37882 - Failed merges: