tsan: Don't instrument non-generic AS accesses [PR111736]

Similar to the asan and ubsan changes, we shouldn't instrument non-generic
address space accesses with tsan, because we just have library functions
which take address of the objects as generic address space pointers, so they
can't handle anything else.

2024-03-26  Jakub Jelinek  <jakub@redhat.com>

	PR sanitizer/111736
	* tsan.cc (instrument_expr): Punt on non-generic address space
	accesses.

	* gcc.dg/tsan/pr111736.c: New test.
This commit is contained in:
Jakub Jelinek 2024-03-26 11:06:15 +01:00
parent f4e92d62dc
commit 471967ab8b
2 changed files with 20 additions and 0 deletions

View File

@ -0,0 +1,17 @@
/* PR sanitizer/111736 */
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
/* { dg-options "-fsanitize=thread -fdump-tree-optimized -ffat-lto-objects" } */
/* { dg-final { scan-tree-dump-not "__tsan_read" "optimized" } } */
/* { dg-final { scan-tree-dump-not "__tsan_write" "optimized" } } */
#ifdef __x86_64__
#define SEG __seg_fs
#else
#define SEG __seg_gs
#endif
void
foo (int SEG *p, int SEG *q)
{
*q = *p;
}

View File

@ -139,6 +139,9 @@ instrument_expr (gimple_stmt_iterator gsi, tree expr, bool is_write)
if (TREE_READONLY (base) || (VAR_P (base) && DECL_HARD_REGISTER (base)))
return false;
if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (TREE_TYPE (base))))
return false;
stmt = gsi_stmt (gsi);
loc = gimple_location (stmt);
rhs = is_vptr_store (stmt, expr, is_write);