[D] Fix failing EH execution test on i386.

Turn off partitioning unless it was explicitly requested, as it doesn't
work with D exception chaining, where personality routines use LSDA to
determine whether two thrown exceptions are in the same context.

The following distills what was failing in the D testsuite.
```
try {
  try {
    fn();  // throws "1"
  }
  finally {
    throw new Exception("2");
  }
}
catch (Exception e) {
  assert(e.msg == "1");
  assert(e.next.msg == "2");
}
```

gcc/d/ChangeLog:

	PR d/87824
	* d-lang.cc (d_post_options): Disable implicit
	-forder-blocks-and-partition.

From-SVN: r267985
This commit is contained in:
Iain Buclaw 2019-01-16 20:40:21 +00:00 committed by Iain Buclaw
parent 15b93db9ca
commit e42589bd62
2 changed files with 12 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2019-01-16 Iain Buclaw <ibuclaw@gdcproject.org>
PR d/87824
* d-lang.cc (d_post_options): Disable implicit
-forder-blocks-and-partition.
2019-01-16 Iain Buclaw <ibuclaw@gdcproject.org>
* d-codegen.cc (build_typeof_null_value): New function.

View File

@ -725,6 +725,12 @@ d_post_options (const char ** fn)
global.params.useSwitchError = false;
}
/* Turn off partitioning unless it was explicitly requested, as it doesn't
work with D exception chaining, where EH handler uses LSDA to determine
whether two thrown exception are in the same context. */
if (!global_options_set.x_flag_reorder_blocks_and_partition)
global_options.x_flag_reorder_blocks_and_partition = 0;
/* Error about use of deprecated features. */
if (global.params.useDeprecated == DIAGNOSTICinform
&& global.params.warnings == DIAGNOSTICerror)