diff options
author | Giovanni Bajo <giovannibajo@gcc.gnu.org> | 2004-10-07 08:36:28 +0000 |
---|---|---|
committer | Giovanni Bajo <giovannibajo@gcc.gnu.org> | 2004-10-07 08:36:28 +0000 |
commit | 09ebcffa1928d6373895c99e3c534f74f3cd126e (patch) | |
tree | db6e52deb02c1ade7f1b93d2927831bdd5399fba /gcc | |
parent | 22d66adf5d3947f66386084992dc76ccb4b391d6 (diff) | |
download | gcc-09ebcffa1928d6373895c99e3c534f74f3cd126e.zip gcc-09ebcffa1928d6373895c99e3c534f74f3cd126e.tar.gz gcc-09ebcffa1928d6373895c99e3c534f74f3cd126e.tar.bz2 |
re PR c++/17115 (-Winline does not respect __attribute__((__noinline__)))
PR c++/17115
* tree-inline.c (expand_call_inline): Do not warn for functions
marked with attribute noinline.
PR c++/17115
* g++.dg/warn/Winline-4.C: New test.
From-SVN: r88678
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Winline-4.C | 17 | ||||
-rw-r--r-- | gcc/tree-inline.c | 3 |
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b00fad9..7ac6b4a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-10-07 Giovanni Bajo <giovannibajo@gcc.gnu.org> + + PR c++/17115 + * tree-inline.c (expand_call_inline): Do not warn for functions + marked with attribute noinline. + 2004-10-07 Eric Botcazou <ebotcazou@libertysurf.fr> PR target/17862 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4858269..1087adb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-10-07 Giovanni Bajo <giovannibajo@gcc.gnu.org> + + PR c++/17115 + * g++.dg/warn/Winline-4.C: New test. + 2004-10-07 Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de> * gcc.c-torture/compile/20041007-1.c: New test. diff --git a/gcc/testsuite/g++.dg/warn/Winline-4.C b/gcc/testsuite/g++.dg/warn/Winline-4.C new file mode 100644 index 0000000..188ab5a --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Winline-4.C @@ -0,0 +1,17 @@ +// { dg-do compile } +// { dg-options "-O2 -Winline" } +// Origin: <markus at oberhumer dot com> +// PR 17115: We should not emit -Winline warning for functions marked with +// noinline + +struct Foo { + __attribute__((noinline)) int a(int r) { return r & 1; } + virtual __attribute__((noinline)) int b(int r) { return r & 1; } + static __attribute__((noinline)) int c(int r) { return r & 1; } +}; + +int bar(int r) { + Foo f; + int k = 1; k &= f.a(r); k &= f.b(r); k &= f.a(r); + return k; +} diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 38fa455..0583eb4 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -1475,7 +1475,8 @@ expand_call_inline (tree *tp, int *walk_subtrees, void *data) } else if (warn_inline && DECL_DECLARED_INLINE_P (fn) && !DECL_IN_SYSTEM_HEADER (fn) - && strlen (reason)) + && strlen (reason) + && !lookup_attribute ("noinline", DECL_ATTRIBUTES (fn))) { warning ("%Jinlining failed in call to '%F': %s", fn, fn, reason); warning ("called from here"); |