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:
parent
df1a3a7ca6
commit
af4bd92041
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
Loading…
Reference in New Issue