aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2003-04-29 03:24:27 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2003-04-29 03:24:27 +0000
commita833faa5999c552d5e87b36691732e7f338c5ce1 (patch)
tree37410dac5d69f16d8ad0eb350980071c1f87900a
parent3e1be8c1b1da6e8a423260c65cdaaec64fa37ea7 (diff)
downloadgcc-a833faa5999c552d5e87b36691732e7f338c5ce1.zip
gcc-a833faa5999c552d5e87b36691732e7f338c5ce1.tar.gz
gcc-a833faa5999c552d5e87b36691732e7f338c5ce1.tar.bz2
re PR c++/10180 (gcc fails to warn about non-inlined function)
PR c++/10180 * tree-inline.c (expand_call_inline): Call push_srcloc when encountering EXPR_WITH_FILE_LOCATION. Honor warn_inline. PR c++/10180 * g++.dg/warn/Winline-1.C: New test. From-SVN: r66202
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/warn/Winline-1.C10
-rw-r--r--gcc/tree-inline.c22
4 files changed, 42 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 679c0be..c848eba 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2003-04-28 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/10180
+ * tree-inline.c (expand_call_inline): Call push_srcloc when
+ encountering EXPR_WITH_FILE_LOCATION. Honor warn_inline.
+
2003-04-28 Mike Stump <mrs@apple.com>
* gdbinit.in: Update to reflect new identifier structure.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ccd7e52..b0d8e75 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2003-04-28 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/10180
+ * g++.dg/warn/Winline-1.C: New test.
+
2003-04-28 Jakub Jelinek <jakub@redhat.com>
* gcc.c-torture/execute/string-opt-19.c: New test.
diff --git a/gcc/testsuite/g++.dg/warn/Winline-1.C b/gcc/testsuite/g++.dg/warn/Winline-1.C
new file mode 100644
index 0000000..2f8b39c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Winline-1.C
@@ -0,0 +1,10 @@
+// { dg-options "-Winline -O2" }
+
+static inline int foo(int x); // { dg-warning "" }
+
+int main()
+{
+ return(foo(17)); // { dg-warning "" }
+}
+
+inline int foo(int x) { return(x); }
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 22298a0..3a8adc5 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -1139,6 +1139,19 @@ expand_call_inline (tp, walk_subtrees, data)
abort ();
#endif /* INLINER_FOR_JAVA */
}
+ else if (TREE_CODE (t) == EXPR_WITH_FILE_LOCATION)
+ {
+ /* We're walking the subtree directly. */
+ *walk_subtrees = 0;
+ /* Update the source position. */
+ push_srcloc (EXPR_WFL_FILENAME (t), EXPR_WFL_LINENO (t));
+ walk_tree (&EXPR_WFL_NODE (t), expand_call_inline, data,
+ id->tree_pruner);
+ /* Restore the original source position. */
+ pop_srcloc ();
+
+ return NULL_TREE;
+ }
if (TYPE_P (t))
/* Because types were not copied in copy_body, CALL_EXPRs beneath
@@ -1173,7 +1186,14 @@ expand_call_inline (tp, walk_subtrees, data)
if ((!flag_unit_at_a_time || !DECL_SAVED_TREE (fn)
|| !cgraph_global_info (fn)->inline_once)
&& !inlinable_function_p (fn, id, 0))
- return NULL_TREE;
+ {
+ if (warn_inline && DECL_INLINE (fn))
+ {
+ warning_with_decl (fn, "inlining failed in call to `%s'");
+ warning ("called from here");
+ }
+ return NULL_TREE;
+ }
if (! (*lang_hooks.tree_inlining.start_inlining) (fn))
return NULL_TREE;