Commit Graph

37176 Commits

Author SHA1 Message Date
Steven Fackler
08f6380a9f Rewrite Condvar::wait_timeout and make it public
**The implementation is a direct adaptation of libcxx's
condition_variable implementation.**

pthread_cond_timedwait uses the non-monotonic system clock. It's
possible to change the clock to a monotonic via pthread_cond_attr, but
this is incompatible with static initialization. To deal with this, we
calculate the timeout using the system clock, and maintain a separate
record of the start and end times with a monotonic clock to be used for
calculation of the return value.
2015-01-16 09:17:37 -08:00
Alex Crichton
cbeb77ec7a rustc: Fix a leak in dependency= paths
With the addition of separate search paths to the compiler, it was intended that
applications such as Cargo could require a `--extern` flag per `extern crate`
directive in the source. The system can currently be subverted, however, due to
the `existing_match()` logic in the crate loader.

When loading crates we first attempt to match an `extern crate` directive
against all previously loaded crates to avoid reading metadata twice. This "hit
the cache if possible" step was erroneously leaking crates across the search
path boundaries, however. For example:

    extern crate b;
    extern crate a;

If `b` depends on `a`, then it will load crate `a` when the `extern crate b`
directive is being processed. When the compiler reaches `extern crate a` it will
use the previously loaded version no matter what. If the compiler was not
invoked with `-L crate=path/to/a`, it will still succeed.

This behavior is allowing `extern crate` declarations in Cargo without a
corresponding declaration in the manifest of a dependency, which is considered
a bug.

This commit fixes this problem by keeping track of the origin search path for a
crate. Crates loaded from the dependency search path are not candidates for
crates which are loaded from the crate search path.

As a result of this fix, this is a likely a breaking change for a number of
Cargo packages. If the compiler starts informing that a crate can no longer be
found, it likely means that the dependency was forgotten in your Cargo.toml.

[breaking-change]
2015-01-16 08:48:16 -08:00
Alex Crichton
8115222607 rustc_resolve: Correctly record privacy of methods
Loading methods from external crates was erroneously using the type's privacy
for each method instead of each method's privacy. This commit fixes that.

