Commit 98ae260d by Eric Botcazou Committed by Eric Botcazou

misc.c (gnat_init_options_struct): Parameterize errno support here instead of...

	* gcc-interface/misc.c (gnat_init_options_struct): Parameterize errno
	support here instead of...
	Do not set flag_delete_dead_exceptions to 1 unconditionally.
	(gnat_init_gcc_eh): Set flag_delete_dead_exceptions to 1.
	(gnat_init_gcc_fp): ...here.

From-SVN: r216731
parent 08477031
2014-10-27 Eric Botcazou <ebotcazou@adacore.com> 2014-10-27 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/misc.c (gnat_init_options_struct): Parameterize errno
support here instead of...
Do not set flag_delete_dead_exceptions to 1 unconditionally.
(gnat_init_gcc_eh): Set flag_delete_dead_exceptions to 1.
(gnat_init_gcc_fp): ...here.
2014-10-27 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/trans.c (gnat_to_gnu) <N_Real_Literal>: Minor tweaks. * gcc-interface/trans.c (gnat_to_gnu) <N_Real_Literal>: Minor tweaks.
2014-10-27 Eric Botcazou <ebotcazou@adacore.com> 2014-10-27 Eric Botcazou <ebotcazou@adacore.com>
......
...@@ -180,8 +180,10 @@ gnat_init_options_struct (struct gcc_options *opts) ...@@ -180,8 +180,10 @@ gnat_init_options_struct (struct gcc_options *opts)
/* Uninitialized really means uninitialized in Ada. */ /* Uninitialized really means uninitialized in Ada. */
opts->x_flag_zero_initialized_in_bss = 0; opts->x_flag_zero_initialized_in_bss = 0;
/* We can delete dead instructions that may throw exceptions in Ada. */ /* We don't care about errno in Ada and it causes __builtin_sqrt to
opts->x_flag_delete_dead_exceptions = 1; call the libm function rather than do it inline. */
opts->x_flag_errno_math = 0;
opts->frontend_set_flag_errno_math = true;
} }
/* Initialize for option processing. */ /* Initialize for option processing. */
...@@ -385,17 +387,21 @@ gnat_init_gcc_eh (void) ...@@ -385,17 +387,21 @@ gnat_init_gcc_eh (void)
right exception regions. */ right exception regions. */
using_eh_for_cleanups (); using_eh_for_cleanups ();
/* Turn on -fexceptions and -fnon-call-exceptions. The first one triggers /* Turn on -fexceptions, -fnon-call-exceptions and -fdelete-dead-exceptions.
the generation of the necessary exception tables. The second one is The first one triggers the generation of the necessary exception tables.
useful for two reasons: 1/ we map some asynchronous signals like SEGV to The second one is useful for two reasons: 1/ we map some asynchronous
exceptions, so we need to ensure that the insns which can lead to such signals like SEGV to exceptions, so we need to ensure that the insns
signals are correctly attached to the exception region they pertain to, which can lead to such signals are correctly attached to the exception
2/ Some calls to pure subprograms are handled as libcall blocks and then region they pertain to, 2/ some calls to pure subprograms are handled as
marked as "cannot trap" if the flag is not set (see emit_libcall_block). libcall blocks and then marked as "cannot trap" if the flag is not set
We should not let this be since it is possible for such calls to actually (see emit_libcall_block). We should not let this be since it is possible
raise in Ada. */ for such calls to actually raise in Ada.
The third one is an optimization that makes it possible to delete dead
instructions that may throw exceptions, most notably loads and stores,
as permitted in Ada. */
flag_exceptions = 1; flag_exceptions = 1;
flag_non_call_exceptions = 1; flag_non_call_exceptions = 1;
flag_delete_dead_exceptions = 1;
init_eh (); init_eh ();
} }
...@@ -418,11 +424,6 @@ gnat_init_gcc_fp (void) ...@@ -418,11 +424,6 @@ gnat_init_gcc_fp (void)
flag_trapping_math = 1; flag_trapping_math = 1;
else if (!global_options_set.x_flag_trapping_math) else if (!global_options_set.x_flag_trapping_math)
flag_trapping_math = 0; flag_trapping_math = 0;
/* We don't care in Ada about errno, and it causes __builtin_sqrt to
to call the libm function rather than do it inline. */
if (!global_options_set.x_flag_errno_math)
flag_errno_math = 0;
} }
/* Print language-specific items in declaration NODE. */ /* Print language-specific items in declaration NODE. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment