1. 29 12月, 2016 1 次提交
  2. 21 11月, 2016 1 次提交
  3. 09 5月, 2016 1 次提交
    • A
      rustc: Implement custom panic runtimes · 0ec321f7
      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).
      0ec321f7
  4. 29 3月, 2016 1 次提交
    • B
      Use weak_odr linkage when reusing definitions across codegen units · 22f45875
      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
      22f45875
  5. 11 2月, 2016 1 次提交
    • B
      Workaround LLVM optimizer bug by not marking &mut pointers as noalias · a17fb64f
      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
      a17fb64f
  6. 15 1月, 2016 1 次提交
  7. 25 4月, 2015 1 次提交
  8. 24 4月, 2015 2 次提交
  9. 24 3月, 2015 1 次提交
  10. 16 3月, 2015 2 次提交
  11. 31 1月, 2015 1 次提交
    • A
      rustc: Use --extern to always override · cf535a3b
      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
      cf535a3b
  12. 08 1月, 2015 1 次提交
  13. 05 1月, 2015 1 次提交
  14. 02 1月, 2015 1 次提交
  15. 25 8月, 2014 1 次提交
    • A
      rustc: Encode the visibility of foreign items · 1c76d559
      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]
      1c76d559
  16. 16 5月, 2014 1 次提交
    • F
      Unit tests for flowgraph pretty printing. · 3aad0e24
      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.
      3aad0e24
  17. 07 4月, 2014 1 次提交
  18. 21 3月, 2014 2 次提交
  19. 08 2月, 2014 1 次提交
  20. 23 12月, 2013 1 次提交
  21. 13 12月, 2013 1 次提交
  22. 30 11月, 2013 1 次提交
    • A
      Add a new run-make test directory · 6d6ccb75
      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
      6d6ccb75