re PR middle-end/59448 (Code generation doesn't respect C11 address-dependency)
authorAndrew MacLeod <amacleod@redhat.com>
Wed, 14 Jan 2015 13:58:35 +0000 (13:58 +0000)
committerAndrew Macleod <amacleod@gcc.gnu.org>
Wed, 14 Jan 2015 13:58:35 +0000 (13:58 +0000)
2015-01-14  Andrew MacLeod  <amacleod@redhat.com>

PR middle-end/59448
* builtins.c (get_memmodel): Promote consume to acquire always.
* testsuite/gcc.dg/atomic-invalid.c: Remove obselete test for illegal
consume in an atomic_exchange.

From-SVN: r219601

gcc/ChangeLog
gcc/builtins.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/atomic-invalid.c

index 43d6a1a0a9321222da86ac9dd230cd3414c07a80..a8dc1d36f7479629391b0290bc46fd37d0051bef 100644 (file)
@@ -1,3 +1,8 @@
+2015-01-14  Andrew MacLeod  <amacleod@redhat.com>
+
+       PR middle-end/59448
+       * builtins.c (get_memmodel): Promote consume to acquire always.
+
 2014-01-14  Ilya Tocar  <ilya.tocar@intel.com>
 
        PR target/64386
index 9280704e0435915bc1e80eea289dbd29979831db..c8b1940e10a27f68c52afc0ac218d47420bcbffc 100644 (file)
@@ -5365,6 +5365,11 @@ get_memmodel (tree exp)
       return MEMMODEL_SEQ_CST;
     }
 
+  /* Workaround for Bugzilla 59448. GCC doesn't track consume properly, so
+     be conservative and promote consume to acquire.  */
+  if (val == MEMMODEL_CONSUME)
+    val = MEMMODEL_ACQUIRE;
+
   return (enum memmodel) val;
 }
 
index d39b2d7814e0891caafcd982b3d0258e4e8cbd51..3df2a2c7185fea434d543069d4833e82645315d1 100644 (file)
@@ -1,3 +1,9 @@
+2015-01-14  Andrew MacLeod  <amacleod@redhat.com>
+
+       PR middle-end/59448
+       * gcc.dg/atomic-invalid.c: Remove obselete test for illegal consume in
+       an atomic_exchange.
+
 2014-01-14  Ilya Tocar  <ilya.tocar@intel.com>
 
        PR target/64386
index 4d040e1d57293202bd08c6aae49aa258763d7917..6404ae86f5b39cf9c30e6155ebcc56054b62f4ff 100644 (file)
@@ -17,8 +17,6 @@ main ()
   __atomic_compare_exchange_n (&i, &e, 1, 0, __ATOMIC_SEQ_CST, __ATOMIC_RELEASE); /* { dg-error "invalid failure memory" } */
   __atomic_compare_exchange_n (&i, &e, 1, 1, __ATOMIC_SEQ_CST, __ATOMIC_ACQ_REL); /* { dg-error "invalid failure memory" } */
 
-  __atomic_exchange_n (&i, 1, __ATOMIC_CONSUME); /* { dg-error "invalid memory model" } */
-
   __atomic_load_n (&i, __ATOMIC_RELEASE); /* { dg-error "invalid memory model" } */
   __atomic_load_n (&i, __ATOMIC_ACQ_REL); /* { dg-error "invalid memory model" } */