- 29 12月, 2016 1 次提交
-
-
由 Nick Cameron 提交于
-
- 21 11月, 2016 1 次提交
-
-
由 Nick Cameron 提交于
-
- 09 5月, 2016 1 次提交
-
-
由 Alex Crichton 提交于
This commit is an implementation of [RFC 1513] which allows applications to alter the behavior of panics at compile time. A new compiler flag, `-C panic`, is added and accepts the values `unwind` or `panic`, with the default being `unwind`. This model affects how code is generated for the local crate, skipping generation of landing pads with `-C panic=abort`. [RFC 1513]: https://github.com/rust-lang/rfcs/blob/master/text/1513-less-unwinding.md Panic implementations are then provided by crates tagged with `#![panic_runtime]` and lazily required by crates with `#![needs_panic_runtime]`. The panic strategy (`-C panic` value) of the panic runtime must match the final product, and if the panic strategy is not `abort` then the entire DAG must have the same panic strategy. With the `-C panic=abort` strategy, users can expect a stable method to disable generation of landing pads, improving optimization in niche scenarios, decreasing compile time, and decreasing output binary size. With the `-C panic=unwind` strategy users can expect the existing ability to isolate failure in Rust code from the outside world. Organizationally, this commit dismantles the `sys_common::unwind` module in favor of some bits moving part of it to `libpanic_unwind` and the rest into the `panicking` module in libstd. The custom panic runtime support is pretty similar to the custom allocator support with the only major difference being how the panic runtime is injected (takes the `-C panic` flag into account).
-
- 29 3月, 2016 1 次提交
-
-
由 Björn Steinbrink 提交于
When reuing a definition across codegen units, we obviously cannot use internal linkage, but using external linkage means that we can end up with multiple conflicting definitions of a single symbol across multiple crates. Since the definitions should all be equal semantically, we can use weak_odr linkage to resolve the situation. Fixes #32518
-
- 11 2月, 2016 1 次提交
-
-
由 Björn Steinbrink 提交于
LLVM's memory dependence analysis doesn't properly account for calls that could unwind and thus effectively act as a branching point. This can lead to stores that are only visible when the call unwinds being removed, possibly leading to calls to drop() functions with b0rked memory contents. As there is no fix for this in LLVM yet and we want to keep compatibility to current LLVM versions anyways, we have to workaround this bug by omitting the noalias attribute on &mut function arguments. Benchmarks suggest that the performance loss by this change is very small. Thanks to @RalfJung for pushing me towards not removing too many noalias annotations and @alexcrichton for helping out with the test for this bug. Fixes #29485
-
- 15 1月, 2016 1 次提交
-
-
由 Michael Wu 提交于
-
- 25 4月, 2015 1 次提交
-
-
由 Sean Patrick Santos 提交于
-
- 24 4月, 2015 2 次提交
-
-
由 Sean Patrick Santos 提交于
-
由 Sean Patrick Santos 提交于
Functional changes for associated constants. Cross-crate usage of associated constants is not yet working.
-
- 24 3月, 2015 1 次提交
-
-
由 Brian Anderson 提交于
Now that features must be declared expanded source often does not compile. This adds 'pretty-expanded' to a bunch of test cases that still work.
-
- 16 3月, 2015 2 次提交
-
-
由 Tamir Duberstein 提交于
Closes #16922.
-
由 Tamir Duberstein 提交于
-
- 31 1月, 2015 1 次提交
-
-
由 Alex Crichton 提交于
Previously if --extern was specified it would not override crates in the standard distribution, leading to issues like #21771. This commit alters the behavior such that if --extern is passed then it will always override any other choice of crates and no previous match will be used (unless it is the same path as --extern). Closes #21771
-
- 08 1月, 2015 1 次提交
-
-
由 Alex Crichton 提交于
-
- 05 1月, 2015 1 次提交
-
-
由 Huon Wilson 提交于
-
- 02 1月, 2015 1 次提交
-
-
由 Jorge Aparicio 提交于
Closes #17732 Closes #18819 Closes #19479 Closes #19631 Closes #19632 Closes #19850 Closes #19883 Closes #20005 Closes #20009 Closes #20389
-
- 25 8月, 2014 1 次提交
-
-
由 Alex Crichton 提交于
The privacy pass of the compiler was previously not taking into account the privacy of foreign items, or bindings to external functions. This commit fixes this oversight by encoding the visibility of foreign items into the metadata for each crate. Any code relying on this will start to fail to compile and the bindings must be marked with `pub` to indicate that they can be used externally. Closes #16725 [breaking-change]
-
- 16 5月, 2014 1 次提交
-
-
由 Felix S. Klock II 提交于
Each test works by rendering the flowgraph for the last identified block we see in expanded pretty-printed output, and comparing it (via `diff`) against a checked in "foo.dot-expected.dot" file. Each test post-processes the output to remove NodeIds ` (id=NUM)` so that the expected output is somewhat stable (or at least independent of how we assign NodeIds) and easier for a human to interpret when looking at the expected output file itself. ---- Test writing style notes: I usually tried to write the tests in a way that would avoid duplicate labels in the output rendered flow graph, when possible. The tests that have string literals "unreachable" in the program text are deliberately written that way to remind the reader that the unreachable nodes in the resulting graph are not an error in the control flow computation, but rather a natural consequence of its construction.
-
- 07 4月, 2014 1 次提交
-
-
由 Alex Crichton 提交于
-
- 21 3月, 2014 2 次提交
-
-
由 Alex Crichton 提交于
-
由 Daniel Fagnan 提交于
Signed-off-by: NDaniel Fagnan <dnfagnan@gmail.com>
-
- 08 2月, 2014 1 次提交
-
-
由 Derek Guenther 提交于
-
- 23 12月, 2013 1 次提交
-
-
由 Andreas Neuhaus 提交于
-
- 13 12月, 2013 1 次提交
-
-
由 Jack Moffitt 提交于
-
- 30 11月, 2013 1 次提交
-
-
由 Alex Crichton 提交于
This infrastructure is meant to support runnings tests that involve various interesting interdependencies about the types of crates being linked or possibly interacting with C libraries. The goal of these make tests is to not restrict them to a particular test runner, but allow each test to run its own tests. To this end, there is a new src/test/run-make directory which has sub-folders of tests. Each test requires a `Makefile`, and running the tests constitues simply running `make` inside the directory. The new target is `check-stageN-rmake`. These tests will have the destination directory (as TMPDIR) and the local rust compiler (as RUSTC) passed along to them. There is also some helpful cross-platform utilities included in src/test/run-make/tools.mk to aid with compiling C programs and running them. The impetus for adding this new test suite is to allow various interesting forms of testing rust linkage. All of the tests initially added are various flavors of compiling Rust and C with one another as well as just making sure that rust linkage works in general. Closes #10434
-