On Wed, May 21, 2014 at 04:46:14PM +0200, Jakub Jelinek wrote:
> Here is a testcase that (IMHO, not tested with your patch) should
> test various boundary cases that shouldn't result in undefined behavior.
> I've tried to keep it portable across various architectures, assumes
> primarily two's complement and (likely) only supports binary and decimal
> floating point formats.
> Seems _Decimal{32,64,128} is not convertible
> to/from int128 right now, so that is disabled in the test for now.

Here is updated testcase + some also for the invalid values.
Compared to the previous testcase, this one I've actually tested with
Marek's patch, there were several issues.
On x86_64-linux, it mostly passes, with a few FAILs:
unix/-m32
FAIL: c-c++-common/ubsan/float-cast-overflow-10.c  -O2 -flto 
-fno-use-linker-plugin -flto-partition=none  (internal compiler error)
FAIL: c-c++-common/ubsan/float-cast-overflow-10.c  -O2 -flto 
-fno-use-linker-plugin -flto-partition=none  (test for excess errors)
FAIL: c-c++-common/ubsan/float-cast-overflow-10.c  -O2 -flto 
-fuse-linker-plugin -fno-fat-lto-objects  (internal compiler error)
FAIL: c-c++-common/ubsan/float-cast-overflow-10.c  -O2 -flto 
-fuse-linker-plugin -fno-fat-lto-objects  (test for excess errors)
FAIL: c-c++-common/ubsan/float-cast-overflow-7.c  -O2 -flto 
-fno-use-linker-plugin -flto-partition=none  (internal compiler error)
FAIL: c-c++-common/ubsan/float-cast-overflow-7.c  -O2 -flto 
-fno-use-linker-plugin -flto-partition=none  (test for excess errors)
FAIL: c-c++-common/ubsan/float-cast-overflow-7.c  -O2 -flto -fuse-linker-plugin 
-fno-fat-lto-objects  (internal compiler error)
FAIL: c-c++-common/ubsan/float-cast-overflow-7.c  -O2 -flto -fuse-linker-plugin 
-fno-fat-lto-objects  (test for excess errors)
FAIL: c-c++-common/ubsan/float-cast-overflow-8.c  -O2  execution test
FAIL: c-c++-common/ubsan/float-cast-overflow-8.c  -O2 -flto 
-fno-use-linker-plugin -flto-partition=none  execution test
FAIL: c-c++-common/ubsan/float-cast-overflow-8.c  -O2 -flto -fuse-linker-plugin 
-fno-fat-lto-objects  execution test
FAIL: c-c++-common/ubsan/float-cast-overflow-9.c  -O2  execution test
FAIL: c-c++-common/ubsan/float-cast-overflow-9.c  -O2 -flto 
-fno-use-linker-plugin -flto-partition=none  execution test
FAIL: c-c++-common/ubsan/float-cast-overflow-9.c  -O2 -flto -fuse-linker-plugin 
-fno-fat-lto-objects  execution test
unix/-m64
FAIL: c-c++-common/ubsan/float-cast-overflow-10.c  -O2 -flto 
-fno-use-linker-plugin -flto-partition=none  (internal compiler error)
FAIL: c-c++-common/ubsan/float-cast-overflow-10.c  -O2 -flto 
-fno-use-linker-plugin -flto-partition=none  (test for excess errors)
FAIL: c-c++-common/ubsan/float-cast-overflow-10.c  -O2 -flto 
-fuse-linker-plugin -fno-fat-lto-objects  (internal compiler error)
FAIL: c-c++-common/ubsan/float-cast-overflow-10.c  -O2 -flto 
-fuse-linker-plugin -fno-fat-lto-objects  (test for excess errors)
FAIL: c-c++-common/ubsan/float-cast-overflow-7.c  -O2 -flto 
-fno-use-linker-plugin -flto-partition=none  (internal compiler error)
FAIL: c-c++-common/ubsan/float-cast-overflow-7.c  -O2 -flto 
-fno-use-linker-plugin -flto-partition=none  (test for excess errors)
FAIL: c-c++-common/ubsan/float-cast-overflow-7.c  -O2 -flto -fuse-linker-plugin 
-fno-fat-lto-objects  (internal compiler error)
FAIL: c-c++-common/ubsan/float-cast-overflow-7.c  -O2 -flto -fuse-linker-plugin 
-fno-fat-lto-objects  (test for excess errors)

