1. 16 2月, 2014 22 次提交
    • B
      mk: Remove check-notidy, check-full, check-test · 109673f3
      Brian Anderson 提交于
      Mostly useless
      109673f3
    • B
      auto merge of #12305 : luqmana/rust/ub, r=sfackler · f3d4fe75
      bors 提交于
      These are no longer valid options as of the recent llvm upgrade.
      f3d4fe75
    • B
      auto merge of #12299 : sfackler/rust/limit-return, r=alexcrichton · 49ba513c
      bors 提交于
      This is useful in contexts like this:
      
      ```rust
      let size = rdr.read_be_i32() as uint;
      let mut limit = LimitReader::new(rdr.by_ref(), size);
      let thing = read_a_thing(&mut limit);
      assert!(limit.limit() == 0);
      ```
      49ba513c
    • L
      mk: Remove old flags to llc for arm. · 615536a2
      Luqman Aden 提交于
      615536a2
    • B
      auto merge of #12298 : alexcrichton/rust/rustdoc-testing, r=sfackler · 0c62d9d8
      bors 提交于
      It's too easy to forget the `rust` tag to test something.
      
      Closes #11698
      0c62d9d8
    • B
      auto merge of #12235 : huonw/rust/raii-lock, r=alexcrichton · d98668a5
      bors 提交于
      - adds a `LockGuard` type returned by `.lock` and `.trylock` that unlocks the mutex in the destructor
      - renames `mutex::Mutex` to `StaticNativeMutex` 
      - adds a `NativeMutex` type with a destructor
      - removes `LittleLock`
      - adds `#[must_use]` to `sync::mutex::Guard` to remind people to use it
      d98668a5
    • H
      4668cdf3
    • H
      5d86e24a
    • H
      sync: Add `#[must_use]` to the Mutex guard. · 0f4294b4
      Huon Wilson 提交于
      This helps people remember to save the return value to keep the mutex
      locked as appropriate.
      0f4294b4
    • H
      std: add a NativeMutex type as a wrapper to destroy StaticNativeMutex. · 0937f659
      Huon Wilson 提交于
      This obsoletes LittleLock, and so it is removed.
      0937f659
    • H
      std: Rename unstable::mutex::Mutex to StaticNativeMutex. · b87ed605
      Huon Wilson 提交于
      This better reflects its purpose and design.
      b87ed605
    • H
      75d92dba
    • H
      std: add an RAII unlocker to Mutex. · 76a59fd6
      Huon Wilson 提交于
      This automatically unlocks its lock when it goes out of scope, and
      provides a safe(ish) method to call .wait.
      76a59fd6
    • S
      Add a method to LimitReader to return the limit · 23fdbcf7
      Steven Fackler 提交于
      This is useful in contexts like this:
      
      let size = rdr.read_be_i32() as uint;
      let mut limit = LimitReader::new(rdr.by_ref(), size);
      let thing = read_a_thing(&mut limit);
      assert!(limit.limit() == 0);
      23fdbcf7
    • B
      auto merge of #12272 : alexcrichton/rust/snapshot, r=kballard · 6b025c80
      bors 提交于
      This notably contains the `extern mod` => `extern crate` change.
      
      Closes #9880
      6b025c80
    • B
      auto merge of #12296 : dotdash/rust/byval_noalias, r=cmr · 4af28c98
      bors 提交于
      Function parameters that are to be passed by value but don't fit into a
      single register are currently passed by creating a copy on the stack and
      passing a pointer to that copy to the callee. Since the copy is made
      just for the function call, there are no aliases.
      
      For example, this sometimes allows LLVM to eliminate unnecessary calls
      to drop glue. Given
      
      ````rust
      struct Foo {
          a: int,
          b: Option<~str>,
      }
      
      extern {
          fn eat(eat: Option<~str>);
      }
      
      pub fn foo(v: Foo) {
          match v {
              Foo { a: _, b } => unsafe { eat(b) }
          }
      }
      ````
      
      LLVM currently can't eliminate the drop call for the string, because it
      only sees a _pointer_ to Foo, for which it has to expect an alias. So we
      get:
      
      ````llvm
      ; Function Attrs: uwtable
      define void @_ZN3foo20h9f32c90ae7201edbxaa4v0.0E(%struct.Foo* nocapture) unnamed_addr #0 {
      "_ZN34std..option..Option$LT$$UP$str$GT$9glue_drop17hc39b3015f3b9c69dE.exit":
        %1 = getelementptr inbounds %struct.Foo* %0, i64 0, i32 1, i32 0
        %2 = load { i64, i64, [0 x i8] }** %1, align 8
        store { i64, i64, [0 x i8] }* null, { i64, i64, [0 x i8] }** %1, align 8
        %3 = ptrtoint { i64, i64, [0 x i8] }* %2 to i64
        %.fca.0.insert = insertvalue { i64 } undef, i64 %3, 0
        tail call void @eat({ i64 } %.fca.0.insert)
        %4 = load { i64, i64, [0 x i8] }** %1, align 8
        %5 = icmp eq { i64, i64, [0 x i8] }* %4, null
        br i1 %5, label %_ZN3Foo9glue_drop17hf611996539d3036fE.exit, label %"_ZN8_$UP$str9glue_drop17h15dbdbe2b8897a98E.exit.i.i"
      
      "_ZN8_$UP$str9glue_drop17h15dbdbe2b8897a98E.exit.i.i": ; preds = %"_ZN34std..option..Option$LT$$UP$str$GT$9glue_drop17hc39b3015f3b9c69dE.exit"
        %6 = bitcast { i64, i64, [0 x i8] }* %4 to i8*
        tail call void @free(i8* %6) #1
        br label %_ZN3Foo9glue_drop17hf611996539d3036fE.exit
      
      _ZN3Foo9glue_drop17hf611996539d3036fE.exit:       ; preds = %"_ZN34std..option..Option$LT$$UP$str$GT$9glue_drop17hc39b3015f3b9c69dE.exit", %"_ZN8_$UP$str9glue_drop17h15dbdbe2b8897a98E.exit.i.i"
        ret void
      }
      ````
      
      But with the `noalias` attribute, it can safely optimize that to:
      
      ````llvm
      define void @_ZN3foo20hd28431f929f0d6c4xaa4v0.0E(%struct.Foo* noalias nocapture) unnamed_addr #0 {
      _ZN3Foo9glue_drop17he9afbc09d4e9c851E.exit:
        %1 = getelementptr inbounds %struct.Foo* %0, i64 0, i32 1, i32 0
        %2 = load { i64, i64, [0 x i8] }** %1, align 8
        store { i64, i64, [0 x i8] }* null, { i64, i64, [0 x i8] }** %1, align 8
        %3 = ptrtoint { i64, i64, [0 x i8] }* %2 to i64
        %.fca.0.insert = insertvalue { i64 } undef, i64 %3, 0
        tail call void @eat({ i64 } %.fca.0.insert)
        ret void
      }
      ````
      4af28c98
    • B
      Declare by-value on-stack parameters to be noalias · 500d29b5
      Björn Steinbrink 提交于
      Function parameters that are to be passed by value but don't fit into a
      single register are currently passed by creating a copy on the stack and
      passing a pointer to that copy to the callee. Since the copy is made
      just for the function call, there are no aliases.
      
      For example, this sometimes allows LLVM to eliminate unnecessary calls
      to drop glue. Given
      
      ````rust
      struct Foo {
          a: int,
          b: Option<~str>,
      }
      
      extern {
          fn eat(eat: Option<~str>);
      }
      
      pub fn foo(v: Foo) {
          match v {
              Foo { a: _, b } => unsafe { eat(b) }
          }
      }
      ````
      
      LLVM currently can't eliminate the drop call for the string, because it
      only sees a _pointer_ to Foo, for which it has to expect an alias. So we
      get:
      
      ````llvm
      ; Function Attrs: uwtable
      define void @_ZN3foo20h9f32c90ae7201edbxaa4v0.0E(%struct.Foo* nocapture) unnamed_addr #0 {
      "_ZN34std..option..Option$LT$$UP$str$GT$9glue_drop17hc39b3015f3b9c69dE.exit":
        %1 = getelementptr inbounds %struct.Foo* %0, i64 0, i32 1, i32 0
        %2 = load { i64, i64, [0 x i8] }** %1, align 8
        store { i64, i64, [0 x i8] }* null, { i64, i64, [0 x i8] }** %1, align 8
        %3 = ptrtoint { i64, i64, [0 x i8] }* %2 to i64
        %.fca.0.insert = insertvalue { i64 } undef, i64 %3, 0
        tail call void @eat({ i64 } %.fca.0.insert)
        %4 = load { i64, i64, [0 x i8] }** %1, align 8
        %5 = icmp eq { i64, i64, [0 x i8] }* %4, null
        br i1 %5, label %_ZN3Foo9glue_drop17hf611996539d3036fE.exit, label %"_ZN8_$UP$str9glue_drop17h15dbdbe2b8897a98E.exit.i.i"
      
      "_ZN8_$UP$str9glue_drop17h15dbdbe2b8897a98E.exit.i.i": ; preds = %"_ZN34std..option..Option$LT$$UP$str$GT$9glue_drop17hc39b3015f3b9c69dE.exit"
        %6 = bitcast { i64, i64, [0 x i8] }* %4 to i8*
        tail call void @free(i8* %6) #1
        br label %_ZN3Foo9glue_drop17hf611996539d3036fE.exit
      
      _ZN3Foo9glue_drop17hf611996539d3036fE.exit:       ; preds = %"_ZN34std..option..Option$LT$$UP$str$GT$9glue_drop17hc39b3015f3b9c69dE.exit", %"_ZN8_$UP$str9glue_drop17h15dbdbe2b8897a98E.exit.i.i"
        ret void
      }
      ````
      
      But with the `noalias` attribute, it can safely optimize that to:
      
      ````llvm
      define void @_ZN3foo20hd28431f929f0d6c4xaa4v0.0E(%struct.Foo* noalias nocapture) unnamed_addr #0 {
      _ZN3Foo9glue_drop17he9afbc09d4e9c851E.exit:
        %1 = getelementptr inbounds %struct.Foo* %0, i64 0, i32 1, i32 0
        %2 = load { i64, i64, [0 x i8] }** %1, align 8
        store { i64, i64, [0 x i8] }* null, { i64, i64, [0 x i8] }** %1, align 8
        %3 = ptrtoint { i64, i64, [0 x i8] }* %2 to i64
        %.fca.0.insert = insertvalue { i64 } undef, i64 %3, 0
        tail call void @eat({ i64 } %.fca.0.insert)
        ret void
      }
      ````
      500d29b5
    • B
      auto merge of #12270 : bstrie/rust/pnoise, r=huonw · adea48ab
      bors 提交于
      Mostly just style fixes, but also remove a heap allocation and switch to using a buffered writer rather than doing 60,000 `println!`s.
      adea48ab
    • B
      Clean up the Perlin noise benchmark · bfa3e606
      Ben Striegel 提交于
      bfa3e606
    • B
      auto merge of #12282 : cmr/rust/cleanup-ptr, r=huonw · 7762baa8
      bors 提交于
      7762baa8
    • C
      impl fmt::Pointer for &T and &mut T · 254c155f
      Corey Richardson 提交于
      254c155f
    • C
      std: clean up ptr a bit · 49e11630
      Corey Richardson 提交于
      49e11630
  2. 15 2月, 2014 18 次提交