Commit Graph

23381 Commits

Author SHA1 Message Date
Daniel Micay
b2eb1c01a4 add sret + noalias to the out pointer parameter
This brings Rust in line with how `clang` handles return pointers.

Example:

    pub fn bar() -> [uint, .. 8] {
        let a = [0, .. 8];
        a
    }

Before:

    ; Function Attrs: nounwind uwtable
    define void @_ZN3bar17ha4635c6f704bfa334v0.0E([8 x i64]* nocapture, { i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #1 {
    "function top level":
      %a = alloca [8 x i64], align 8
      %2 = bitcast [8 x i64]* %a to i8*
      call void @llvm.memset.p0i8.i64(i8* %2, i8 0, i64 64, i32 8, i1 false)
      %3 = bitcast [8 x i64]* %0 to i8*
      call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %2, i64 64, i32 8, i1 false)
      ret void
    }

After:

    ; Function Attrs: nounwind uwtable
    define void @_ZN3bar17ha4635c6f704bfa334v0.0E([8 x i64]* noalias nocapture sret, { i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #1 {
    "function top level":
      %2 = bitcast [8 x i64]* %0 to i8*
      call void @llvm.memset.p0i8.i64(i8* %2, i8 0, i64 64, i32 8, i1 false)
      ret void
    }

Closes #9072
Closes #7298
Closes #9154
2013-09-16 13:44:04 -04:00
Daniel Micay
3c31cf25b1 fix handling of function attributes
The `noalias` attributes were being set only on function definitions,
not on all declarations. This is harmless for `noalias`, but prevented
some optimization opportunities and is *not* harmless for other
attributes like `sret` with ABI implications.

Closes #9104
2013-09-16 13:44:01 -04:00
bors
250c3d47df auto merge of #9204 : lkuper/rust/workcache, r=alexcrichton
This just removes the stray "foo.c" that `workcache::test` leaves behind when, for example, `make check` runs.
2013-09-16 10:15:43 -07:00
blake2-ppc
e34e2032e8 std::str: Add bench tests for StrVector::connect() and for str::push_str 2013-09-16 19:13:41 +02:00
blake2-ppc
8fce135326 std::vec: Add function vec::bytes::push_bytes
`push_bytes` is implemented with `ptr::copy_memory` here since this
function is intended to be used to implement `.push_str()` for str, so
we want to avoid the overhead.
2013-09-16 19:13:41 +02:00
blake2-ppc
8d488f38ed std::vec: Fix hazards with uint overflows in unsafe code
Issue #8742

Add the method `.reserve_additional(n: uint)`: Check for overflow in
self.len() + n, and reserve that many elements (rounded up to next power
of two). Does nothing if self.len() + n < self.capacity() already.
2013-09-16 19:13:30 +02:00
Corey Richardson
9ea295b7df extra::json: use a different encoding for enums.
It now uses `{"type": VariantName, "fields": [...]}`, which, according to
@Seldaek, since all enums will have the same "shape" rather than being a weird
ad-hoc array, will optimize better in javascript JITs. It also looks prettier,
and makes more sense.
2013-09-16 12:40:32 -04:00
bors
6bc48b63f3 auto merge of #9192 : Kimundi/rust/master, r=huonw
A SendStr is a string that can hold either a ~str or a &'static str.
This can be useful as an optimization when an allocation is sometimes needed but the common case is statically known.

Possible use cases include Maps with both static and owned keys, or propagating error messages across task boundaries.

SendStr implements most basic traits in a way that hides the fact that it is an enum; in particular things like order and equality are only determined by the content of the wrapped strings.

This basically reimplements #7599 and has a use case for replacing an similar type in `std::rt::logging` ( Added in #9180).
2013-09-16 09:00:44 -07:00
Marvin Löbel
0635cb75b5 Corrected a few small style issues
Split up test function a bit
2013-09-16 17:45:24 +02:00
adridu59
62991e6047 gitattributes: force LF line endings for all files
This avoids default CRLF on msysgit for Windows which can cause trouble.
Cf. https://help.github.com/articles/dealing-with-line-endings#text-eollf

Commit dad2ccc9b3 followup.
Closes #7723.
2013-09-16 17:16:33 +02:00
Marvin Löbel
76c3e8a38c Add an SendStr type
A SendStr is a string that can hold either a ~str or a &'static str.
This can be useful as an optimization when an allocation is sometimes needed but the common case is statically known.

Possible use cases include Maps with both static and owned keys, or propagating error messages across task boundaries.

SendStr implements most basic traits in a way that hides the fact that it is an enum; in particular things like order and equality are only determined by the content of the wrapped strings.

Replaced std::rt:logging::SendableString with SendStr
Added tests for using an SendStr as key in Hash- and Treemaps
2013-09-16 16:57:50 +02:00
bors
507a7f093d auto merge of #9121 : sanxiyn/rust/arm, r=alexcrichton
Ignore failing tests on Android to prepare for #9120.
2013-09-16 07:45:45 -07:00
Alex Crichton
0107028991 Resume inlining globals across crates
In #8185 cross-crate condition handlers were fixed by ensuring that globals
didn't start appearing in different crates with different addressed. An
unfortunate side effect of that pull request is that constants weren't inlined
across crates (uint::bits is unknown to everything but libstd).

This commit fixes this inlining by using the `available_eternally` linkage
provided by LLVM. It partially reverts #8185, and then adds support for this
linkage type. The main caveat is that not all statics could be inlined into
other crates. Before this patch, all statics were considered "inlineable items",
but an unfortunate side effect of how we deal with `&static` and `&[static]`
means that these two cases cannot be inlined across crates. The translation of
constants was modified to propogate this condition of whether a constant
should be considered inlineable into other crates.

Closes #9036
2013-09-16 07:29:49 -07:00
Seo Sanghyeon
942bc3161e Ignore failing tests on Android 2013-09-16 23:10:01 +09:00
Seo Sanghyeon
51998d22b0 Pass OS to gyp_uv 2013-09-16 23:09:50 +09:00
bors
2562f480f5 auto merge of #9220 : kballard/rust/c_str-as_str, r=thestinger
Also rustify .as_bytes(), so it no longer calls libc::strlen() and is
inlineable.
2013-09-16 06:30:51 -07:00
blake2-ppc
2017cc3ce4 std::num: Add uint::next_power_of_two_opt
Like next_power_of_two, but returns None on overflow.
2013-09-16 15:04:48 +02:00
bors
3e1803f3af auto merge of #8540 : cmr/rust/rustdoc_ng, r=catamorphism
This doesn't enable it by default yet, or include the frontend. But the tool
is pretty much done, and it'd be nice to stave off bitrot.

I couldn't get it to actually build with the Makefile though. I don't really
understand what is going on in that makefile at all. Could @graydon or
@pnkfelix lend a hand?
2013-09-16 04:40:47 -07:00
Corey Richardson
0298c3ca10 rustdoc_ng: add licenses and issue numbers to appease tidy 2013-09-16 07:28:44 -04:00
Corey Richardson
c1d977a638 Update rustdoc_ng to syntax and metadata changes 2013-09-16 07:26:50 -04:00
Corey Richardson
be2f85e24f Update rustdoc_ng to new ast naming 2013-09-16 07:26:49 -04:00
Felix S. Klock II
136900fdbb Finish addition of rustdoc_ng to Makefiles. 2013-09-16 07:26:49 -04:00
Corey Richardson
268f3f0ff5 Add rustdoc_ng 2013-09-16 07:26:48 -04:00
bors
d87078be72 auto merge of #9206 : alexcrichton/rust/issue-9188, r=catamorphism
While they may have the same name within various scopes, this changes static
names to use path_pretty_name to append some hash information at the end of the
symbol. We're then guaranteed that each static has a unique NodeId, so this
NodeId is as the "hash" of the pretty name.

Closes #9188
2013-09-16 02:45:49 -07:00
bors
610c0cdf11 auto merge of #9196 : alexcrichton/rust/attempting-9055, r=cmr
Beforehand it was assumed that the standard cdecl abi was used for all extern
fns of extern crates, but this reads the abi of the extern fn type and declares
the function in the local crate with the appropriate type.

I was trying to think of how to write a test for this, but I was just drawing up blanks :(. Are there standard functions in libc which are not of the cdecl abi? If so we could try linking to them and make sure that the cal completes successfully.

Otherwise, I manually verified that the function was declared correctly by looking at the llvm assembly.

cc #9055 (I'm not sure if this will fix that issue)
2013-09-16 01:30:52 -07:00
bors
b05dccacae auto merge of #9187 : lkuper/rust/no-simplevisitor, r=catamorphism
We don't seem to be using `SimpleVisitor` anywhere in rustc.  Is there any reason to keep it around?

r? anyone
2013-09-16 00:15:52 -07:00
Steven Fackler
555589ef7f Remove references to std::pipes from task tutorial
This module was removed a while ago, but the tasks tutorial wasn't
updated, and the old docs page for pipes was never deleted so the link
confusingly still worked!
2013-09-15 23:37:38 -07:00
bors
3fbfab03d2 auto merge of #9118 : alexcrichton/rust/llvm-fix, r=sanxiyn
I created a new branch  rust-llvm-2013-09-11 in my llvm repo to mark this momentous occasion
2013-09-15 22:30:55 -07:00
Lindsey Kuper
a7515c87ae Have workcache::test put foo.c in the same directory it runs in.
This prevents a stray `foo.c` from being left lying around after tests
run, and it's more consistent with the rest of the code.
2013-09-16 01:21:00 -04:00
bors
2de2fb1c91 auto merge of #9219 : thestinger/rust/function-split, r=alexcrichton 2013-09-15 21:00:54 -07:00
Alex Crichton
297ac739d8 When declaring extern fns from external crates, use the correct abi
Beforehand it was assumed that the standard cdecl abi was used for all extern
fns of extern crates, but this reads the abi of the extern fn type and declares
the function in the local crate with the appropriate type.
2013-09-15 20:42:06 -07:00
Daniel Micay
6d0a847c3a teach Call/CallWithConv to set attributes 2013-09-15 23:34:11 -04:00
Kevin Ballard
51470f3b97 c_str: Add new method .as_str() -> Option<&str>
Also rustify .as_bytes(), so it no longer calls libc::strlen() and is
inlineable.
2013-09-15 20:30:03 -07:00
Alex Crichton
3cb0bc6523 Upgrade LLVM to close #9117 2013-09-15 20:26:40 -07:00
Daniel Micay
137eb346f6 remove unused FastCall wrapper
this can just be done using CallWithConv
2013-09-15 23:26:25 -04:00
klutzy
6d9c399ee2 std::rt::uv::file: Enable tests on Win32
Closes #8814.
2013-09-16 12:01:24 +09:00
klutzy
6aebf3cc16 extra::fileinput: Enable tests on Win32
They were blocked by #8810, but it works now.
2013-09-16 11:08:17 +09:00
klutzy
20e8470953 std::rt::uv::uvio: Enable tests on Win32
Closes #8816.
2013-09-16 10:31:36 +09:00
bors
72f62abebf auto merge of #9213 : dcrewi/rust/rust-test-arguments, r=catamorphism
The arguments after `rust test filename.rs` should be passed through
to the test binary. This allows the `rust` command to be used to run a
subset of tests, to run ignored tests, and to run benchmarks.
2013-09-15 14:00:52 -07:00
David Creswick
c6788411da rust test: pass the remaining arguments through
The arguments after `rust test filename.rs` should be passed through
to the test binary. This allows the `rust` command to be used to run a
subset of tests, to run ignored tests, and to run benchmarks.
2013-09-15 15:42:40 -05:00
bors
29032cda8c auto merge of #9168 : michaelwoerister/rust/traits, r=jdm
This pull request finally adds support for recursive type definitions and provides a stub implementation for object pointers.
2013-09-15 11:55:49 -07:00
klutzy
3686c6cbcf std::rt::io::net::tcp: Fix one tcp test on Win32
Fixes `connect_error` part of #8811.
2013-09-16 03:45:20 +09:00
klutzy
879cfe6049 std::rt::uv::uvll: Fix uv_req_type on Win32
Also enables request_sanity_check() test.

Closes #8817
2013-09-16 03:33:29 +09:00
klutzy
f3c8882533 std::os: Use unicode for last_os_error() on Win32
FormatMessageA may return non-ascii message,
which is encoded as system code page, not utf8.
This may cause `assert!(is_utf8(v))` failure on
some non-English machines.
This patch replaces it with FormatMessageW,
which returns utf-16 message.

Fixes `make check-stage2-std` failure on my machine. :)
2013-09-16 03:30:17 +09:00
klutzy
1e745f1679 std::rt::io::support: Fix ignored test on Win32
Assumes drive C: exists.

Closes #8812.
2013-09-16 03:30:10 +09:00
bors
c8c3c3bdd6 auto merge of #9150 : catamorphism/rust/rustpkg-cleanup, r=catamorphism
Just refactoring in tests.rs.
2013-09-15 10:25:48 -07:00
Tim Chevalier
84f2d33973 rustpkg: Cleanup 2013-09-15 09:55:11 -07:00
Michael Woerister
2ffe083631 debuginfo: Added LLVMDICompositeTypeSetTypeArray to rustllvm.def.in 2013-09-15 17:52:56 +02:00
bors
e0528a5077 auto merge of #9209 : blake2-ppc/rust/from-str, r=thestinger
Remove these in favor of the two traits themselves and the wrapper
function std::from_str::from_str.

Add the function std::num::from_str_radix in the corresponding role for
the FromStrRadix trait.

With `from_str` in the prelude, and `from_str_radix` in `std::num`, the feature is unfied under the type annotation of these functions instead of using the modules-named-as-types (std::uint and others):

What was before:

    let n = std::uint::from_str("1");
    let m = std::i32::from_str_radix("10", 16);

is now:

    let n = from_str::<uint>("1");
    let m = std::num::from_str_radix::<i32>("10", 16);
2013-09-15 08:35:50 -07:00
klutzy
d2ce83ccb1 std::rt::io::file: Enable I/O tests on Win32
Enable blocked tests which are now fixed by #9165.

Closes #8810.
2013-09-15 23:20:33 +09:00