re PR middle-end/54261 (reverse sync/atomic operators when only sync_compare_and_swap_optab libfuncs implemented)

PR middle-end/54261
	* gcc.dg/torture/pr54261-1.c: New test.

From-SVN: r190455
This commit is contained in:
Hans-Peter Nilsson 2012-08-16 22:05:32 +00:00 committed by Hans-Peter Nilsson
parent df1a3a7ca6
commit af4bd92041
2 changed files with 47 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2012-08-17 Hans-Peter Nilsson <hp@axis.com>
PR middle-end/54261
* gcc.dg/torture/pr54261-1.c: New test.
2012-08-15 Janus Weil <janus@gcc.gnu.org>
PR fortran/54243

View File

@ -0,0 +1,42 @@
/* { dg-do run } */
/* { dg-additional-options "-DSYNC_FALLBACK" { target { ! cas_int } } } */
#ifdef SYNC_FALLBACK
/* The SYNC_FALLBACK code is just so we don't have to restrict this test
to any subset of targets. For targets with no atomics support at
all, the cas_int effective-target is false and the fallback provides
a PASS. Where the bug trigs (at the time this test-case was added),
cas_int is also false but the fallback isn't used. */
__attribute__((__noinline__, __noclone__))
int
# if __INT_MAX__ == 0x7fff
__sync_fetch_and_add_2
# else
__sync_fetch_and_add_4
# endif
(int *at, int val)
{
int tmp = *at;
asm ("");
*at = tmp + val;
return tmp;
}
#endif
__attribute__((__noinline__, __noclone__))
void g (int *at, int val)
{
asm ("");
__sync_fetch_and_add (at, val);
}
int main(void)
{
int x = 41;
int a = 1;
g (&x, a);
if (x != 42)
__builtin_abort ();
__builtin_exit (0);
}