From 08c6cbd2f55bbb046e5ec82a8933fbd662b4009d Mon Sep 17 00:00:00 2001
From: sandra <sandra@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 25 Jul 2012 18:08:06 +0000
Subject: 2012-07-25  Sandra Loosemore  <sandra@codesourcery.com> 	   
 Paul Brook  <paul@codesourcery.com>

	PR target/53633

	gcc/
	* target.def (warn_func_return): New hook.
	* doc/tm.texi.in (TARGET_WARN_FUNC_RETURN): New hook.
	* doc/tm.texi: Regenerate.
	* doc/sourcebuild.texi (Effective-Target Keywords): Document
	naked_functions.
	* ipa-pure-const.c (warn_function_noreturn): Check
	targetm.warn_func_return.
	* tree-cfg.c (execute_warn_function_return): Likewise.
	* config/spu/spu.c (spu_warn_func_return): New.
	(TARGET_WARN_FUNC_RETURN): Define.
	* config/rx/rx.c (rx_warn_func_return): New.
	(TARGET_WARN_FUNC_RETURN): Define.
	* config/avr/avr.c (avr_warn_func_return): New.
	(TARGET_WARN_FUNC_RETURN): Define.
	* config/arm/arm.c (arm_warn_func_return): New.
	(TARGET_WARN_FUNC_RETURN): Define.
	* config/mcore/mcore.c (mcore_warn_func_return): New.
	(TARGET_WARN_FUNC_RETURN): Define.
	(saved_warn_return_type, saved_warn_return_type_count): Remove.
	(mcore_reorg, mcore_handle_naked_attribute): Remove warn_return hack.

	gcc/cp/
	* decl.c (finish_function): Check targetm.warn_func_return.

	gcc/testsuite/
	* lib/target-suports.exp (check_effective_target_naked_functions):
	New.
	* c-c++-common/pr53633.c: New test.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@189860 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/target.def | 9 +++++++++
 1 file changed, 9 insertions(+)

(limited to 'gcc/target.def')

diff --git a/gcc/target.def b/gcc/target.def
index c172673811e..bdbf68e7c53 100644
--- a/gcc/target.def
+++ b/gcc/target.def
@@ -2715,6 +2715,15 @@ DEFHOOK
  void, (struct hard_reg_set_container *),
  NULL)
 
+/* For targets that have attributes that can affect whether a
+   function's return statements need checking.  For instance a 'naked'
+   function attribute.  */
+DEFHOOK
+(warn_func_return,
+ "True if a function's return statements should be checked for matching the function's return type.  This includes checking for falling off the end of a non-void function.  Return false if no such check should be made.",
+ bool, (tree),
+ hook_bool_tree_true)
+
 /* Determine the type of unwind info to emit for debugging.  */
 DEFHOOK
 (debug_unwind_info,
-- 
cgit v1.2.1

