From 154b68db9bee50c8acb1c0440987f4ef176d2a65 Mon Sep 17 00:00:00 2001 From: Andrew MacLeod Date: Thu, 10 Nov 2011 16:39:32 +0000 Subject: re PR rtl-optimization/51040 (ICE: RTL check: access of elt 1 of 'not' with last elt 0 in gen_rtx_fmt_ee_stat, at ./genrtl.h:33 with __atomic_nand_fetch()) PR rtl-optimization/51040 * optabs.c (expand_atomic_fetch_op): Patchup code for NAND should be AND followed by NOT. * builtins.c (expand_builtin_atomic_fetch_op): Patchup code for NAND should be AND followed by NOT. * testsuite/gcc.dg/atomic-noinline[-aux].c: Test no-inline NAND and patchup code. From-SVN: r181259 --- gcc/testsuite/gcc.dg/atomic-noinline.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'gcc/testsuite/gcc.dg/atomic-noinline.c') diff --git a/gcc/testsuite/gcc.dg/atomic-noinline.c b/gcc/testsuite/gcc.dg/atomic-noinline.c index 06a93e0..eb0866e 100644 --- a/gcc/testsuite/gcc.dg/atomic-noinline.c +++ b/gcc/testsuite/gcc.dg/atomic-noinline.c @@ -49,6 +49,13 @@ main () if (__atomic_is_lock_free (4, 0) != 10) abort (); + /* PR 51040 was caused by arithmetic code not patching up nand_fetch properly + when used an an external function. Look for proper return value here. */ + ac = 0x3C; + bc = __atomic_nand_fetch (&ac, 0x0f, __ATOMIC_RELAXED); + if (bc != ac) + abort (); + return 0; } -- cgit v1.1