The LTO ICEs on float-cast-overflow-{7,10}.c seems to be related to decimal 
support:
/usr/src/gcc/gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-7.c:147:1: 
internal compiler error: in decimal_to_decnumber, at dfp.c:138
0x116b4cb decimal_to_decnumber
        ../../gcc/dfp.c:138
0x116b56f encode_decimal32(real_format const*, long*, real_value const*)
        ../../gcc/dfp.c:165
0x9cebb5 encode_decimal_single
        ../../gcc/real.c:4495
0x9ccb0b real_to_target_fmt(long*, real_value const*, real_format const*)
        ../../gcc/real.c:2774
0x9ccb6d real_to_target(long*, real_value const*, machine_mode)
        ../../gcc/real.c:2789
0xa7c7ff simplify_immed_subreg
        ../../gcc/simplify-rtx.c:5290
0xa7d328 simplify_subreg(machine_mode, rtx_def*, machine_mode, unsigned int)
        ../../gcc/simplify-rtx.c:5516
0xa7de2e simplify_gen_subreg(machine_mode, rtx_def*, machine_mode, unsigned int)
        ../../gcc/simplify-rtx.c:5721
The execution test FAILs for -m32 are:
==4494==Sanitizer CHECK failed: 
../../../../../libsanitizer/ubsan/ubsan_value.cc:98 ((0 && "unexpected floating 
point bit width")) != (0) (0, 0)
supposedly on the first __float80 or long double message (on x86_64-linux 
__float80 seems to work, but
__float128 randomly crashes the testcase in some invocations, in others it 
finishes, therefore
I haven't enabled it at all right now in float-cast-overflow-9.c).
We are passing 96 for long double and __float80 bitsize on x86_64 -m32, while
libubsan handles only 80 and 128.  Can you talk to upstream what the bitsize is 
meant to actually mean,
and/or check what clang/llvm provide in those cases?

--- gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-7.c.jj 2014-05-21 
19:29:41.199209108 +0200
+++ gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-7.c    2014-05-21 
20:31:01.949441320 +0200
@@ -0,0 +1,196 @@
+/* { dg-do run } */
+/* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O2" } } */
+/* { dg-options "-fsanitize=float-cast-overflow -fno-sanitize-recover" } */
+/* FIXME: When _DecimalXX <-> {signed, unsigned} __int128 conversions are
+   supported, -DBROKEN_DECIMAL_INT128 can be removed.  */
+/* { dg-additional-options "-DUSE_DFP -DBROKEN_DECIMAL_INT128" { target dfp } 
} */
+
+#define USE_FLT_DBL_LDBL
+#ifdef __SIZEOF_INT128__
+#define USE_INT128
+#endif
+#ifdef __SIZEOF_FLOAT80__
+#define USE_FLOAT80
+#endif
+#ifdef __SIZEOF_FLOAT128__
+#define USE_FLOAT128
+#endif
+
+#include "float-cast-overflow-7.h"
+
+#define TEST(type1, type2) \
+  if (cvt_##type1##_##type2 (-0.5f) != 0) abort ();            \
+  if (cvt_##type1##_##type2 (0.5f) != 0) abort ();             \
+  if (cvt_##type1##_##type2 (-0.75f) != 0) abort ();           \
+  if (cvt_##type1##_##type2 (0.75f) != 0) abort ();            \
+  if (type1##_MIN)                                             \
+    {                                                          \
+      /* For RADIX 2 type1##_MIN should be always */           \
+      /* exactly representable in type2.  */                   \
+      if (type2##_RADIX == 2                                   \
+         || type1##_MAX <= type2##_MAX)                        \
+       {                                                       \
+         if (cvt_##type1##_##type2 (type1##_MIN)               \
+             != type1##_MIN) abort ();                         \
+         volatile type2 tem = ((type2) -0.75f) + type1##_MIN;  \
+         volatile type2 tem2 = ((type2) -1.0f) + type1##_MIN;  \
+         if (tem != tem2                                       \
+             && cvt_##type1##_##type2 ((type2) -0.75f          \
+                                       + type1##_MIN)          \
+                != type1##_MIN) abort ();                      \
+       }                                                       \
+      else                                                     \
+       {                                                       \
+         type2 min = type1##_MIN;                              \
+         /* tem could be below minimum here due to */          \
+         /* rounding.  */                                      \
+         MAXT add = 1;                                         \
+         while (add)                                           \
+           {                                                   \
+             volatile type2 tem = type1##_MIN + (type1) add;   \
+             if (tem != min)                                   \
+               break;                                          \
+             MAXT newadd = add * type2##_RADIX;                \
+             if (newadd < add || newadd > type1##_MAX)         \
+               add = 0;                                        \
+             else                                              \
+               add = newadd;                                   \
+           }                                                   \
+         if (add)                                              \
+           {                                                   \
+             MAXT newadd                                       \
+               = (-(type1##_MIN + (type1) add)) % add;         \
+             volatile type2 tem = type1##_MIN + (type1) newadd;\
+             volatile type2 tem2 = type1##_MIN + (type1) add;  \
+             if (tem == tem2)                                  \
+               add = newadd;                                   \
+             else                                              \
+               {                                               \
+                 newadd += add;                                \
+                 if (newadd < add || newadd > type1##_MAX)     \
+                   add = 0;                                    \
+                 else                                          \
+                   {                                           \
+                     tem = type1##_MIN + (type1) newadd;       \
+                     if (tem == tem2)                          \
+                       add = newadd;                           \
+                     else                                      \
+                       add = 0;                                \
+                   }                                           \
+               }                                               \
+           }                                                   \
+         if (add                                               \
+             && cvt_##type1##_##type2 (type1##_MIN             \
+                                       + (type1) add)          \
+                != type1##_MIN + (type1) add) abort ();        \
+       }                                                       \
+    }                                                          \
+  if (type1##_MAX <= type2##_MAX)                              \
+    {                                                          \
+      if (cvt_##type1##_##type2 (type1##_MAX) != type1##_MAX)  \
+       abort ();                                               \
+      volatile type2 tem = ((type2) 0.75f) + type1##_MAX;      \
+      volatile type2 tem2 = ((type2) 1.0f) + type1##_MAX;      \
+      if (tem < tem2                                           \
+         && cvt_##type1##_##type2 ((type2) 0.75f + type1##_MAX)\
+            != type1##_MAX) abort ();                          \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      type2 max = type1##_MAX;                                 \
+      /* tem could be above maximum here due to rounding.  */  \
+      MAXT sub = 1;                                            \
+      while (sub)                                              \
+       {                                                       \
+         volatile type2 tem = type1##_MAX - sub;               \
+         if (tem != max)                                       \
+           break;                                              \
+         MAXT newsub = sub * type2##_RADIX;                    \
+         if (newsub < sub || newsub > type1##_MAX)             \
+           sub = 0;                                            \
+         else                                                  \
+           sub = newsub;                                       \
+       }                                                       \
+      if (sub)                                                 \
+       {                                                       \
+         MAXT newsub = ((type1##_MAX - sub) % sub);            \
+         volatile type2 tem = type1##_MAX - newsub;            \
+         volatile type2 tem2 = type1##_MAX - sub;              \
+         if (tem == tem2)                                      \
+           sub = newsub;                                       \
+         else                                                  \
+           {                                                   \
+             newsub += sub;                                    \
+             if (newsub < sub || newsub > type1##_MAX)         \
+               sub = 0;                                        \
+             else                                              \
+               {                                               \
+                 tem = type1##_MAX - newsub;                   \
+                 if (tem == tem2)                              \
+                   sub = newsub;                               \
+                 else                                          \
+                   sub = 0;                                    \
+               }                                               \
+           }                                                   \
+       }                                                       \
+      if (sub                                                  \
+         && cvt_##type1##_##type2 (type1##_MAX - sub)          \
+            != type1##_MAX - sub) abort ();                    \
+    }
+
+
+#ifdef si128_MAX
+# define TESTS128(type2) TEST (si128, type2) TEST (ui128, type2)
+#else
+# define TESTS128(type2)
+#endif
+
+#define TESTS(type2) \
+  TEST (sc, type2) TEST (c, type2) TEST (uc, type2)    \
+  TEST (ss, type2) TEST (us, type2)                    \
+  TEST (si, type2) TEST (ui, type2)                    \
+  TEST (sl, type2) TEST (ul, type2)                    \
+  TEST (sll, type2) TEST (ull, type2)                  \
+  TESTS128 (type2)
+
+int
+main ()
+{
+#ifdef f_MAX
+  TESTS (f)
+#endif
+#ifdef d_MAX
+  TESTS (d)
+#endif
+#ifdef ld_MAX
+  TESTS (ld)
+#endif
+#ifdef f80_MAX
+  TESTS (f80)
+#endif
+#ifdef f128_MAX
+  TESTS (f128)
+#endif
+#ifdef BROKEN_DECIMAL_INT128
+# undef TESTS128
+# define TESTS128(type2)
+# undef TWO
+# undef M1U
+# undef MAXS
+# undef MAXT
+# define TWO 2ULL
+# define M1U -1ULL
+# define MAXS (__CHAR_BIT__ * __SIZEOF_LONG_LONG__)
+# define MAXT unsigned long long
+#endif
+#ifdef d32_MAX
+  TESTS (d32)
+#endif
+#ifdef d64_MAX
+  TESTS (d64)
+#endif
+#ifdef d128_MAX
+  TESTS (d128)
+#endif
+  return 0;
+}
--- gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-7.h.jj 2014-05-21 
20:28:32.637160646 +0200
+++ gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-7.h    2014-05-21 
20:32:59.647867656 +0200
@@ -0,0 +1,151 @@
+#define CVTFN(type1, type2) \
+__attribute__((noinline)) type1        \
+cvt_##type1##_##type2 (type2 x)        \
+{                              \
+  return x;                    \
+}
+
+typedef signed char sc;
+#define sc_MIN (-__SCHAR_MAX__ - 1)
+#define sc_MAX __SCHAR_MAX__
+typedef unsigned char uc;
+#define uc_MIN 0
+#define uc_MAX (2U * __SCHAR_MAX__ + 1U)
+typedef char c;
+#define c_MIN ((((char) -1) > (char) 0) ? uc_MIN : sc_MIN)
+#define c_MAX ((((char) -1) > (char) 0) ? uc_MAX : sc_MAX)
+typedef signed short ss;
+#define ss_MIN (-__SHRT_MAX__ - 1)
+#define ss_MAX __SHRT_MAX__
+typedef unsigned short us;
+#define us_MIN 0
+#define us_MAX (2U * __SHRT_MAX__ + 1U)
+typedef signed int si;
+#define si_MIN (-__INT_MAX__ - 1)
+#define si_MAX __INT_MAX__
+typedef unsigned int ui;
+#define ui_MIN 0
+#define ui_MAX (2U * __INT_MAX__ + 1U)
+typedef signed long sl;
+#define sl_MIN (-__LONG_MAX__ - 1L)
+#define sl_MAX __LONG_MAX__
+typedef unsigned long ul;
+#define ul_MIN 0L
+#define ul_MAX (2UL * __LONG_MAX__ + 1UL)
+typedef signed long long sll;
+#define sll_MIN (-__LONG_LONG_MAX__ - 1LL)
+#define sll_MAX __LONG_LONG_MAX__
+typedef unsigned long long ull;
+#define ull_MIN 0LL
+#define ull_MAX (2ULL * __LONG_LONG_MAX__ + 1ULL)
+#ifdef USE_INT128
+typedef signed __int128 si128;
+# define si128_MAX \
+  ((signed __int128) ((((unsigned __int128) 1) \
+                      << (__CHAR_BIT__ * __SIZEOF_INT128__ - 1)) - 1))
+# define si128_MIN (-si128_MAX - 1)
+typedef unsigned __int128 ui128;
+#define ui128_MIN ((unsigned __int128) 0)
+#define ui128_MAX (((unsigned __int128) 2) * si128_MAX + 1)
+#endif
+
+#ifdef si128_MAX
+# define CVTS128(type2) CVTFN (si128, type2) CVTFN (ui128, type2)
+#else
+# define CVTS128(type2)
+#endif
+
+#define CVTS(type2) \
+  CVTFN (sc, type2) CVTFN (c, type2) CVTFN (uc, type2) \
+  CVTFN (ss, type2) CVTFN (us, type2)                  \
+  CVTFN (si, type2) CVTFN (ui, type2)                  \
+  CVTFN (sl, type2) CVTFN (ul, type2)                  \
+  CVTFN (sll, type2) CVTFN (ull, type2)                        \
+  CVTS128 (type2)
+
+#ifdef __SIZEOF_INT128__
+# define TWO ((unsigned __int128) 2)
+# define M1U ((unsigned __int128) -1)
+# define MAXS (__CHAR_BIT__ * __SIZEOF_INT128__)
+# define MAXT unsigned __int128
+#else
+# define TWO 2ULL
+# define M1U -1ULL
+# define MAXS (__CHAR_BIT__ * __SIZEOF_LONG_LONG__)
+# define MAXT unsigned long long
+#endif
+
+#ifdef USE_FLT_DBL_LDBL
+typedef float f;
+#define f_RADIX 2
+#define f_MANT_DIG __FLT_MANT_DIG__
+#define f_MAX ((TWO << (f_MANT_DIG - 1)) - 1)
+typedef double d;
+#define d_RADIX 2
+#define d_MANT_DIG __DBL_MANT_DIG__
+#define d_MAX ((TWO << (d_MANT_DIG - 1)) - 1)
+typedef long double ld;
+#define ld_RADIX 2
+#define ld_MANT_DIG __LDBL_MANT_DIG__
+#define ld_MAX \
+  (ld_MANT_DIG > MAXS ? M1U : (TWO << (ld_MANT_DIG > MAXS \
+                                      ? 0 : ld_MANT_DIG - 1)) - 1)
+CVTS (f)
+CVTS (d)
+CVTS (ld)
+#endif
+#ifdef USE_FLOAT80
+typedef __float80 f80;
+# define f80_RADIX 2
+# define f80_MANT_DIG 64
+# define f80_MAX ((TWO << (f80_MANT_DIG - 1)) - 1)
+CVTS (f80)
+#endif
+#ifdef USE_FLOAT128
+typedef __float128 f128;
+# define f128_RADIX 2
+# define f128_MANT_DIG 113
+# define f128_MAX \
+  (f128_MANT_DIG > MAXS ? M1U : (TWO << (f128_MANT_DIG > MAXS \
+                                        ? 0 : f128_MANT_DIG - 1)) - 1)
+CVTS (f128)
+#endif
+#ifdef USE_DFP
+typedef _Decimal32 d32;
+# define d32_RADIX 10
+# define d32_MANT_DIG __DEC32_MANT_DIG__
+# if d32_MANT_DIG == 7
+#  define d32_MAX 9999999ULL
+# endif
+typedef _Decimal64 d64;
+# define d64_RADIX 10
+# define d64_MANT_DIG __DEC64_MANT_DIG__
+# if d64_MANT_DIG == 16
+#  define d64_MAX 9999999999999999ULL
+# endif
+typedef _Decimal128 d128;
+# define d128_RADIX 10
+# define d128_MANT_DIG __DEC128_MANT_DIG__
+# if d128_MANT_DIG == 34
+#  ifdef __SIZEOF_INT128__
+/* #define d128_MAX 0x1ed09bead87c0378d8e63ffffffff */
+#   define d128_MAX \
+  ((((unsigned __int128) 0x1ed09bead87c0) << 64) + 0x378d8e63ffffffffULL)
+#  else
+#   define d128_MAX M1U
+#  endif
+# endif
+# ifdef BROKEN_DECIMAL_INT128
+#  undef CVTS128
+#  define CVTS128(type2)
+# endif
+CVTS (d32)
+CVTS (d64)
+CVTS (d128)
+#endif
+
+extern
+#ifdef __cplusplus
+"C"
+#endif
+void abort ();
--- gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-8.c.jj 2014-05-21 
19:29:43.971196452 +0200
+++ gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-8.c    2014-05-21 
20:36:22.833896108 +0200
@@ -0,0 +1,206 @@
+/* { dg-do run } */
+/* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O2" } } */
+/* { dg-options "-fsanitize=float-cast-overflow -fsanitize-recover 
-DUSE_FLT_DBL_LDBL" } */
+/* { dg-additional-options "-DUSE_INT128" { target int128 } } */
+
+#include "float-cast-overflow-7.h"
+
+#define TEST(type1, type2) \
+  if (type1##_MIN)                                             \
+    {                                                          \
+      type2 min = type1##_MIN;                                 \
+      type2 add = -1.0;                                                \
+      while (1)                                                        \
+       {                                                       \
+         volatile type2 tem = min + add;                       \
+         if (tem != min)                                       \
+           {                                                   \
+             volatile type1 tem3 = cvt_##type1##_##type2 (tem);\
+             break;                                            \
+           }                                                   \
+         add = add * type2##_RADIX;                            \
+         if (min == add)                                       \
+           break;                                              \
+       }                                                       \
+      volatile type1 tem3 = cvt_##type1##_##type2 (min);       \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      volatile type1 tem3 = cvt_##type1##_##type2 (-1.0f);     \
+    }                                                          \
+  {                                                            \
+    type2 max = type1##_MAX;                                   \
+    type2 add = 1.0;                                           \
+    while (1)                                                  \
+      {                                                                \
+       volatile type2 tem = max + add;                         \
+       if (tem != max)                                         \
+         {                                                     \
+           volatile type1 tem3 = cvt_##type1##_##type2 (tem);  \
+           break;                                              \
+         }                                                     \
+       add = add * type2##_RADIX;                              \
+       if (max == add)                                         \
+         break;                                                \
+      }                                                                \
+  }
+
+#ifdef si128_MAX
+# define TESTS128(type2) TEST (si128, type2) TEST (ui128, type2)
+#else
+# define TESTS128(type2)
+#endif
+
+#define TESTS(type2) \
+  TEST (sc, type2) TEST (c, type2) TEST (uc, type2)    \
+  TEST (ss, type2) TEST (us, type2)                    \
+  TEST (si, type2) TEST (ui, type2)                    \
+  TEST (sl, type2) TEST (ul, type2)                    \
+  TEST (sll, type2) TEST (ull, type2)                  \
+  TESTS128 (type2)
+
+int
+main ()
+{
+#ifdef f_MAX
+  TESTS (f)
+#endif
+#ifdef d_MAX
+  TESTS (d)
+#endif
+#ifdef ld_MAX
+  TESTS (ld)
+#endif
+#ifdef f80_MAX
+  TESTS (f80)
+#endif
+#ifdef f128_MAX
+  TESTS (f128)
+#endif
+#ifdef BROKEN_DECIMAL_INT128
+# undef TESTS128
+# define TESTS128(type2)
+# undef TWO
+# undef M1U
+# undef MAXS
+# define TWO 2ULL
+# define M1U -1ULL
+# define MAXS (__CHAR_BIT__ * __SIZEOF_LONG_LONG__)
+#endif
+#ifdef d32_MAX
+  TESTS (d32)
+#endif
+#ifdef d64_MAX
+  TESTS (d64)
+#endif
+#ifdef d128_MAX
+  TESTS (d128)
+#endif
+  return 0;
+}
+
+/* float */
+/* { dg-output "value -129 is outside the range of representable values of 
type 'signed char'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } } */
+/* { dg-output "value \[0-9.e+-]* is outside the range of representable values 
of type 'signed char'\[^\n\r]*(\n|\r\n|\r)" { target { ! { ilp32 || lp64 } } } 
} */
+/* { dg-output "\[^\n\r]*value 128 is outside the range of representable 
values of type 'signed char'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } 
} */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'signed char'\[^\n\r]*(\n|\r\n|\r)" { target { ! { 
ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value (-129|-1) is outside the range of representable 
values of type 'char'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'char'\[^\n\r]*(\n|\r\n|\r)" { target { ! { ilp32 
|| lp64 } } } } */
+/* { dg-output "\[^\n\r]*value (128|256) is outside the range of representable 
values of type 'char'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'char'\[^\n\r]*(\n|\r\n|\r)" { target { ! { ilp32 
|| lp64 } } } } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'unsigned char'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value 256 is outside the range of representable 
values of type 'unsigned char'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } 
} } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'unsigned char'\[^\n\r]*(\n|\r\n|\r)" { target { ! 
{ ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value -32769 is outside the range of representable 
values of type 'short int'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } } 
*/
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'short int'\[^\n\r]*(\n|\r\n|\r)" { target { ! { 
ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value 32768 is outside the range of representable 
values of type 'short int'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } } 
*/
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'short int'\[^\n\r]*(\n|\r\n|\r)" { target { ! { 
ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'short unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value 65536 is outside the range of representable 
values of type 'short unsigned int'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || 
lp64 } } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'short unsigned int'\[^\n\r]*(\n|\r\n|\r)" { 
target { ! { ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'long unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long long int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long long int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'long long unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long long unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type '__int128'\[^\n\r]*(\n|\r\n|\r)" { target { int128 
} } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type '__int128'\[^\n\r]*(\n|\r\n|\r)" { target { int128 
} } } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type '__int128 unsigned'\[^\n\r]*(\n|\r\n|\r)" { target { int128 } } } */
+/* No error for float and __int128 unsigned max value, as ui128_MAX is +Inf in 
float.  */
+/* double */
+/* { dg-output "\[^\n\r]*value -129 is outside the range of representable 
values of type 'signed char'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } 
} */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'signed char'\[^\n\r]*(\n|\r\n|\r)" { target { ! { 
ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value 128 is outside the range of representable 
values of type 'signed char'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } 
} */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'signed char'\[^\n\r]*(\n|\r\n|\r)" { target { ! { 
ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value (-129|-1) is outside the range of representable 
values of type 'char'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'char'\[^\n\r]*(\n|\r\n|\r)" { target { ! { ilp32 
|| lp64 } } } } */
+/* { dg-output "\[^\n\r]*value (128|256) is outside the range of representable 
values of type 'char'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'char'\[^\n\r]*(\n|\r\n|\r)" { target { ! { ilp32 
|| lp64 } } } } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'unsigned char'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value 256 is outside the range of representable 
values of type 'unsigned char'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } 
} } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'unsigned char'\[^\n\r]*(\n|\r\n|\r)" { target { ! 
{ ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value -32769 is outside the range of representable 
values of type 'short int'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } } 
*/
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'short int'\[^\n\r]*(\n|\r\n|\r)" { target { ! { 
ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value 32768 is outside the range of representable 
values of type 'short int'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } } 
*/
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'short int'\[^\n\r]*(\n|\r\n|\r)" { target { ! { 
ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'short unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value 65536 is outside the range of representable 
values of type 'short unsigned int'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || 
lp64 } } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'short unsigned int'\[^\n\r]*(\n|\r\n|\r)" { 
target { ! { ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'long unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long long int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long long int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'long long unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long long unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type '__int128'\[^\n\r]*(\n|\r\n|\r)" { target { int128 
} } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type '__int128'\[^\n\r]*(\n|\r\n|\r)" { target { int128 
} } } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type '__int128 unsigned'\[^\n\r]*(\n|\r\n|\r)" { target { int128 } } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type '__int128 unsigned'\[^\n\r]*(\n|\r\n|\r)" { target 
{ int128 } } } */
+/* long double */
+/* { dg-output "\[^\n\r]*value -129 is outside the range of representable 
values of type 'signed char'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } 
} */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'signed char'\[^\n\r]*(\n|\r\n|\r)" { target { ! { 
ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value 128 is outside the range of representable 
values of type 'signed char'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } 
} */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'signed char'\[^\n\r]*(\n|\r\n|\r)" { target { ! { 
ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value (-129|-1) is outside the range of representable 
values of type 'char'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'char'\[^\n\r]*(\n|\r\n|\r)" { target { ! { ilp32 
|| lp64 } } } } */
+/* { dg-output "\[^\n\r]*value (128|256) is outside the range of representable 
values of type 'char'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'char'\[^\n\r]*(\n|\r\n|\r)" { target { ! { ilp32 
|| lp64 } } } } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'unsigned char'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value 256 is outside the range of representable 
values of type 'unsigned char'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } 
} } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'unsigned char'\[^\n\r]*(\n|\r\n|\r)" { target { ! 
{ ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value -32769 is outside the range of representable 
values of type 'short int'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } } 
*/
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'short int'\[^\n\r]*(\n|\r\n|\r)" { target { ! { 
ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value 32768 is outside the range of representable 
values of type 'short int'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || lp64 } } } 
*/
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'short int'\[^\n\r]*(\n|\r\n|\r)" { target { ! { 
ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'short unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value 65536 is outside the range of representable 
values of type 'short unsigned int'\[^\n\r]*(\n|\r\n|\r)" { target { ilp32 || 
lp64 } } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'short unsigned int'\[^\n\r]*(\n|\r\n|\r)" { 
target { ! { ilp32 || lp64 } } } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'long unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long long int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long long int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'long long unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long long unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type '__int128'\[^\n\r]*(\n|\r\n|\r)" { target { int128 
} } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type '__int128'\[^\n\r]*(\n|\r\n|\r)" { target { int128 
} } } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type '__int128 unsigned'\[^\n\r]*(\n|\r\n|\r)" { target { int128 } } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type '__int128 unsigned'\[^\n\r]*(\n|\r\n|\r)" { target 
{ int128 } } } */
--- gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-9.c.jj 2014-05-21 
20:37:17.090638364 +0200
+++ gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-9.c    2014-05-21 
20:37:13.084663434 +0200
@@ -0,0 +1,34 @@
+/* { dg-do run { target { i?86-*-linux* x86_64-*-linux* } } } */
+/* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O2" } } */
+/* { dg-options "-fsanitize=float-cast-overflow -fsanitize-recover 
-DUSE_FLOAT80 -UUSE_FLOAT128" } */
+/* { dg-additional-options "-DUSE_INT128" { target int128 } } */
+
+#include "float-cast-overflow-8.c"
+
+/* __float80 */
+/* { dg-output "value -129 is outside the range of representable values of 
type 'signed char'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value 128 is outside the range of representable 
values of type 'signed char'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value (-129|-1) is outside the range of representable 
values of type 'char'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value (128|256) is outside the range of representable 
values of type 'char'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'unsigned char'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value 256 is outside the range of representable 
values of type 'unsigned char'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value -32769 is outside the range of representable 
values of type 'short int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value 32768 is outside the range of representable 
values of type 'short int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'short unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value 65536 is outside the range of representable 
values of type 'short unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'long unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long long int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long long int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type 'long long unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type 'long long unsigned int'\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type '__int128'\[^\n\r]*(\n|\r\n|\r)" { target int128 } 
} */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type '__int128'\[^\n\r]*(\n|\r\n|\r)" { target int128 } 
} */
+/* { dg-output "\[^\n\r]*value -1 is outside the range of representable values 
of type '__int128 unsigned'\[^\n\r]*(\n|\r\n|\r)" { target int128 } } */
+/* { dg-output "\[^\n\r]*value \[0-9.e+-]* is outside the range of 
representable values of type '__int128 unsigned'\[^\n\r]*(\n|\r\n|\r)" { target 
int128 } } */
--- gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-10.c.jj        
2014-05-21 20:37:36.863534281 +0200
+++ gcc/testsuite/c-c++-common/ubsan/float-cast-overflow-10.c   2014-05-21 
20:38:37.923238252 +0200
@@ -0,0 +1,8 @@
+/* { dg-do run { target dfp } } */
+/* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O2" } } */
+/* { dg-options "-fsanitize=float-cast-overflow -fsanitize-recover" } */
+/* FIXME: When _DecimalXX <-> {signed, unsigned} __int128 conversions are
+   supported, -DBROKEN_DECIMAL_INT128 can be removed.  */
+/* { dg-additional-options "-DUSE_DFP -DBROKEN_DECIMAL_INT128" } */
+
+#include "float-cast-overflow-8.c"


        Jakub

Reply via email to