rust/src/libstd
bors d3c03d0987 Auto merge of #26569 - alexcrichton:msvc-llvm-update, r=brson
Now that LLVM has been updated, the only remaining roadblock to implementing
unwinding for MSVC is to fill out the runtime support in `std::rt::unwind::seh`.
This commit does precisely that, fixing up some other bits and pieces along the
way:

* The `seh` unwinding module now uses `RaiseException` to initiate a panic.
* The `rust_try.ll` file was rewritten for MSVC (as it's quite different) and is
  located at `rust_try_msvc_64.ll`, only included on MSVC builds for now.
* The personality function for all landing pads generated by LLVM is hard-wired
  to `__C_specific_handler` instead of the standard `rust_eh_personality` lang
  item. This is required to get LLVM to emit SEH unwinding information instead
  of DWARF unwinding information. This also means that on MSVC the
  `rust_eh_personality` function is entirely unused (but is defined as it's a
  lang item).

More details about how panicking works on SEH can be found in the
`rust_try_msvc_64.ll` or `seh.rs` files, but I'm always open to adding more
comments!

A key aspect of this PR is missing, however, which is that **unwinding is still
turned off by default for MSVC**. There is a [bug in llvm][llvm-bug] which
causes optimizations to inline enough landing pads that LLVM chokes. If the
compiler is optimized at `-O1` (where inlining isn't enabled) then it can
bootstrap with unwinding enabled, but when optimized at `-O2` (inlining is
enabled) then it hits a fatal LLVM error.

[llvm-bug]: https://llvm.org/bugs/show_bug.cgi?id=23884
2015-06-27 05:06:22 +00:00
..
collections Make align_of behave like min_align_of. 2015-06-24 17:00:43 -07:00
ffi Add comment about stabilizing CString::from_ptr 2015-06-17 09:07:17 -07:00
io Auto merge of #26514 - tshepang:repetition, r=Gankro 2015-06-23 02:32:44 +00:00
net Auto merge of #26457 - meqif:master, r=alexcrichton 2015-06-21 08:20:36 +00:00
num std: Split the std_misc feature 2015-06-17 09:06:59 -07:00
os std: Stabilize a number of new fs features 2015-06-09 17:44:13 -07:00
prelude Rollup merge of #25224 - brson:stddoc, r=steveklabnik 2015-05-13 00:52:48 -04:00
rand libstd/rand/os.rs: Remove a tiny bit of duplicated code 2015-06-25 23:37:28 +00:00
rt msvc: Implement runtime support for unwinding 2015-06-25 09:33:15 -07:00
sync More test fixes and fallout of stability changes 2015-06-17 09:07:17 -07:00
sys Auto merge of #26219 - Veedrac:patch-1, r=alexcrichton 2015-06-23 22:03:04 +00:00
thread Fix libstd tests 2015-06-18 10:51:31 -07:00
time std: Redesign Duration, implementing RFC 1040 2015-05-13 17:50:58 -07:00
array.rs rustdoc: Support for "array" primitive 2015-03-23 14:02:34 -07:00
ascii.rs std: Split the std_misc feature 2015-06-17 09:06:59 -07:00
bool.rs Strip all leading/trailing newlines 2015-03-15 09:08:21 -07:00
dynamic_lib.rs std: Split the std_misc feature 2015-06-17 09:06:59 -07:00
env.rs std: Deprecate the exit_status feature 2015-06-17 09:07:17 -07:00
error.rs std: Hide some internal functions more aggressively 2015-06-17 09:07:17 -07:00
fs.rs std: Stabilize a number of new fs features 2015-06-09 17:44:13 -07:00
lib.rs Fix capitalization in std docs 2015-06-24 14:33:41 -07:00
macros.rs Fix docs for column/line 2015-06-19 11:22:37 -04:00
panicking.rs Fix logic in panic printing with no stderr 2015-06-20 19:54:15 -07:00
path.rs Auto merge of #25736 - tshepang:path-nits, r=steveklabnik 2015-05-25 01:56:48 +00:00
process.rs std::process: Remove helper function pwd_cmd from test module 2015-06-22 00:55:42 -04:00
rtdeps.rs std: Split the std_misc feature 2015-06-17 09:06:59 -07:00
thunk.rs std: Deprecate the thunk module 2015-06-17 09:07:17 -07:00
tuple.rs tuple.rs: Document more traits implemented by tuples if their components do 2015-06-23 11:18:08 +02:00
unit.rs grandfathered -> rust1 2015-01-23 21:48:20 -08:00