This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[IFUNC]: Add tests for IFUNC member function with template


Hi,

I am checking this patch into ifunc branch to add tests for IFUNC member
function with template.


H.J.
---
Index: ChangeLog.ifunc
===================================================================
--- ChangeLog.ifunc	(revision 149265)
+++ ChangeLog.ifunc	(working copy)
@@ -1,5 +1,15 @@
 2009-07-05  H.J. Lu  <hongjiu.lu@intel.com>
 
+	* g++.dg/torture/ifunc-16.C: Add function name to scan-assembler.
+	* g++.dg/torture/ifunc-22.C: Likewise.
+
+	* g++.dg/torture/ifunc-21.C: Swap scan-assembler.
+
+	* g++.dg/torture/ifunc-24.C: New.
+	* g++.dg/torture/ifunc-25.C: Likewise.
+
+2009-07-05  H.J. Lu  <hongjiu.lu@intel.com>
+
 	* g++.dg/torture/ifunc-21.C: New.
 	* g++.dg/torture/ifunc-22.C: Likewise.
 	* g++.dg/torture/ifunc-23.C: Likewise.
Index: g++.dg/torture/ifunc-16.C
===================================================================
--- g++.dg/torture/ifunc-16.C	(revision 149265)
+++ g++.dg/torture/ifunc-16.C	(working copy)
@@ -43,6 +43,6 @@ ifunc::bar (float x)
 /* { dg-final { scan-assembler-not ".type\[ 	\]\+_ZN5ifunc3fooEi, .function" } } */
 /* { dg-final { scan-assembler-not ".type\[ 	\]\+_ZN5ifunc3fooEf, .function" } } */
 /* { dg-final { scan-assembler "(call|jmp)\[ 	\]\+_ZN5ifunc3fooEi" } } */
-/* { dg-final { scan-assembler "(call|jmp)\[ 	\]\+" } } */
+/* { dg-final { scan-assembler "(call|jmp)\[ 	\]\+_ZN5ifunc3fooEf" } } */
 /* { dg-final { scan-assembler ".type\[ 	\]\+_ZN5ifunc3fooEi, .gnu_indirect_function" } } */
 /* { dg-final { scan-assembler ".type\[ 	\]\+_ZN5ifunc3fooEf, .gnu_indirect_function" } } */
Index: g++.dg/torture/ifunc-21.C
===================================================================
--- g++.dg/torture/ifunc-21.C	(revision 149265)
+++ g++.dg/torture/ifunc-21.C	(working copy)
@@ -38,8 +38,8 @@ bar (float x)
   return ifunc::foo (x);
 }
 
-/* { dg-final { scan-assembler-not ".type\[ 	\]\+_ZN5ifunc3fooEf, .function" } } */
 /* { dg-final { scan-assembler-not ".type\[ 	\]\+_ZN5ifunc3fooEi, .function" } } */
+/* { dg-final { scan-assembler-not ".type\[ 	\]\+_ZN5ifunc3fooEf, .function" } } */
 /* { dg-final { scan-assembler "(call|jmp)\[ 	\]\+_ZN5ifunc3fooEi" } } */
 /* { dg-final { scan-assembler "(call|jmp)\[ 	\]\+_ZN5ifunc3fooEf" } } */
 /* { dg-final { scan-assembler ".type\[ 	\]\+_ZN5ifunc3fooEi, .gnu_indirect_function" } } */
