about summary refs log tree commit diff
path: root/src/libstd/task
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-08-22 21:06:25 -0700
committerbors <bors@rust-lang.org>2013-08-22 21:06:25 -0700
commit9e1e15209129dad9d3bba90450a43ffb2505df14 (patch)
tree13e3f799277ef2fe51b36dc6f83f989f465c87d0 /src/libstd/task
parent6f703770410aa6b333978f192ff00f2ce94b0523 (diff)
parent651f38258d72742c5961d646f865316f8ea1823c (diff)
downloadrust-9e1e15209129dad9d3bba90450a43ffb2505df14.tar.gz
rust-9e1e15209129dad9d3bba90450a43ffb2505df14.zip
auto merge of #8596 : vadimcn/rust/master, r=alexcrichton
This resolves issue #908.  

Notable changes:
-  On Windows, LLVM integrated assembler emits bad stack unwind tables when segmented stacks are enabled.  However, unwind info directives in the assembly output are correct, so we generate assembly first and then run it through an external assembler, just like it is already done for Android builds.

- Linker is invoked  via "g++" command instead of "gcc": g++ passes the appropriate magic parameters to the linker, which ensure correct registration of stack unwind tables in dynamic libraries.

Diffstat (limited to 'src/libstd/task')
-rw-r--r--src/libstd/task/mod.rs42
-rw-r--r--src/libstd/task/spawn.rs3
2 files changed, 19 insertions, 26 deletions
diff --git a/src/libstd/task/mod.rs b/src/libstd/task/mod.rs
index 5ffa03dec26..e76b81a904d 100644
--- a/src/libstd/task/mod.rs
+++ b/src/libstd/task/mod.rs
@@ -616,7 +616,7 @@ pub unsafe fn rekillable<U>(f: &fn() -> U) -> U {
 }
 
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_kill_unkillable_task() {
     use rt::test::*;
 
@@ -637,7 +637,7 @@ fn test_kill_unkillable_task() {
 }
 
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_kill_rekillable_task() {
     use rt::test::*;
 
@@ -658,7 +658,7 @@ fn test_kill_rekillable_task() {
     }
 }
 
-#[test] #[should_fail] #[ignore(cfg(windows))]
+#[test] #[should_fail]
 fn test_cant_dup_task_builder() {
     let mut builder = task();
     builder.unlinked();
@@ -679,7 +679,7 @@ fn test_cant_dup_task_builder() {
 fn block_forever() { let (po, _ch) = stream::<()>(); po.recv(); }
 
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_spawn_unlinked_unsup_no_fail_down() { // grandchild sends on a port
     use rt::test::run_in_newsched_task;
     do run_in_newsched_task {
@@ -698,7 +698,7 @@ fn test_spawn_unlinked_unsup_no_fail_down() { // grandchild sends on a port
     }
 }
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_spawn_unlinked_unsup_no_fail_up() { // child unlinked fails
     use rt::test::run_in_newsched_task;
     do run_in_newsched_task {
@@ -706,7 +706,7 @@ fn test_spawn_unlinked_unsup_no_fail_up() { // child unlinked fails
     }
 }
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_spawn_unlinked_sup_no_fail_up() { // child unlinked fails
     use rt::test::run_in_newsched_task;
     do run_in_newsched_task {
@@ -716,7 +716,7 @@ fn test_spawn_unlinked_sup_no_fail_up() { // child unlinked fails
     }
 }
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_spawn_unlinked_sup_fail_down() {
     use rt::test::run_in_newsched_task;
     do run_in_newsched_task {
@@ -729,7 +729,7 @@ fn test_spawn_unlinked_sup_fail_down() {
 }
 
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_spawn_linked_sup_fail_up() { // child fails; parent fails
     use rt::test::run_in_newsched_task;
     do run_in_newsched_task {
@@ -750,7 +750,7 @@ fn test_spawn_linked_sup_fail_up() { // child fails; parent fails
     }
 }
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_spawn_linked_sup_fail_down() { // parent fails; child fails
     use rt::test::run_in_newsched_task;
     do run_in_newsched_task {
@@ -767,7 +767,7 @@ fn test_spawn_linked_sup_fail_down() { // parent fails; child fails
     }
 }
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_spawn_linked_unsup_fail_up() { // child fails; parent fails
     use rt::test::run_in_newsched_task;
     do run_in_newsched_task {
@@ -780,7 +780,7 @@ fn test_spawn_linked_unsup_fail_up() { // child fails; parent fails
     }
 }
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_spawn_linked_unsup_fail_down() { // parent fails; child fails
     use rt::test::run_in_newsched_task;
     do run_in_newsched_task {
@@ -793,7 +793,7 @@ fn test_spawn_linked_unsup_fail_down() { // parent fails; child fails
     }
 }
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_spawn_linked_unsup_default_opts() { // parent fails; child fails
     use rt::test::run_in_newsched_task;
     do run_in_newsched_task {
@@ -812,7 +812,7 @@ fn test_spawn_linked_unsup_default_opts() { // parent fails; child fails
 // when the middle task exits successfully early before kill signals are sent.
 
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_spawn_failure_propagate_grandchild() {
     use rt::test::run_in_newsched_task;
     do run_in_newsched_task {
@@ -829,7 +829,7 @@ fn test_spawn_failure_propagate_grandchild() {
 }
 
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_spawn_failure_propagate_secondborn() {
     use rt::test::run_in_newsched_task;
     do run_in_newsched_task {
@@ -846,7 +846,7 @@ fn test_spawn_failure_propagate_secondborn() {
 }
 
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_spawn_failure_propagate_nephew_or_niece() {
     use rt::test::run_in_newsched_task;
     do run_in_newsched_task {
@@ -863,7 +863,7 @@ fn test_spawn_failure_propagate_nephew_or_niece() {
 }
 
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_spawn_linked_sup_propagate_sibling() {
     use rt::test::run_in_newsched_task;
     do run_in_newsched_task {
@@ -941,7 +941,6 @@ fn test_add_wrapper() {
 }
 
 #[test]
-#[ignore(cfg(windows))]
 fn test_future_result() {
     let mut result = None;
     let mut builder = task();
@@ -959,7 +958,7 @@ fn test_future_result() {
     assert_eq!(result.unwrap().recv(), Failure);
 }
 
-#[test] #[should_fail] #[ignore(cfg(windows))]
+#[test] #[should_fail]
 fn test_back_to_the_future_result() {
     let mut builder = task();
     builder.future_result(util::ignore);
@@ -977,7 +976,6 @@ fn test_try_success() {
 }
 
 #[test]
-#[ignore(cfg(windows))]
 fn test_try_fail() {
     match do try {
         fail!()
@@ -1159,7 +1157,6 @@ fn test_avoid_copying_the_body_unlinked() {
 
 #[ignore(reason = "linked failure")]
 #[test]
-#[ignore(cfg(windows))]
 #[should_fail]
 fn test_unkillable() {
     let (po, ch) = stream();
@@ -1195,7 +1192,6 @@ fn test_unkillable() {
 
 #[ignore(reason = "linked failure")]
 #[test]
-#[ignore(cfg(windows))]
 #[should_fail]
 fn test_unkillable_nested() {
     let (po, ch) = comm::stream();
@@ -1261,7 +1257,7 @@ fn test_simple_newsched_spawn() {
 }
 
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_spawn_watched() {
     use rt::test::run_in_newsched_task;
     do run_in_newsched_task {
@@ -1284,7 +1280,7 @@ fn test_spawn_watched() {
 }
 
 #[ignore(reason = "linked failure")]
-#[test] #[ignore(cfg(windows))]
+#[test]
 fn test_indestructible() {
     use rt::test::run_in_newsched_task;
     do run_in_newsched_task {
diff --git a/src/libstd/task/spawn.rs b/src/libstd/task/spawn.rs
index e0efc14a887..783d9c3e810 100644
--- a/src/libstd/task/spawn.rs
+++ b/src/libstd/task/spawn.rs
@@ -722,7 +722,6 @@ fn test_spawn_raw_simple() {
 }
 
 #[test]
-#[ignore(cfg(windows))]
 fn test_spawn_raw_unsupervise() {
     let opts = task::TaskOpts {
         linked: false,
@@ -736,7 +735,6 @@ fn test_spawn_raw_unsupervise() {
 }
 
 #[test]
-#[ignore(cfg(windows))]
 fn test_spawn_raw_notify_success() {
     let (notify_po, notify_ch) = comm::stream();
 
@@ -750,7 +748,6 @@ fn test_spawn_raw_notify_success() {
 }
 
 #[test]
-#[ignore(cfg(windows))]
 fn test_spawn_raw_notify_failure() {
     // New bindings for these
     let (notify_po, notify_ch) = comm::stream();