aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99307.patch
blob: 9c936d4fadab156a1018c4b721015cbf1cf69aee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
2010-07-12  Yao Qi  <yao@codesourcery.com>

	Merge from Sourcery G++ 4.4:
 
	2009-10-06  Paul Brook  <paul@codesourcery.com>
	Issue #3869
	gcc/
	* target.h (gcc_target): Add warn_func_result.
	* target-def.h (TARGET_WARN_FUNC_RESULT): Define and use.
	* tree-cfg.h (execute_warn_function_return): Use
	targetm.warn_func_result.
	* config/arm/arm.c (TARGET_WARN_FUNC_RESULT): Define.
	(arm_warn_func_result): New function.

	gcc/testuite/
	 * gcc.target/arm/naked-3.c: New test.

 2010-07-10  Sandra Loosemore  <sandra@codesourcery.com>
 
 	Backport from mainline:

=== modified file 'gcc/config/arm/arm.c'
--- old/gcc/config/arm/arm.c	2010-07-29 16:58:56 +0000
+++ new/gcc/config/arm/arm.c	2010-07-30 13:58:02 +0000
@@ -214,6 +214,7 @@
 static int arm_issue_rate (void);
 static void arm_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED;
 static bool arm_allocate_stack_slots_for_args (void);
+static bool arm_warn_func_result (void);
 static const char *arm_invalid_parameter_type (const_tree t);
 static const char *arm_invalid_return_type (const_tree t);
 static tree arm_promoted_type (const_tree t);
@@ -378,6 +379,9 @@
 #undef TARGET_TRAMPOLINE_ADJUST_ADDRESS
 #define TARGET_TRAMPOLINE_ADJUST_ADDRESS arm_trampoline_adjust_address
 
+#undef TARGET_WARN_FUNC_RESULT
+#define TARGET_WARN_FUNC_RESULT arm_warn_func_result
+
 #undef TARGET_DEFAULT_SHORT_ENUMS
 #define TARGET_DEFAULT_SHORT_ENUMS arm_default_short_enums
 
@@ -2008,6 +2012,14 @@
   return !IS_NAKED (arm_current_func_type ());
 }
 
+static bool
+arm_warn_func_result (void)
+{
+  /* Naked functions are implemented entirely in assembly, including the
+     return sequence, so suppress warnings about this.  */
+  return !IS_NAKED (arm_current_func_type ());
+}
+
 
 /* Output assembler code for a block containing the constant parts
    of a trampoline, leaving space for the variable parts.

=== modified file 'gcc/target-def.h'
--- old/gcc/target-def.h	2010-03-24 20:44:48 +0000
+++ new/gcc/target-def.h	2010-07-30 13:58:02 +0000
@@ -212,6 +212,10 @@
 #define TARGET_EXTRA_LIVE_ON_ENTRY hook_void_bitmap
 #endif
 
+#ifndef TARGET_WARN_FUNC_RESULT
+#define TARGET_WARN_FUNC_RESULT hook_bool_void_true
+#endif
+
 #ifndef TARGET_ASM_FILE_START_APP_OFF
 #define TARGET_ASM_FILE_START_APP_OFF false
 #endif
@@ -1020,6 +1024,7 @@
   TARGET_EMUTLS,				\
   TARGET_OPTION_HOOKS,				\
   TARGET_EXTRA_LIVE_ON_ENTRY,			\
+  TARGET_WARN_FUNC_RESULT,			\
   TARGET_UNWIND_TABLES_DEFAULT,			\
   TARGET_HAVE_NAMED_SECTIONS,			\
   TARGET_HAVE_SWITCHABLE_BSS_SECTIONS,		\

=== modified file 'gcc/target.h'
--- old/gcc/target.h	2010-03-27 10:27:39 +0000
+++ new/gcc/target.h	2010-07-30 13:58:02 +0000
@@ -1171,6 +1171,10 @@
      bits in the bitmap passed in. */
   void (*live_on_entry) (bitmap);
 
+  /* Return false if warnings about missing return statements or suspect
+     noreturn attributes should be suppressed for the current function.  */
+  bool (*warn_func_result) (void);
+
   /* True if unwinding tables should be generated by default.  */
   bool unwind_tables_default;
 

=== added file 'gcc/testsuite/gcc.target/arm/naked-3.c'
--- old/gcc/testsuite/gcc.target/arm/naked-3.c	1970-01-01 00:00:00 +0000
+++ new/gcc/testsuite/gcc.target/arm/naked-3.c	2010-07-30 13:58:02 +0000
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wall" } */
+/* Check that we do not get warnings about missing return statements
+   or bogus looking noreturn functions.  */
+int __attribute__((naked))
+foo(void)
+{
+  __asm__ volatile ("mov r0, #1\r\nbx lr\n");
+}
+
+int __attribute__((naked,noreturn))
+bar(void)
+{
+  __asm__ volatile ("frob r0\n");
+}

=== modified file 'gcc/tree-cfg.c'
--- old/gcc/tree-cfg.c	2010-03-16 12:31:38 +0000
+++ new/gcc/tree-cfg.c	2010-07-30 13:58:02 +0000
@@ -47,6 +47,7 @@
 #include "value-prof.h"
 #include "pointer-set.h"
 #include "tree-inline.h"
+#include "target.h"
 
 /* This file contains functions for building the Control Flow Graph (CFG)
    for a function tree.  */
@@ -7092,6 +7093,9 @@
   edge e;
   edge_iterator ei;
 
+  if (!targetm.warn_func_result())
+    return 0;
+
   /* If we have a path to EXIT, then we do return.  */
   if (TREE_THIS_VOLATILE (cfun->decl)
       && EDGE_COUNT (EXIT_BLOCK_PTR->preds) > 0)