diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/arm/arm.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr97534.c | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 568e153..56ed556 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -30824,7 +30824,7 @@ arm_split_atomic_op (enum rtx_code code, rtx old_out, rtx new_out, rtx mem, case MINUS: if (CONST_INT_P (value)) { - value = GEN_INT (-INTVAL (value)); + value = gen_int_mode (-INTVAL (value), wmode); code = PLUS; } /* FALLTHRU */ diff --git a/gcc/testsuite/gcc.dg/pr97534.c b/gcc/testsuite/gcc.dg/pr97534.c new file mode 100644 index 0000000..b363a32 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr97534.c @@ -0,0 +1,9 @@ +/* PR target/97534 - ICE in decompose on arm*-*-*. */ +/* { dg-do compile } */ +/* { dg-options "-std=c11 -O2 -g" } */ + +int f (int a) +{ + int b; + __atomic_fetch_sub(&b, (int)(-__INT_MAX__ - 1), (int)0); +} |