aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn David Anglin <danglin@gcc.gnu.org>2017-01-28 18:01:22 +0000
committerJohn David Anglin <danglin@gcc.gnu.org>2017-01-28 18:01:22 +0000
commit9efc84e45e6a0e840b10646574b24403f9c3ea57 (patch)
tree72543037c4cc1a0b0c42bf85ca5065a5595037bf
parent4bfbe3ae518d6c0f25ae812eafe09b5fc5358021 (diff)
downloadgcc-9efc84e45e6a0e840b10646574b24403f9c3ea57.zip
gcc-9efc84e45e6a0e840b10646574b24403f9c3ea57.tar.gz
gcc-9efc84e45e6a0e840b10646574b24403f9c3ea57.tar.bz2
re PR testsuite/70583 (FAIL: g++.old-deja/g++.abi/vtable2.C -std=gnu++98 execution test)
PR testsuite/70583 * g++.old-deja/g++.abi/vtable2.C: Adjust CMP_VPTR define on hppa. From-SVN: r245007
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.old-deja/g++.abi/vtable2.C16
2 files changed, 18 insertions, 1 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b689854..d003ae4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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.
diff --git a/gcc/testsuite/g++.old-deja/g++.abi/vtable2.C b/gcc/testsuite/g++.old-deja/g++.abi/vtable2.C
index b64f0fc..3022875 100644
--- a/gcc/testsuite/g++.old-deja/g++.abi/vtable2.C
+++ b/gcc/testsuite/g++.old-deja/g++.abi/vtable2.C
@@ -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 ()
{