Index: g++.dg/torture/ifunc-25.C
===================================================================
--- g++.dg/torture/ifunc-25.C	(revision 0)
+++ g++.dg/torture/ifunc-25.C	(revision 0)
@@ -0,0 +1,51 @@
+/* { dg-do compile { target i?86-*-linux* x86_64-*-linux* } } */
+/* { dg-options "-Wall -Wextra" } */
+
+template <class T1, class T2>
+class ifunc
+{
+private:
+  int foo1 (T1);
+  int foo1 (T2);
+
+public:
+  int foo (T1);
+  int foo (T2);
+};
+
+template <class T1, class T2>
+int
+__attribute__ ((ifunc))
+ifunc<T1, T2>::foo (T1)
+{ 
+  return &ifunc<T1, T2>::foo1;
+}
+
+template <class T1, class T2>
+int
+__attribute__ ((ifunc))
+ifunc<T1, T2>::foo (T2)
+{ 
+  return &ifunc<T1, T2>::foo1;
+}
+
+int
+bar (int x)
+{
+  ifunc<int, float> i;
+  return i.foo (x);
+}
+
+int
+bar (float x)
+{
+  ifunc<int, float> i;
+  return i.foo (x);
+}
+
+/* { dg-final { scan-assembler-not ".type\[ 	\]\+_ZN5ifuncIifE3fooEi, .function" } } */
+/* { dg-final { scan-assembler-not ".type\[ 	\]\+_ZN5ifuncIifE3fooEf, .function" } } */
+/* { dg-final { scan-assembler "(call|jmp)\[ 	\]\+_ZN5ifuncIifE3fooEi" } } */
+/* { dg-final { scan-assembler "(call|jmp)\[ 	\]\+_ZN5ifuncIifE3fooEf" } } */
+/* { dg-final { scan-assembler ".type\[ 	\]\+_ZN5ifuncIifE3fooEi, .gnu_indirect_function" } } */
+/* { dg-final { scan-assembler ".type\[ 	\]\+_ZN5ifuncIifE3fooEf, .gnu_indirect_function" } } */
Index: g++.dg/torture/ifunc-22.C
===================================================================
--- g++.dg/torture/ifunc-22.C	(revision 149265)
+++ g++.dg/torture/ifunc-22.C	(working copy)
@@ -43,6 +43,6 @@ ifunc::bar (float x)
 /* { dg-final { scan-assembler-not ".type\[ 	\]\+_ZN5ifunc3fooEi, .function" } } */
 /* { dg-final { scan-assembler-not ".type\[ 	\]\+_ZN5ifunc3fooEf, .function" } } */
 /* { dg-final { scan-assembler "(call|jmp)\[ 	\]\+_ZN5ifunc3fooEi" } } */
-/* { dg-final { scan-assembler "(call|jmp)\[ 	\]\+" } } */
+/* { dg-final { scan-assembler "(call|jmp)\[ 	\]\+_ZN5ifunc3fooEf" } } */
 /* { dg-final { scan-assembler ".type\[ 	\]\+_ZN5ifunc3fooEi, .gnu_indirect_function" } } */
 /* { dg-final { scan-assembler ".type\[ 	\]\+_ZN5ifunc3fooEf, .gnu_indirect_function" } } */
Index: g++.dg/torture/ifunc-24.C
===================================================================
--- g++.dg/torture/ifunc-24.C	(revision 0)
+++ g++.dg/torture/ifunc-24.C	(revision 0)
@@ -0,0 +1,49 @@
+/* { dg-do compile { target i?86-*-linux* x86_64-*-linux* } } */
+/* { dg-options "-Wall -Wextra" } */
+
+template <class T1, class T2>
+class ifunc
+{
+private:
+  static int foo1 (T1);
+  static int foo1 (T2);
+
+public:
+  static int foo (T1);
+  static int foo (T2);
+};
+
+template <class T1, class T2>
+int
+__attribute__ ((ifunc))
+ifunc<T1, T2>::foo (T1)
+{ 
+  return &ifunc::foo1;
+}
+
+template <class T1, class T2>
+int
+__attribute__ ((ifunc))
+ifunc<T1, T2>::foo (T2)
+{ 
+  return &ifunc::foo1;
+}
+
+int
+bar (int x)
+{
+  return ifunc<int, float>::foo (x);
+}
+
+int
+bar (float x)
+{
+  return ifunc<int, float>::foo (x);
+}
+
+/* { dg-final { scan-assembler-not ".type\[ 	\]\+_ZN5ifuncIifE3fooEf, .function" } } */
+/* { dg-final { scan-assembler-not ".type\[ 	\]\+_ZN5ifuncIifE3fooEi, .function" } } */
+/* { dg-final { scan-assembler "(call|jmp)\[ 	\]\+_ZN5ifuncIifE3fooEi" } } */
+/* { dg-final { scan-assembler "(call|jmp)\[ 	\]\+_ZN5ifuncIifE3fooEf" } } */
+/* { dg-final { scan-assembler ".type\[ 	\]\+_ZN5ifuncIifE3fooEi, .gnu_indirect_function" } } */
+/* { dg-final { scan-assembler ".type\[ 	\]\+_ZN5ifuncIifE3fooEf, .gnu_indirect_function" } } */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]