Add -Wtsan.

gcc/ChangeLog:

	PR sanitizer/97868
	* common.opt: Add new warning -Wtsan.
	* doc/invoke.texi: Likewise.
	* tsan.c (instrument_builtin_call): Warn users about unsupported
	std::atomic_thread_fence.

gcc/testsuite/ChangeLog:

	PR sanitizer/97868
	* gcc.dg/tsan/atomic-fence.c: New test.
This commit is contained in:
Martin Liska 2020-12-07 15:55:59 +01:00
parent 5c5eb7e487
commit 8833eab446
4 changed files with 32 additions and 1 deletions

View File

@ -842,6 +842,10 @@ Wvector-operation-performance
Common Var(warn_vector_operation_performance) Warning
Warn when a vector operation is compiled outside the SIMD.
Wtsan
Common Var(warn_tsan) Init(1) Warning
Warn about unsupported features in ThreadSanitizer.
Xassembler
Driver Separate

View File

@ -387,7 +387,7 @@ Objective-C and Objective-C++ Dialects}.
-Wswitch -Wno-switch-bool -Wswitch-default -Wswitch-enum @gol
-Wno-switch-outside-range -Wno-switch-unreachable -Wsync-nand @gol
-Wsystem-headers -Wtautological-compare -Wtrampolines -Wtrigraphs @gol
-Wtype-limits -Wundef @gol
-Wtsan -Wtype-limits -Wundef @gol
-Wuninitialized -Wunknown-pragmas @gol
-Wunsuffixed-float-constants -Wunused @gol
-Wunused-but-set-parameter -Wunused-but-set-variable @gol
@ -8023,6 +8023,16 @@ Note that the code above is invalid in C++11.
This warning is enabled by default.
@item -Wtsan
@opindex Wtsan
@opindex Wno-tsan
Warn about unsupported features in ThreadSanitizer.
ThreadSanitizer does not support @code{std::atomic_thread_fence} and
can report false positives.
This warning is enabled by default.
@item -Wtype-limits
@opindex Wtype-limits
@opindex Wno-type-limits

View File

@ -0,0 +1,11 @@
/* PR sanitizer/97868 */
/* { dg-do compile } */
/* { dg-options "-fsanitize=thread" } */
int
main ()
{
__atomic_thread_fence (__ATOMIC_RELAXED); /* { dg-warning ".atomic_thread_fence. is not supported with .-fsanitize=thread." } */
return 0;
}

View File

@ -45,6 +45,7 @@ along with GCC; see the file COPYING3. If not see
#include "asan.h"
#include "builtins.h"
#include "target.h"
#include "diagnostic-core.h"
/* Number of instrumented memory accesses in the current function. */
@ -500,6 +501,11 @@ instrument_builtin_call (gimple_stmt_iterator *gsi)
continue;
else
{
if (fcode == BUILT_IN_ATOMIC_THREAD_FENCE)
warning_at (gimple_location (stmt), OPT_Wtsan,
"%qs is not supported with %qs", "atomic_thread_fence",
"-fsanitize=thread");
tree decl = builtin_decl_implicit (tsan_atomic_table[i].tsan_fcode);
if (decl == NULL_TREE)
return;