Re: [Bug c++/13081] [3.3/3.4 regression] forward template declarations in <complex> let inlining fail
> Module name: gcc
> Changes by: mmitchel@gcc.gnu.org 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 <mark@codesourcery.com>
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;
}
Reply to: