re PR testsuite/70583 (FAIL: g++.old-deja/g++.abi/vtable2.C -std=gnu++98 execution...
authorJohn David Anglin <danglin@gcc.gnu.org>
Sat, 28 Jan 2017 18:01:22 +0000 (18:01 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Sat, 28 Jan 2017 18:01:22 +0000 (18:01 +0000)
PR testsuite/70583
* g++.old-deja/g++.abi/vtable2.C: Adjust CMP_VPTR define on hppa.

From-SVN: r245007

gcc/testsuite/ChangeLog
gcc/testsuite/g++.old-deja/g++.abi/vtable2.C

index b68985486e3425859a8e9046f322bdc145056b7f..d003ae4e34edb850091a53f046be0191dce181a0 100644 (file)
@@ -1,5 +1,8 @@
 2017-01-28  John David Anglin  <danglin@gcc.gnu.org>
 
+       PR testsuite/70583
+       * g++.old-deja/g++.abi/vtable2.C: Adjust CMP_VPTR define on hppa.
+
        * gnat.dg/debug7.adb: Skip on hppa*-*-hpux*.
        * gnat.dg/debug9.adb: Likewise.
 
index b64f0fc257ae27853e2c181e8baa08243b0c7a20..30228756f12752d64be676761c2fde47825c432b 100644 (file)
@@ -142,10 +142,24 @@ extern "C" {
 #define INC_VDATA(A,N) ((A) += 2*(N))
 #endif
 #else
+// HPPA uses function pointers but they point to function descriptors.
+#if defined __hppa__
+#ifdef __hpux__
+#ifdef _LP64
+#define CMP_VPTR(A, B) (*(unsigned long *)(*(A)+16) == *(unsigned long *)((unsigned long)(B)+16))
+#else
+#define CMP_VPTR(A, B) (*(A) == (ptrdiff_t)(B))
+#endif /* _LP64 */
+#else
+extern "C" { unsigned int __canonicalize_funcptr_for_compare (void*); }
+#define CMP_VPTR(A, B) (__canonicalize_funcptr_for_compare(*(void **)A) == __canonicalize_funcptr_for_compare((void *)B))
+#endif /* __hpux__ */
+#else
 #define CMP_VPTR(A, B) (*(A) == (ptrdiff_t)(B))
+#endif /* __hppa__ */
 #define INC_VPTR(A)    ((A) += 1)
 #define INC_VDATA(A,N) ((A) += (N))
-#endif
+#endif /* __ia64__ */
 
 int main ()
 {