Closes #21202
2015-01-16 08:39:56 -08:00
Alex Crichton
a9decbdc44 rustc: Move the privacy pass to its own crate 2015-01-16 08:38:24 -08:00
bors
210f0dcf00 auto merge of #21162 : apasel422/rust/issue-16530, r=huonw
This fixes #16530 by hashing nullary structs [the same way as the empty tuple] (https://github.com/rust-lang/rust/blob/master/src/libcore/hash/mod.rs#L185). Other approaches are possible, but this was the simplest.
2015-01-16 16:21:06 +00:00
bors
ee2bfae011 auto merge of #20972 : FlaPer87/rust/oibit-send-and-friends, r=nikomatsakis
This PR adds rules for negative implementations. It follows pretty much what the [RFC](https://github.com/rust-lang/rfcs/blob/master/text/0019-opt-in-builtin-traits.md) says with 1 main difference:

Instead of positive implementations override negative implementations, this have been implemented in a way that a negative implementation of `Trait` for `T` will overlap with a positive implementation, causing a coherence error.

@nikomatsakis r?

cc #13231

[breaking-change]
2015-01-16 13:10:59 +00:00
Huon Wilson
0a55aacc07 Prefer implemented traits in suggestions.
If `a.method();` can't be resolved, we first look for implemented traits
globally and suggest those. If there are no such traits found, we only
then fall back to suggesting from the unfiltered list of traits.
2015-01-16 22:54:19 +11:00
Huon Wilson
9e83ae931c Put vector types in regs for arm & mips FFI.
This seems to match what clang does on arm, but I cannot do any
experimentation with mips, but it matches how the LLVM intrinsics are
defined in any case...
2015-01-16 22:49:40 +11:00
Huon Wilson
7d4f358de7 Support SSE with integer types in x86-64 FFI.
Unlike the intrinics in C, this types the SSE values base on integer
size. This matches the LLVM intrinsics which have concrete vector types
(`<4 x i32>` etc.), and is no loss of expressivity: if one is using a C
function that really takes an untyped integral SSE value, just give it
whatever Rust type makes most sense.
2015-01-16 22:49:40 +11:00
Huon Wilson
5edbe1f5dd Add Type::int_width for retrieving integer's bit width. 2015-01-16 22:49:39 +11:00
Huon Wilson
3d59a476e5 Support SSE types in extern {} better.
This seems to work on x86-64, but I am not able to test on other
platforms.

cc #20043
2015-01-16 22:49:39 +11:00
Flavio Percoco
cb85223903 fix pretty test fallout 2015-01-16 11:47:48 +01:00
Flavio Percoco
7cd762a967 Docs fallout 2015-01-16 08:18:57 +01:00
Flavio Percoco
2adc8b529a populate impls *before* clonning the impls vec 2015-01-16 08:18:56 +01:00
Flavio Percoco
59775bb955 fix latest changes fallout 2015-01-16 08:18:56 +01:00
Flavio Percoco
aa642b3486 addressed comments 2015-01-16 08:18:56 +01:00
Flavio Percoco
038aa0e8e9 Allow negative impls just for Send and Sync 2015-01-16 08:18:56 +01:00
Flavio Percoco
921ba5a09f Don't use NoSend/NoSync in tests 2015-01-16 08:18:56 +01:00
Flavio Percoco
094397a88b Fix coherence for negative implementations 2015-01-16 08:18:56 +01:00
Flavio Percoco
9d42581cf9 add a run-pass test that used to fail 2015-01-16 08:18:56 +01:00
Flavio Percoco
c6ab9a6370 Don't use NoSend/NoSync in libstd 2015-01-16 08:18:56 +01:00
Flavio Percoco
bb04121138 Don't use NoSend/NoSync in liballoc 2015-01-16 08:18:56 +01:00
Flavio Percoco
388e30f78e Remove NoSend/NoSync 2015-01-16 08:18:56 +01:00
Flavio Percoco
9eec782774 Check for negative impls for Send and Sync 2015-01-16 08:18:56 +01:00
Flavio Percoco
5aab863ba2 Don't assemble bound impls if candidate's ambiguous 2015-01-16 08:18:56 +01:00
Flavio Percoco
39fe05f58c Negative impls are considered safe 2015-01-16 08:18:55 +01:00
Flavio Percoco
e644ca0d6a push_impls_of_trait is not needed, use map 2015-01-16 08:18:55 +01:00
Flavio Percoco
199e0cd804 Add test for missing default impl 2015-01-16 08:18:55 +01:00
Flavio Percoco
683d20c3c5 Record negative trait_impls separatedly 2015-01-16 08:18:55 +01:00
bors
f3d71be65c Merge pull request #21214 from sleepynate/spacing-in-book
Fix commented graphs in src/doc/trpl/ownership.md

Reviewed-by: huonw
2015-01-16 06:31:03 +00:00
bors
ea9b00fdad Merge pull request #21211 from fenhl/patch-1
Fix std::sync::condvar::Condvar::notify_one docs

Reviewed-by: alexcrichton
2015-01-16 06:31:02 +00:00
bors
317da0bf2a Merge pull request #21181 from nick29581/save-fix
Two minor fixes for save-analysis

Reviewed-by: huonw
2015-01-16 06:31:02 +00:00
bors
b565501ad8 auto merge of #21213 : alexcrichton/rust/rollup, r=alexcrichton 2015-01-16 03:02:54 +00:00
Alex Crichton
42198c18f4 Test fixes and rebase conflicts 2015-01-15 18:53:30 -08:00
nathan dotz
3626a308f3 Fix commented graphs in src/doc/trpl/ownership.md 2015-01-15 18:15:18 -05:00
Fenhl
5f34815a22 Fix sync::condvar::Condvar::notify_one docs 2015-01-15 22:43:12 +00:00
bors
8903c21d61 auto merge of #21052 : nick29581/rust/methods-ext, r=sfackler
Allows modifiers to be used on methods, associated types, etc.

r? @sfackler
2015-01-15 22:42:58 +00:00
Alex Crichton
5f32992b31 rollup merge of #21206: steveklabnik/expressions
Suggested here: http://stackoverflow.com/a/27962076/24817
2015-01-15 14:12:08 -08:00
Alex Crichton
002d840d17 rollup merge of #21199: dotdash/decode_lamba
Currently, we build a closure that does nothing but pass its argument
through to another function, this is rather wasteful and creates lots of
unnecessary closures.
2015-01-15 14:12:07 -08:00
Alex Crichton
6dc94f744e rollup merge of #21197: michaelwoerister/linestablesonly-forloop
Fixes #21067.
2015-01-15 14:12:06 -08:00
Alex Crichton
09c0342116 rollup merge of #21191: Zoxc/lto
Fixes #21184
2015-01-15 14:12:04 -08:00
Alex Crichton
782c391789 rollup merge of #21190: FlaPer87/remove_duplicated_func
small cleanup

r? @nikomatsakis
2015-01-15 14:12:03 -08:00
Alex Crichton
b64de7ea76 rollup merge of #21172: brson/tuple
This outer attribute doesn't actually apply to anything is seems
to be incorrect in what it is saying.
2015-01-15 14:12:03 -08:00
Alex Crichton
7c967afe02 rollup merge of #21170: Diggsey/issue-21058
While it's unstable and will probably be replaced or "reformed" at some point, it's useful in the mean time to be able to introspect the type system when debugging, and not be limited to sized types.

Fixes #21058
2015-01-15 14:12:02 -08:00
Alex Crichton
132850c818 rollup merge of #21169: aidanhs/aphs-contributing-style-link 2015-01-15 14:12:01 -08:00
Alex Crichton
ef5a4bb4cb rollup merge of #21168: aidanhs/aphs-doc-vec-heap
...to make it slightly clearer that there's not much point in boxing a vec.

On a different note, I read the contribution guidelines (https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#pull-request-procedure) which say I should update the copyright date for this file. But I can see that nobody else has done this so far this year, despite there being a fair number of commits.

Does that instruction need removing?
2015-01-15 14:12:00 -08:00
Alex Crichton
0419b4ab12 rollup merge of #21167: FlaPer87/coherence-impls
Fixes #21080

r? @nikomatsakis

[breaking-change]
2015-01-15 14:12:00 -08:00
Alex Crichton
7be39b0c03 rollup merge of #21164: richo/doc/servo-link
Tiny docfix to make the urls point to the canonical endpoint.
2015-01-15 14:11:59 -08:00
Alex Crichton
c3c47f5f55 rollup merge of #21161: japaric/ufcs-hash
expansion now uses `::std:#️⃣:Hash::hash(&*__self_0_0, __arg_0)` instead of
`(*__self_0_0).hash(__arg_0)`

closes #21160

r? @alexcrichton
2015-01-15 14:11:58 -08:00
Alex Crichton
9d4d5ca6e7 rollup merge of #21156: nick29581/plugins-fix
Closes #21130

r? @Aatch
2015-01-15 14:11:57 -08:00