> Module name: gcc > Changes by: [EMAIL PROTECTED] 2003-12-29 02:42:17 > > Modified files: > gcc/cp : ChangeLog decl.c > gcc/testsuite : ChangeLog > Added files: > gcc/testsuite/g++.dg/opt: inline6.C > gcc/testsuite/g++.dg/parse: error9.C > > Log message: > PR c++/13081 > * decl.c (duplicate_decls): Preserve inline-ness when redeclaring > a function template. > > PR c++/13081 > * g++.dg/opt/inline6.C: New test.
backported to the gcc-3_3-branch, no regressions on an i486-linux bootstrap. Ok for the branch? 2003-12-28 Mark Mitchell <[EMAIL PROTECTED]> PR c++/13081 * decl.c (duplicate_decls): Preserve inline-ness when redeclaring a function template. PR c++/13081 * g++.dg/opt/inline6.C: New test. --- gcc/testsuite/g++.dg/opt/inline6.C +++ gcc/testsuite/g++.dg/opt/inline6.C 2003-12-29 09:12:36.000000000 +0000 @@ -0,0 +1,14 @@ +// PR c++/13081 +// { dg-options "-O2" } +// { dg-final { scan-assembler-not "foo" } } + +template<typename T> T foo(T); + +template<typename T> inline T foo(T t) +{ + return t; +} + +void bar (long& l) { + l = foo(l); +} --- gcc/cp/decl.c~ 2003-12-29 10:18:13.000000000 +0100 +++ gcc/cp/decl.c 2003-12-29 10:25:57.000000000 +0100 @@ -3737,6 +3737,14 @@ = DECL_SOURCE_LOCATION (newdecl); } + if (DECL_FUNCTION_TEMPLATE_P (newdecl)) + { + DECL_INLINE (DECL_TEMPLATE_RESULT (olddecl)) + |= DECL_INLINE (DECL_TEMPLATE_RESULT (newdecl)); + DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (olddecl)) + |= DECL_DECLARED_INLINE_P (DECL_TEMPLATE_RESULT (newdecl)); + } + return 1; }