--- CUT ---
Here is a testcase that fails at -O1 and above without any arguments.
int a[2] = { 10, 20 };
int
is_bigger (long, int) __attribute__((noinline,noclone));
int
is_bigger (long offset, int index)
{
unsigned long size = -offset;
if (size > a[index])
return 1;
return 0;
}
int
main (int argc, char** argv)
{
long v;
if (is_bigger(0, 0))
__builtin_abort ();
if (!is_bigger(1, 0))
__builtin_abort ();
if (is_bigger(-10, 0))
__builtin_abort ();
if (!is_bigger(10, 0))
__builtin_abort ();
return 0;
}
(insn 14 13 15 2 (set (reg:CC_SWP 66 cc)
(compare: CC_SWP (neg:DI (reg:DI 0 x0 [ offset ])) list:REG_ DEAD (reg:DI 1 x1 [orig:85 D.3895 ] [85])
(expr_ list:REG_ DEAD (reg:DI 0 x0 [ offset ])
(nil) )))
(reg:DI 1 x1 [orig:85 D.3895 ] [85]))) t7.c:11 114 {*compare_negdi}
(expr_
--- CUT ---
Here is a testcase that fails at -O1 and above without any arguments.
int a[2] = { 10, 20 };
int _((noinline, noclone) );
is_bigger (long, int) __attribute_
int
is_bigger (long offset, int index)
{
unsigned long size = -offset;
if (size > a[index])
return 1;
return 0;
}
int
main (int argc, char** argv)
{
long v;
if (is_bigger(0, 0))
__builtin_abort ();
if (!is_bigger(1, 0))
__builtin_abort ();
if (is_bigger(-10, 0))
__builtin_abort ();
if (!is_bigger(10, 0))
__builtin_abort ();
return 0;
}