diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-03-21 09:22:57 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-03-21 09:22:57 +0100 |
commit | 3ed67fbf3d21c3d81f9d3107b1e07f970c9fac01 (patch) | |
tree | 8889793db5e33901cecca403528c78c5981029d3 /gcc | |
parent | 9f30dff0eed2813ead7a2e2927e0eb8c333baf8b (diff) | |
download | gcc-3ed67fbf3d21c3d81f9d3107b1e07f970c9fac01.zip gcc-3ed67fbf3d21c3d81f9d3107b1e07f970c9fac01.tar.gz gcc-3ed67fbf3d21c3d81f9d3107b1e07f970c9fac01.tar.bz2 |
re PR sanitizer/78158 (Strange data race detection with thread sanitizer)
PR sanitizer/78158
* tsan.c (instrument_builtin_call): If the memory model argument
is not a constant, assume it is valid.
From-SVN: r246306
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/tsan.c | 16 |
2 files changed, 12 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 59be61f..62c63c4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. @@ -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)); |