re PR sanitizer/78158 (Strange data race detection with thread sanitizer)
authorJakub Jelinek <jakub@redhat.com>
Tue, 21 Mar 2017 08:22:57 +0000 (09:22 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 21 Mar 2017 08:22:57 +0000 (09:22 +0100)
PR sanitizer/78158
* tsan.c (instrument_builtin_call): If the memory model argument
is not a constant, assume it is valid.

From-SVN: r246306

gcc/ChangeLog
gcc/tsan.c

index 59be61f58e0a6d7e9e0755b6da3de5d14af5e793..62c63c46a08e05b8d8946fa4e5be4f0d3ddf292a 100644 (file)
@@ -1,5 +1,9 @@
 2017-03-21  Jakub Jelinek  <jakub@redhat.com>
 
+       PR sanitizer/78158
+       * tsan.c (instrument_builtin_call): If the memory model argument
+       is not a constant, assume it is valid.
+
        PR c/67338
        * fold-const.c (round_up_loc): Negate divisor in unsigned type to
        avoid UB.
index 2d4ec74cb81af191e22be33ad3c98ef4e8535184..5e5961f4bdaf57871304ffbc7325fe29661003a7 100644 (file)
@@ -499,8 +499,8 @@ instrument_builtin_call (gimple_stmt_iterator *gsi)
          case check_last:
          case fetch_op:
            last_arg = gimple_call_arg (stmt, num - 1);
-           if (!tree_fits_uhwi_p (last_arg)
-               || memmodel_base (tree_to_uhwi (last_arg)) >= MEMMODEL_LAST)
+           if (tree_fits_uhwi_p (last_arg)
+               && memmodel_base (tree_to_uhwi (last_arg)) >= MEMMODEL_LAST)
              return;
            gimple_call_set_fndecl (stmt, decl);
            update_stmt (stmt);
@@ -564,11 +564,11 @@ instrument_builtin_call (gimple_stmt_iterator *gsi)
            gcc_assert (num == 6);
            for (j = 0; j < 6; j++)
              args[j] = gimple_call_arg (stmt, j);
-           if (!tree_fits_uhwi_p (args[4])
-               || memmodel_base (tree_to_uhwi (args[4])) >= MEMMODEL_LAST)
+           if (tree_fits_uhwi_p (args[4])
+               && memmodel_base (tree_to_uhwi (args[4])) >= MEMMODEL_LAST)
              return;
-           if (!tree_fits_uhwi_p (args[5])
-               || memmodel_base (tree_to_uhwi (args[5])) >= MEMMODEL_LAST)
+           if (tree_fits_uhwi_p (args[5])
+               && memmodel_base (tree_to_uhwi (args[5])) >= MEMMODEL_LAST)
              return;
            update_gimple_call (gsi, decl, 5, args[0], args[1], args[2],
                                args[4], args[5]);
@@ -642,8 +642,8 @@ instrument_builtin_call (gimple_stmt_iterator *gsi)
                  return;
              }
            last_arg = gimple_call_arg (stmt, num - 1);
-           if (!tree_fits_uhwi_p (last_arg)
-               || memmodel_base (tree_to_uhwi (last_arg)) >= MEMMODEL_LAST)
+           if (tree_fits_uhwi_p (last_arg)
+               && memmodel_base (tree_to_uhwi (last_arg)) >= MEMMODEL_LAST)
              return;
            t = TYPE_ARG_TYPES (TREE_TYPE (decl));
            t = TREE_VALUE (TREE_CHAIN (t));