ipa-pure-const.c (local_pure_const): Do NORETURN discovery.
* ipa-pure-const.c (local_pure_const): Do NORETURN discovery. * testsuite/gcc.dg/noreturn-8.c: New testcase. From-SVN: r160124
This commit is contained in:
parent
a669ca47cb
commit
73add7fe29
4 changed files with 45 additions and 0 deletions
|
@ -1,3 +1,7 @@
|
|||
2010-06-01 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* ipa-pure-const.c (local_pure_const): Do NORETURN discovery.
|
||||
|
||||
2010-06-01 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* tree-cfgcleanup.c (fixup_noreturn_call): Break out from ...;
|
||||
|
|
|
@ -1362,6 +1362,27 @@ local_pure_const (void)
|
|||
&& !warn_suggest_attribute_pure
|
||||
&& skip)
|
||||
return 0;
|
||||
|
||||
/* First do NORETURN discovery. */
|
||||
if (!skip && !TREE_THIS_VOLATILE (current_function_decl)
|
||||
&& EDGE_COUNT (EXIT_BLOCK_PTR->preds) == 0)
|
||||
{
|
||||
if (warn_missing_noreturn
|
||||
&& !lang_hooks.missing_noreturn_ok_p (cfun->decl))
|
||||
warning_at (DECL_SOURCE_LOCATION (cfun->decl), OPT_Wmissing_noreturn,
|
||||
"function might be possible candidate "
|
||||
"for attribute %<noreturn%>");
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Function found to be noreturn: %s\n",
|
||||
lang_hooks.decl_printable_name (current_function_decl, 2));
|
||||
|
||||
/* Update declaration and reduce profile to executed once. */
|
||||
TREE_THIS_VOLATILE (current_function_decl) = 1;
|
||||
if (node->frequency > NODE_FREQUENCY_EXECUTED_ONCE)
|
||||
node->frequency = NODE_FREQUENCY_EXECUTED_ONCE;
|
||||
|
||||
changed = true;
|
||||
}
|
||||
l = analyze_function (node, false);
|
||||
|
||||
switch (l->pure_const_state)
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2010-05-31 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* testsuite/gcc.dg/noreturn-8.c: New testcase.
|
||||
|
||||
2010-05-31 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* testsuite/gcc.dg/lto/noreturn-1_1.c: Remove dg-do annotations.
|
||||
|
|
16
gcc/testsuite/gcc.dg/noreturn-8.c
Normal file
16
gcc/testsuite/gcc.dg/noreturn-8.c
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* { dg-do run } */
|
||||
/* { dg-options "-O2" } */
|
||||
void exit (int);
|
||||
void noreturn_autodetection_failed ();
|
||||
__attribute__ ((noinline))
|
||||
detect_noreturn ()
|
||||
{
|
||||
exit (0);
|
||||
}
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
detect_noreturn ();
|
||||
noreturn_autodetection_failed ();
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue