1. 05 7月, 2014 1 次提交
  2. 04 7月, 2014 22 次提交
    • J
      4358bf8b
    • B
      auto merge of #15377 : alexcrichton/rust/rollup, r=alexcrichton · 5d5c2064
      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.)
      5d5c2064
    • B
      auto merge of #15076 : luqmana/rust/naim, r=pcwalton · dd812ccb
      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
      dd812ccb
    • A
      Test fixes from the rollup · 9bd64799
      Alex Crichton 提交于
      9bd64799
    • O
      Fix minor issues in the documentation of libtime. · 0c5b6272
      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>
      0c5b6272
    • E
      451b7495
    • E
    • J
      Add examples for StrVector methods · 7db691e0
      Jason Thompson 提交于
      - examples for connect and concat
      - also fixed extra word in existing docs
      7db691e0
    • P
      Simplify creating a parser from a token tree · 2f355b79
      Piotr Jawniak 提交于
      Closes #15306
      2f355b79
    • J
      Rename set_broadast() to set_broadcast(). · 4a6fcc51
      Joseph Crail 提交于
      4a6fcc51
    • J
      Fix spelling errors. · e3fa23bc
      Joseph Crail 提交于
      e3fa23bc
    • P
      librustc: Have the kind checker check sub-bounds in trait casts. · 8297edd5
      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]
      8297edd5
    • N
      correct a few spelling mistakes in the tutorial · 704f11d3
      Nathan Froyd 提交于
      704f11d3
    • R
      remove duplicated slash in install script path · 5d360050
      Ruud van Asseldonk 提交于
      5d360050
    • K
      Fix ICE with nested macro_rules!-style macros · b81905ee
      Kevin Ballard 提交于
      Fixes #10536.
      b81905ee
    • S
      Guide: add mutable binding section · 9868b65b
      Steve Klabnik 提交于
      Fixes #15334.
      9868b65b
    • J
      Simplify PatIdent to contain an Ident rather than a Path · e38cb972
      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.
      e38cb972
    • P
      cff79ab5
    • S
      Guide: functions · faf5d926
      Steve Klabnik 提交于
      Just a few words about functions and defining them.
      faf5d926
    • A
      Add os::join_paths, make setenv non-utf8 capable · 8877b81f
      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]
      8877b81f
    • S
      Guide: if · 748b9477
      Steve Klabnik 提交于
      748b9477
    • B
      auto merge of #15370 : alexcrichton/rust/fix-cargo, r=pnkfelix · eda75bcf
      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...
      eda75bcf
  3. 03 7月, 2014 17 次提交
    • A
      rustc: Fix a call to with_path in trans_unboxing_shim · 497ecd04
      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...
      497ecd04
    • B
      auto merge of #15338 : pfalabella/rust/rational-impl-2, r=alexcrichton · 0aa23ed1
      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?
      0aa23ed1
    • B
      auto merge of #15331 : Derecho/rust/master, r=alexcrichton · 524f4699
      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.
      524f4699
    • B
      auto merge of #15199 : michaelwoerister/rust/cross-crate-stability, r=luqmana · 550cc045
      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).
      550cc045
    • B
      auto merge of #15078 : jakub-/rust/pattern-matching-refactor-vol-2, r=pnkfelix · e26d0a7a
      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.
      e26d0a7a
    • J
      Improve code reuse between trans/_match.rs and check_match.rs · 6b6edf47
      Jakub Wieczorek 提交于
      The specialization logic for patterns is really the same in both
      exhaustiveness/reachability checking and codegen.
      6b6edf47
    • B
      auto merge of #15324 : sneves/rust/master, r=alexcrichton · 00f9ff2b
      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.
      00f9ff2b
    • B
      auto merge of #15087 : iliekturtles/rust/13810-make-install-mingw32, r=brson · e6c54a12
      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.
      e6c54a12
    • L
      Build rustc with /LARGEADDRESSAWARE on windows. · 77f72d36
      Luqman Aden 提交于
      77f72d36
    • L
      librustc: Don't schedule redundant cleanups. · df886468
      Luqman Aden 提交于
      df886468
    • L
      bedc41b2
    • L
    • B
      auto merge of #15325 : pcwalton/rust/trait-impl-bound-mismatch, r=pnkfelix · 67776ba3
      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
      67776ba3
    • M
      install: Correct libdir for Windows installs. · ccd7aaf1
      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.
      ccd7aaf1
    • B
      auto merge of #15323 : alexcrichton/rust/no-travis-wait, r=huonw · c8ae0651
      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.
      c8ae0651
    • S
      Fix rotate_{left, right} for multiple of bitsize rotation amounts · c0248c08
      Samuel Neves 提交于
      Add additional rotation tests
      c0248c08
    • B
      auto merge of #15313 : pcwalton/rust/overloaded-call-expr-use, r=alexcrichton · 3035d8df
      bors 提交于
      with overloaded calls.
      
      This enforces the mutability and borrow restrictions around overloaded
      calls.
      
      [breaking-change]
      
      Closes #12223.
      
      r? @alexcrichton
      3035d8df