]>
git.proxmox.com Git - rustc.git/blob - src/compiler-rt/lib/tsan/tests/unit/tsan_flags_test.cc
1 //===-- tsan_flags_test.cc ------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file is a part of ThreadSanitizer (TSan), a race detector.
12 //===----------------------------------------------------------------------===//
13 #include "tsan_flags.h"
15 #include "gtest/gtest.h"
21 // At least should not crash.
23 InitializeFlags(&f
, 0);
24 InitializeFlags(&f
, "");
27 TEST(Flags
, DefaultValues
) {
30 f
.enable_annotations
= false;
31 InitializeFlags(&f
, "");
32 EXPECT_EQ(true, f
.enable_annotations
);
35 static const char *options1
=
36 " enable_annotations=0"
37 " suppress_equal_stacks=0"
38 " suppress_equal_addresses=0"
40 " report_thread_leaks=0"
41 " report_destroy_locked=0"
42 " report_mutex_bugs=0"
43 " report_signal_unsafe=0"
44 " report_atomic_races=0"
45 " force_seq_cst_atomics=0"
48 " atexit_sleep_ms=222"
50 " flush_memory_ms=444"
51 " flush_symbolizer_ms=555"
52 " memory_limit_mb=666"
54 " running_on_valgrind=0"
57 " die_after_fork=true"
60 static const char *options2
=
61 " enable_annotations=true"
62 " suppress_equal_stacks=true"
63 " suppress_equal_addresses=true"
65 " report_thread_leaks=true"
66 " report_destroy_locked=true"
67 " report_mutex_bugs=true"
68 " report_signal_unsafe=true"
69 " report_atomic_races=true"
70 " force_seq_cst_atomics=true"
73 " atexit_sleep_ms=123"
74 " profile_memory=bbbbb"
75 " flush_memory_ms=234"
76 " flush_symbolizer_ms=345"
77 " memory_limit_mb=456"
79 " running_on_valgrind=true"
82 " die_after_fork=false"
85 void VerifyOptions1(Flags
*f
) {
86 EXPECT_EQ(f
->enable_annotations
, 0);
87 EXPECT_EQ(f
->suppress_equal_stacks
, 0);
88 EXPECT_EQ(f
->suppress_equal_addresses
, 0);
89 EXPECT_EQ(f
->report_bugs
, 0);
90 EXPECT_EQ(f
->report_thread_leaks
, 0);
91 EXPECT_EQ(f
->report_destroy_locked
, 0);
92 EXPECT_EQ(f
->report_mutex_bugs
, 0);
93 EXPECT_EQ(f
->report_signal_unsafe
, 0);
94 EXPECT_EQ(f
->report_atomic_races
, 0);
95 EXPECT_EQ(f
->force_seq_cst_atomics
, 0);
96 EXPECT_EQ(f
->print_benign
, 0);
97 EXPECT_EQ(f
->halt_on_error
, 0);
98 EXPECT_EQ(f
->atexit_sleep_ms
, 222);
99 EXPECT_EQ(f
->profile_memory
, std::string("qqq"));
100 EXPECT_EQ(f
->flush_memory_ms
, 444);
101 EXPECT_EQ(f
->flush_symbolizer_ms
, 555);
102 EXPECT_EQ(f
->memory_limit_mb
, 666);
103 EXPECT_EQ(f
->stop_on_start
, 0);
104 EXPECT_EQ(f
->running_on_valgrind
, 0);
105 EXPECT_EQ(f
->history_size
, 5);
106 EXPECT_EQ(f
->io_sync
, 1);
107 EXPECT_EQ(f
->die_after_fork
, true);
110 void VerifyOptions2(Flags
*f
) {
111 EXPECT_EQ(f
->enable_annotations
, true);
112 EXPECT_EQ(f
->suppress_equal_stacks
, true);
113 EXPECT_EQ(f
->suppress_equal_addresses
, true);
114 EXPECT_EQ(f
->report_bugs
, true);
115 EXPECT_EQ(f
->report_thread_leaks
, true);
116 EXPECT_EQ(f
->report_destroy_locked
, true);
117 EXPECT_EQ(f
->report_mutex_bugs
, true);
118 EXPECT_EQ(f
->report_signal_unsafe
, true);
119 EXPECT_EQ(f
->report_atomic_races
, true);
120 EXPECT_EQ(f
->force_seq_cst_atomics
, true);
121 EXPECT_EQ(f
->print_benign
, true);
122 EXPECT_EQ(f
->halt_on_error
, true);
123 EXPECT_EQ(f
->atexit_sleep_ms
, 123);
124 EXPECT_EQ(f
->profile_memory
, std::string("bbbbb"));
125 EXPECT_EQ(f
->flush_memory_ms
, 234);
126 EXPECT_EQ(f
->flush_symbolizer_ms
, 345);
127 EXPECT_EQ(f
->memory_limit_mb
, 456);
128 EXPECT_EQ(f
->stop_on_start
, true);
129 EXPECT_EQ(f
->running_on_valgrind
, true);
130 EXPECT_EQ(f
->history_size
, 6);
131 EXPECT_EQ(f
->io_sync
, 2);
132 EXPECT_EQ(f
->die_after_fork
, false);
135 static const char *test_default_options
;
136 extern "C" const char *__tsan_default_options() {
137 return test_default_options
;
140 TEST(Flags
, ParseDefaultOptions
) {
143 test_default_options
= options1
;
144 InitializeFlags(&f
, "");
147 test_default_options
= options2
;
148 InitializeFlags(&f
, "");
152 TEST(Flags
, ParseEnvOptions
) {
155 InitializeFlags(&f
, options1
);
158 InitializeFlags(&f
, options2
);
162 TEST(Flags
, ParsePriority
) {
165 test_default_options
= options2
;
166 InitializeFlags(&f
, options1
);
169 test_default_options
= options1
;
170 InitializeFlags(&f
, options2
);
174 } // namespace __tsan