aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-04-19 16:31:11 +0000
committerJakub Jelinek <jakub@redhat.com>2017-04-19 16:31:11 +0000
commitd4bae906af4041d274ead2b94061e158a916e9d5 (patch)
treecfd5b2937487c9f156d88138ac4df0d1d4be721d
parente3b046ace0bce4503fba2fa275ba489cddb5e285 (diff)
PR c++/80459
* c-c++-common/opaque-vector.c (SIZEOF_MAXINT): Define. (f): Don't test long double vectors if __SIZEOF_LONG_DOUBLE__ is not power of 2, or is more than 16 or more than SIZEOF_MAXINT. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@247001 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/c-c++-common/opaque-vector.c14
2 files changed, 17 insertions, 2 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 113506b6264..4c68324c1ff 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2017-04-19 Jakub Jelinek <jakub@redhat.com>
+ PR c++/80459
+ * c-c++-common/opaque-vector.c (SIZEOF_MAXINT): Define.
+ (f): Don't test long double vectors if __SIZEOF_LONG_DOUBLE__
+ is not power of 2, or is more than 16 or more than SIZEOF_MAXINT.
+
PR debug/80436
* g++.dg/opt/pr80436.C: New test.
diff --git a/gcc/testsuite/c-c++-common/opaque-vector.c b/gcc/testsuite/c-c++-common/opaque-vector.c
index bac3497be3e..ae4a9a84bbd 100644
--- a/gcc/testsuite/c-c++-common/opaque-vector.c
+++ b/gcc/testsuite/c-c++-common/opaque-vector.c
@@ -5,6 +5,11 @@
#define T_TEST(TYPE)
#endif
#define T(TYPE) B_TEST(TYPE) T_TEST(TYPE)
+#ifdef __SIZEOF_INT128__
+#define SIZEOF_MAXINT __SIZEOF_INT128__
+#else
+#define SIZEOF_MAXINT __SIZEOF_LONG_LONG__
+#endif
void f ()
{
@@ -15,8 +20,13 @@ void f ()
T_TEST(float)
T_TEST(double)
- /* Avoid trouble with non-power-of-two sizes. */
-#if !defined(__i386__) && !defined(__x86_64__) && !defined(__m68k__) && !defined(__ia64__) && !defined(__hppa__)
+ /* Avoid trouble with non-power-of-two sizes.
+ Also avoid trouble with long double larger than integral types. */
+#if !defined(__i386__) && !defined(__x86_64__) && !defined(__m68k__) \
+ && !defined(__ia64__) && !defined(__hppa__) \
+ && (__SIZEOF_LONG_DOUBLE__ & (__SIZEOF_LONG_DOUBLE__ - 1)) == 0 \
+ && __SIZEOF_LONG_DOUBLE__ <= 16 \
+ && __SIZEOF_LONG_DOUBLE__ <= SIZEOF_MAXINT
T_TEST(long double)
#endif
}