- 05 7月, 2014 1 次提交
-
-
由 John Clements 提交于
-
- 04 7月, 2014 22 次提交
-
-
由 John Clements 提交于
-
由 bors 提交于
Closes #15276 (Guide: if) Closes #15280 (std::os - Add join_paths, make setenv non-utf8 capable) Closes #15314 (Guide: functions) Closes #15327 (Simplify PatIdent to contain an Ident rather than a Path) Closes #15340 (Guide: add mutable binding section) Closes #15342 (Fix ICE with nested macro_rules!-style macros) Closes #15350 (Remove duplicated slash in install script path) Closes #15351 (correct a few spelling mistakes in the tutorial) Closes #15352 (librustc: Have the kind checker check sub-bounds in trait casts.) Closes #15359 (Fix spelling errors.) Closes #15361 (Rename set_broadast() to set_broadcast().) Closes #15366 (Simplify creating a parser from a token tree) Closes #15367 (Add examples for StrVector methods) Closes #15372 (Vec::grow should use reserve_additional, Vec::reserve should check against capacity) Closes #15373 (Fix minor issues in the documentation of libtime.)
-
由 bors 提交于
```Rust struct With { x: int, f: NoCopy } #[no_mangle] fn bar() { let mine = With { x: 3, f: NoCopy }; match mine { c => { foo(c); } } } #[no_mangle] fn foo(_: With) {} ``` Before: ```LLVM define internal void @bar() unnamed_addr #1 { entry-block: %mine = alloca %"struct.With<[]>" %__llmatch = alloca %"struct.With<[]>"* %c = alloca %"struct.With<[]>" %0 = getelementptr inbounds %"struct.With<[]>"* %mine, i32 0, i32 0 store i64 3, i64* %0 %1 = getelementptr inbounds %"struct.With<[]>"* %mine, i32 0, i32 1 store %"struct.With<[]>"* %mine, %"struct.With<[]>"** %__llmatch br label %case_body case_body: ; preds = %entry-block %2 = load %"struct.With<[]>"** %__llmatch %3 = bitcast %"struct.With<[]>"* %2 to i8* %4 = bitcast %"struct.With<[]>"* %c to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %3, i64 8, i32 8, i1 false) %5 = load %"struct.With<[]>"* %c call void @foo(%"struct.With<[]>" %5) br label %join join: ; preds = %case_body ret void } ``` After: ```LLVM define internal void @bar() unnamed_addr #1 { entry-block: %mine = alloca %"struct.With<[]>" %c = alloca %"struct.With<[]>"* %0 = getelementptr inbounds %"struct.With<[]>"* %mine, i32 0, i32 0 store i64 3, i64* %0 %1 = getelementptr inbounds %"struct.With<[]>"* %mine, i32 0, i32 1 store %"struct.With<[]>"* %mine, %"struct.With<[]>"** %c br label %case_body case_body: ; preds = %entry-block %2 = load %"struct.With<[]>"** %c %3 = load %"struct.With<[]>"* %2 call void @foo(%"struct.With<[]>" %3) br label %join join: ; preds = %case_body ret void } ``` r? @pcwalton
-
由 Alex Crichton 提交于
-
由 OGINO Masanori 提交于
- When the timezone is UTC, the "zone" field of the RFC 822 format is "GMT" (or "UT"), not "UTC." - Although the name of `rfc3999` refers to RFC 3999, the documentation of it refers only to ISO 8601. This commit adds a description of the relation between ISO 8601 and RFC 3999. Signed-off-by: NOGINO Masanori <masanori.ogino@gmail.com>
-
由 Erick Tryzelaar 提交于
-
由 Erick Tryzelaar 提交于
-
由 Jason Thompson 提交于
- examples for connect and concat - also fixed extra word in existing docs
-
由 Piotr Jawniak 提交于
Closes #15306
-
由 Joseph Crail 提交于
-
由 Joseph Crail 提交于
-
由 Patrick Walton 提交于
This can break code that looked like: struct S<T> { val: T, } trait Gettable<T> { ... } impl<T: Copy> Gettable<T> for S<T> { ... } let t: Box<S<String>> = box S { val: "one".to_string(), }; let a = t as Box<Gettable<String>>; // ^ note no `Copy` bound Change this code to: impl<T> Gettable<T> for S<T> { // ^ remove `Copy` bound ... } Closes #14061. [breaking-change]
-
由 Nathan Froyd 提交于
-
由 Ruud van Asseldonk 提交于
-
由 Kevin Ballard 提交于
Fixes #10536.
-
由 Steve Klabnik 提交于
Fixes #15334.
-
由 John Clements 提交于
Rationale: for what appear to be historical reasons only, the PatIdent contains a Path rather than an Ident. This means that there are many places in the code where an ident is artificially promoted to a path, and---much more problematically--- a bunch of elements from a path are simply thrown away, which seems like an invitation to some really nasty bugs. This commit replaces the Path in a PatIdent with a SpannedIdent, which just contains an ident and a span.
-
由 Paolo Falabella 提交于
-
由 Steve Klabnik 提交于
Just a few words about functions and defining them.
-
由 Aaron Turon 提交于
This commit changes `os` in three ways: * It adds a `join_paths` function that is the converse to `split_paths`, easing manipulation of the `PATH` environment variable according to platform conventions. * **Breaking change**: It changes `split_paths` to no longer drop empty paths, since they are meaningful to some shells (where they are synonymous with the current working directory). * It changes `setenv` to take a `BytesContainer` rather than a `&str` value, since environment variables may have non-utf8 values on some platforms. Since `&str` is a `BytesContainer`, this is *not* a breaking change. Along the way, it also refactors the `split_paths` function so that `cfg` switches are applied internally (and the function header is given only once). This fixes a bug: the doc comment had an example for only one platform. [breaking-change]
-
由 Steve Klabnik 提交于
-
由 bors 提交于
This was causing lots of ICEs in cargo. I sadly wasn't ever able to reduce the test case down, but I presume that's because it has to do with node id collisions which are pretty difficult to turn up...
-
- 03 7月, 2014 17 次提交
-
-
由 Alex Crichton 提交于
This was causing lots of ICEs in cargo. I sadly wasn't ever able to reduce the test case down, but I presume that's because it has to do with node id collisions which are pretty difficult to turn up...
-
由 bors 提交于
Tried squashing commits for https://github.com/rust-lang/rust/pull/15329, failed spectacularly. This is a fresh PR for the same change. @alexcrichton?
-
由 bors 提交于
One of the examples in the docs on adding documentation to rust code has an error that will cause the function to run endlessly rather than return the desired result, should someone actually implement this for some reason. While the error does not hinder the explanation of documenting code, it does look better if it is corrected.
-
由 bors 提交于
So far, type names generated for debuginfo where a bit sketchy. It was not clearly defined when a name should be fully qualified and when not, if region parameters should be shown or not, and other things like that. This commit makes the debuginfo module responsible for creating type names instead of using `ppaux::ty_to_str()` and brings type names (as they show up in the DWARF information) in line with GCC and Clang: * The name of the type being described is unqualified. It's path is defined by its position in the namespace hierarchy. * Type arguments are always fully qualified, no matter if they would actually be in scope at the type definition location. Care is also taken to make type names consistent across crate boundaries. That is, the code now tries make the type name the same, regardless if the type is in the local crate or reconstructed from metadata. Otherwise LLVM will complain about violating the one-definition-rule when using link-time-optimization. This commit also removes all source location information from type descriptions because these cannot be reconstructed for types instantiated from metadata. Again, with LTO enabled, this can lead to two versions of the debuginfo type description, one with and one without source location information, which then triggers the LLVM ODR assertion. Fortunately, source location information about types is rarely used, so this has little impact. Once source location information is preserved in metadata (#1972) it can also be re-enabled for type descriptions. `RUSTFLAGS=-g make check` no works again for me locally, including the LTO test cases (note that I've taken care of #15156 by reverting the change in LLVM that @luqmana identified as the culprit for that issue).
-
由 bors 提交于
I believe there's more commonality to be found there but maybe small steps are better. I'm also in the process of documenting what I can, I will see if I can add it to this PR. It also seems to me that ideally some of this stuff (especially the pattern sanity check) could live as a separate compiler-agnostic module but I understand this may not be the right time (if not the worst) to start the process of modularising rustc.
-
由 Jakub Wieczorek 提交于
The specialization logic for patterns is really the same in both exhaustiveness/reachability checking and codegen.
-
由 bors 提交于
The current implementation of `rotate_left` and `rotate_right` are incorrect when the rotation amount is 0, or a multiple of the input's bitsize. When `n = 0`, the expression (self >> n) | (self << ($BITS - n)) results in a shift left by `$BITS` bits, which is undefined behavior (see https://github.com/rust-lang/rust/issues/10183), and currently results in a hardcoded `-1` value, instead of the original input value. Reducing `($BITS - n)` modulo `$BITS`, simplified to `(-n % $BITS)`, fixes this problem.
-
由 bors 提交于
Short-term fix per @brson's comment: https://github.com/rust-lang/rust/issues/13810#issuecomment-43562843. Tested on Win7 x64 and Linux. One possible issue is that `install.sh` doesn't have a `need_cmd` definition like `configure` does. Should this be ported over as well? Platform-detection code from `configure` copied over to `install.sh` in order to special case the lib dir being `bin` on Windows instead of `lib`. Short-term fix for #13810.
-
由 Luqman Aden 提交于
-
由 Luqman Aden 提交于
-
由 Luqman Aden 提交于
-
由 Luqman Aden 提交于
-
由 bors 提交于
with the corresponding trait parameter bounds. This is a version of the patch in PR #12611 by Florian Hahn, modified to address Niko's feedback. It does not address the issue of duplicate type parameter bounds, nor does it address the issue of implementation-defined methods that contain *fewer* bounds than the trait, because Niko's review indicates that this should not be necessary (and indeed I believe it is not). A test has been added to ensure that this works. This will break code like: trait Foo { fn bar<T:Baz>(); } impl Foo for Boo { fn bar<T:Baz + Quux>() { ... } // ^~~~ ERROR } This will be rejected because the implementation requires *more* bounds than the trait. It can be fixed by either adding the missing bound to the trait: trait Foo { fn bar<T:Baz + Quux>(); // ^~~~ } impl Foo for Boo { fn bar<T:Baz + Quux>() { ... } // OK } Or by removing the bound from the impl: trait Foo { fn bar<T:Baz>(); } impl Foo for Boo { fn bar<T:Baz>() { ... } // OK // ^ remove Quux } This patch imports the relevant tests from #2687, as well as the test case in #5886, which is fixed as well by this patch. Closes #2687. Closes #5886. [breaking-change] r? @pnkfelix
-
由 Mike Boutin 提交于
Platform-detection code from `configure` copied over to `install.sh` in order to special case the lib dir being `bin` on Windows instead of `lib`. Short-term fix for #13810.
-
由 bors 提交于
It's looking like we're still timing out all over the place with travis_wait because the entire `make -j4 rustc-stage1` command is taking too long. Instead, achieve roughly the same idea by just having `-Z time-passes` printing information. We shouldn't have a pass that takes longer than 10 minutes in isolation.
-
由 Samuel Neves 提交于
Add additional rotation tests
-
由 bors 提交于
with overloaded calls. This enforces the mutability and borrow restrictions around overloaded calls. [breaking-change] Closes #12223. r? @alexcrichton
-