]>
Commit | Line | Data |
---|---|---|
1a4d82fc JJ |
1 | //===-- tsan_string.cc ----------------------------------------------------===// |
2 | // | |
3 | // The LLVM Compiler Infrastructure | |
4 | // | |
5 | // This file is distributed under the University of Illinois Open Source | |
6 | // License. See LICENSE.TXT for details. | |
7 | // | |
8 | //===----------------------------------------------------------------------===// | |
9 | // | |
10 | // This file is a part of ThreadSanitizer (TSan), a race detector. | |
11 | // | |
12 | //===----------------------------------------------------------------------===// | |
13 | #include "tsan_test_util.h" | |
14 | #include "gtest/gtest.h" | |
15 | #include <string.h> | |
16 | ||
17 | namespace __tsan { | |
18 | ||
19 | TEST(ThreadSanitizer, Memcpy) { | |
20 | char data0[7] = {1, 2, 3, 4, 5, 6, 7}; | |
21 | char data[7] = {42, 42, 42, 42, 42, 42, 42}; | |
22 | MainThread().Memcpy(data+1, data0+1, 5); | |
23 | EXPECT_EQ(data[0], 42); | |
24 | EXPECT_EQ(data[1], 2); | |
25 | EXPECT_EQ(data[2], 3); | |
26 | EXPECT_EQ(data[3], 4); | |
27 | EXPECT_EQ(data[4], 5); | |
28 | EXPECT_EQ(data[5], 6); | |
29 | EXPECT_EQ(data[6], 42); | |
30 | MainThread().Memset(data+1, 13, 5); | |
31 | EXPECT_EQ(data[0], 42); | |
32 | EXPECT_EQ(data[1], 13); | |
33 | EXPECT_EQ(data[2], 13); | |
34 | EXPECT_EQ(data[3], 13); | |
35 | EXPECT_EQ(data[4], 13); | |
36 | EXPECT_EQ(data[5], 13); | |
37 | EXPECT_EQ(data[6], 42); | |
38 | } | |
39 | ||
40 | TEST(ThreadSanitizer, MemcpyRace1) { | |
41 | char *data = new char[10]; | |
42 | char *data1 = new char[10]; | |
43 | char *data2 = new char[10]; | |
44 | ScopedThread t1, t2; | |
45 | t1.Memcpy(data, data1, 10); | |
46 | t2.Memcpy(data, data2, 10, true); | |
47 | } | |
48 | ||
1a4d82fc JJ |
49 | TEST(ThreadSanitizer, MemcpyRace2) { |
50 | char *data = new char[10]; | |
51 | char *data1 = new char[10]; | |
52 | char *data2 = new char[10]; | |
53 | ScopedThread t1, t2; | |
54 | t1.Memcpy(data+5, data1, 1); | |
55 | t2.Memcpy(data+3, data2, 4, true); | |
56 | } | |
1a4d82fc JJ |
57 | |
58 | TEST(ThreadSanitizer, MemcpyRace3) { | |
59 | char *data = new char[10]; | |
60 | char *data1 = new char[10]; | |
61 | char *data2 = new char[10]; | |
62 | ScopedThread t1, t2; | |
63 | t1.Memcpy(data, data1, 10); | |
64 | t2.Memcpy(data1, data2, 10, true); | |
65 | } | |
66 | ||
67 | TEST(ThreadSanitizer, MemcpyStack) { | |
68 | char *data = new char[10]; | |
69 | char *data1 = new char[10]; | |
70 | ScopedThread t1, t2; | |
71 | t1.Memcpy(data, data1, 10); | |
72 | t2.Memcpy(data, data1, 10, true); | |
73 | } | |
74 | ||
75 | TEST(ThreadSanitizer, MemsetRace1) { | |
76 | char *data = new char[10]; | |
77 | ScopedThread t1, t2; | |
78 | t1.Memset(data, 1, 10); | |
79 | t2.Memset(data, 2, 10, true); | |
80 | } | |
81 | ||
82 | } // namespace __tsan |