On 5/7/20 4:03 AM, Jakub Jelinek wrote:
Hi!

On Wed, May 06, 2020 at 02:14:03PM -0400, Nathan Sidwell wrote:
--- /dev/null
+++ w/gcc/testsuite/g++.dg/ext/attr-parm-1.C
@@ -0,0 +1,7 @@
+// { dg-do compile { target { i?86-*-* x86_64-*-* } } }
+// { dg-options -m32 }
+// PR 94946
+class a {
+  template <typename b> a(b (*)());
+  template <typename b> a(b(__attribute__((fastcall)) *c)());
+};

The testcase in the current form doesn't FAIL without the patch on
x86_64-linux unless also testing with -m32; as that the 64-bit testing
on that target is probably way more common, and we can use also attributes

yeah, that was what I was trying to cover originally.  Thanks for fixing up!

that FAIL without the patch with -m64, the following patch adjusts the
test, so that it FAILs without the patch for both -m64 and -m32 (but not
-mx32) and PASSes with the patch.  Ok for trunk/10.2?
And for 9.4 with additional removal of the forgotten dg-options -m32 line?

Regtested on x86_64-linux and i686-linux.

2020-05-06  Jakub Jelinek  <ja...@redhat.com>

        PR c++/94946
        * g++.dg/ext/attr-parm-1.C: Enable the test also for lp64 x86, use
        sysv_abi and ms_abi attributes in that case instead of fastcall and
        no attribute.

--- gcc/testsuite/g++.dg/ext/attr-parm-1.C.jj   2020-05-06 22:48:46.215419942 
+0200
+++ gcc/testsuite/g++.dg/ext/attr-parm-1.C      2020-05-06 22:50:40.117727005 
+0200
@@ -1,6 +1,11 @@
-// { dg-do compile { target { { i?86-*-* x86_64-*-* } && ia32 } } }
+// { dg-do compile { target { { i?86-*-* x86_64-*-* } && { ia32 || lp64 } } } }
  // PR 94946
  class a {
+#ifdef __LP64__
+  template <typename b> a(b(__attribute__((sysv_abi)) *c)());
+  template <typename b> a(b(__attribute__((ms_abi)) *c)());
+#else
    template <typename b> a(b (*)());
    template <typename b> a(b(__attribute__((fastcall)) *c)());
+#endif
  };


        Jakub



--
Nathan Sidwell

Reply via email to