diff options
author | Mark Mitchell <mark@codesourcery.com> | 2003-04-29 03:24:27 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2003-04-29 03:24:27 +0000 |
commit | a833faa5999c552d5e87b36691732e7f338c5ce1 (patch) | |
tree | 37410dac5d69f16d8ad0eb350980071c1f87900a | |
parent | 3e1be8c1b1da6e8a423260c65cdaaec64fa37ea7 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Winline-1.C | 10 | ||||
-rw-r--r-- | gcc/tree-inline.c | 22 |
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; |