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] |
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] |