diff options
author | Andrew Pinski <andrew_pinski@playstation.sony.com> | 2009-11-06 19:10:07 +0000 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2009-11-06 11:10:07 -0800 |
commit | 87e928642892922f18f1e652f41d8fc9169ae757 (patch) | |
tree | b288755ba9280ce0ec7b701f671fe7611718d52a | |
parent | 2e3135726b941c5d1cd87d1905678a7533ed7d4d (diff) | |
download | gcc-87e928642892922f18f1e652f41d8fc9169ae757.zip gcc-87e928642892922f18f1e652f41d8fc9169ae757.tar.gz gcc-87e928642892922f18f1e652f41d8fc9169ae757.tar.bz2 |
re PR c++/41536 (always_inline does not work always with constructors)
2009-11-06 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR c++/41536
* optimize.c (maybe_clone_body): Copy DECL_ATTRIBUTES and
DECL_DISREGARD_INLINE_LIMITS also.
2009-11-06 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR c++/41536
* g++.dg/ext/always_inline-5.C: New test.
From-SVN: r153974
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/optimize.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/always_inline-5.C | 28 |
4 files changed, 41 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 21a2221..6d7fd34 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2009-11-06 Andrew Pinski <andrew_pinski@playstation.sony.com> + + PR c++/41536 + * optimize.c (maybe_clone_body): Copy DECL_ATTRIBUTES and + DECL_DISREGARD_INLINE_LIMITS also. + 2009-11-06 Jakub Jelinek <jakub@redhat.com> PR c++/41967 diff --git a/gcc/cp/optimize.c b/gcc/cp/optimize.c index 58d5b90..662bd4a 100644 --- a/gcc/cp/optimize.c +++ b/gcc/cp/optimize.c @@ -199,6 +199,8 @@ maybe_clone_body (tree fn) DECL_VISIBILITY (clone) = DECL_VISIBILITY (fn); DECL_VISIBILITY_SPECIFIED (clone) = DECL_VISIBILITY_SPECIFIED (fn); DECL_DLLIMPORT_P (clone) = DECL_DLLIMPORT_P (fn); + DECL_ATTRIBUTES (clone) = copy_list (DECL_ATTRIBUTES (fn)); + DECL_DISREGARD_INLINE_LIMITS (clone) = DECL_DISREGARD_INLINE_LIMITS (fn); /* Adjust the parameter names and locations. */ parm = DECL_ARGUMENTS (fn); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5ea0e42..1c31757 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-11-06 Andrew Pinski <andrew_pinski@playstation.sony.com> + + PR c++/41536 + * g++.dg/ext/always_inline-5.C: New test. + 2009-11-06 Jakub Jelinek <jakub@redhat.com> PR c++/41967 diff --git a/gcc/testsuite/g++.dg/ext/always_inline-5.C b/gcc/testsuite/g++.dg/ext/always_inline-5.C new file mode 100644 index 0000000..73caa09 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/always_inline-5.C @@ -0,0 +1,28 @@ +// { dg-do compile } +struct f +{ + inline f(void); + inline void f1(void); + int a; +}; + +inline __attribute__((always_inline)) f::f(void) +{ + a++; +} + +inline __attribute__((always_inline)) void f::f1(void) +{ + a++; +} + +void g(void) +{ + f a, b, c, d; + a.f1(); +} + +// f::f() should be inlined even at -O0 +// { dg-final { scan-assembler-not "_ZN1fC1Ev" } } +// Likewise for f::f1() +// { dg-final { scan-assembler-not "_ZN1f2f1Ev" } } |