On Nov 8, 2018, Jeff Law <[email protected]> wrote:
>> PR rtl-optimization/86438
>> * gcc.dg/torture/pr86438.c: New.
> OK.
Thanks. I ended up tweaking the test a bit further, when it occurred to
me that I might be able to trigger the same problem with -m32, but no
such luck. Here's the test I'm installing, instead of the one I'd
posted.
diff --git a/gcc/testsuite/gcc.dg/torture/pr86438.c
b/gcc/testsuite/gcc.dg/torture/pr86438.c
new file mode 100644
index 000000000000..3e95515ae6a6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr86438.c
@@ -0,0 +1,29 @@
+/* { dg-do run } */
+
+typedef unsigned int u32;
+#if __SIZEOF_INT128__
+typedef unsigned long long u64;
+typedef unsigned __int128 u128;
+#else
+typedef unsigned long u64;
+typedef unsigned long long u128;
+#endif
+
+u128 g;
+
+static __attribute__ ((noinline, noclone))
+void check (u64 a, u64 b)
+{
+ if (a != 0 || b != 4)
+ __builtin_abort ();
+}
+
+int
+main (void)
+{
+ u64 d = (g ? 5 : 4);
+ u32 f = __builtin_sub_overflow_p (d, (u128) d, (u64) 0);
+ u128 x = g + f + d;
+ check (x >> (sizeof (u64) * __CHAR_BIT__), x);
+ return 0;
+}
--
Alexandre Oliva, freedom fighter https://FSFLA.org/blogs/lxo
Be the change, be Free! FSF Latin America board member
GNU Toolchain Engineer Free Software Evangelist
Hay que enGNUrecerse, pero sin perder la terGNUra jamás-GNUChe