Eliminate GCC-5 ASan global-buffer-overflow false positive for AO_stack_bl
authorIvan Maidanski <ivmai@mail.ru>
Wed, 20 Dec 2017 07:22:20 +0000 (10:22 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Fri, 22 Dec 2017 07:46:36 +0000 (10:46 +0300)
* src/atomic_ops_stack.c [AO_USE_ALMOST_LOCK_FREE]
(AO_stack_push_explicit_aux_release): Replace a->AO_stack_bl+i with
&a->AO_stack_bl[i] (including the case of i==0).

src/atomic_ops_stack.c

index b607c74..1f70269 100644 (file)
@@ -59,8 +59,8 @@ void AO_stack_push_explicit_aux_release(volatile AO_t *list, AO_t *x,
 # if AO_BL_SIZE == 2
   {
     /* Start all loads as close to concurrently as possible. */
-    AO_t entry1 = AO_load(a -> AO_stack_bl);
-    AO_t entry2 = AO_load(a -> AO_stack_bl + 1);
+    AO_t entry1 = AO_load(&a->AO_stack_bl[0]);
+    AO_t entry2 = AO_load(&a->AO_stack_bl[1]);
     if (entry1 == x_bits || entry2 == x_bits)
       {
         /* Entry is currently being removed.  Change it a little.       */
@@ -77,7 +77,7 @@ void AO_stack_push_explicit_aux_release(volatile AO_t *list, AO_t *x,
     int i;
     for (i = 0; i < AO_BL_SIZE; ++i)
       {
-        if (AO_load(a -> AO_stack_bl + i) == x_bits)
+        if (AO_load(&a->AO_stack_bl[i]) == x_bits)
           {
             /* Entry is currently being removed.  Change it a little.   */
               ++x_bits;