OSDN Git Service

2009-11-06 Andrew Pinski <andrew_pinski@playstation.sony.com>
authorpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 6 Nov 2009 19:10:07 +0000 (19:10 +0000)
committerpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 6 Nov 2009 19:10:07 +0000 (19:10 +0000)
        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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@153974 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/optimize.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/always_inline-5.C [new file with mode: 0644]

index 21a2221..6d7fd34 100644 (file)
@@ -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
index 58d5b90..662bd4a 100644 (file)
@@ -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);
index 5ea0e42..1c31757 100644 (file)
@@ -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 (file)
index 0000000..73caa09
--- /dev/null
@@ -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" } }