Skip to content

Commit e560125

Browse files
committed
Create RuntimeUnittest library for C++ runtime unit tests from lit.
Create a new RuntimeUnittest library alongside the other stdlib unit tests so we can write C++ runtime unit tests callable from lit. Move runtime exclusivity tests into the stdlib unittest library and create lit tests so we can verify that the runtime crashes with an error message.
1 parent 2ecb48a commit e560125

File tree

6 files changed

+111
-34
lines changed

6 files changed

+111
-34
lines changed

stdlib/private/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ endif()
55
if(SWIFT_BUILD_SDK_OVERLAY)
66
# SwiftPrivatePthreadExtras makes use of Darwin/Glibc, which is part of the
77
# SDK overlay. It can't be built separately from the SDK overlay.
8+
add_subdirectory(RuntimeUnittest)
89
add_subdirectory(StdlibUnittest)
910
add_subdirectory(StdlibUnicodeUnittest)
1011
add_subdirectory(StdlibCollectionUnittest)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
set(swift_stdlib_unittest_compile_flags)
2+
3+
add_swift_library(swiftRuntimeUnittest ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} IS_STDLIB
4+
# This file should be listed the first. Module name is inferred from the
5+
# filename.
6+
RuntimeUnittest.swift
7+
8+
ExclusivityTests.cpp
9+
10+
SWIFT_MODULE_DEPENDS StdlibUnittest
11+
SWIFT_MODULE_DEPENDS_LINUX Glibc
12+
SWIFT_MODULE_DEPENDS_FREEBSD Glibc
13+
SWIFT_MODULE_DEPENDS_CYGWIN Glibc
14+
SWIFT_MODULE_DEPENDS_HAIKU Glibc
15+
SWIFT_COMPILE_FLAGS ${swift_stdlib_unittest_compile_flags}
16+
TARGET_SDKS ALL_POSIX_PLATFORMS
17+
INSTALL_IN_COMPONENT stdlib-experimental)
18+

unittests/runtime/Exclusivity.cpp renamed to stdlib/private/RuntimeUnittest/ExclusivityTests.cpp

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,59 @@
1-
//===--- Exclusivity.cpp --------------------------------------------------===//
2-
//
3-
// This source file is part of the Swift.org open source project
4-
//
5-
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
6-
// Licensed under Apache License v2.0 with Runtime Library Exception
7-
//
8-
// See https://swift.org/LICENSE.txt for license information
9-
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10-
//
11-
//===----------------------------------------------------------------------===//
12-
131
#include "swift/Runtime/Exclusivity.h"
142
#include "swift/Runtime/Metadata.h"
15-
#include "gtest/gtest.h"
163

174
using namespace swift;
185

19-
#ifndef NDEBUG
20-
TEST(TestExclusivity, testNullPC) {
6+
SWIFT_CC(swift) SWIFT_RUNTIME_LIBRARY_VISIBILITY extern "C"
7+
void testExclusivityNullPC() {
218
ValueBuffer scratch, scratch2;
229
long var;
2310
swift_beginAccess(&var, &scratch,
24-
ExclusivityFlags::WarningOnly | ExclusivityFlags::Read,
11+
ExclusivityFlags::Read | ExclusivityFlags::Tracking,
2512
/*pc=*/0);
26-
swift_beginAccess(&var, &scratch2,
27-
ExclusivityFlags::WarningOnly | ExclusivityFlags::Modify,
13+
swift_beginAccess(&var, &scratch2, ExclusivityFlags::Modify,
2814
/*pc=*/0);
2915
swift_endAccess(&scratch2);
3016
swift_endAccess(&scratch);
3117
}
32-
#endif
3318

34-
#ifndef NDEBUG
35-
TEST(TestExclusivity, testPCOne) {
19+
SWIFT_CC(swift) SWIFT_RUNTIME_LIBRARY_VISIBILITY extern "C"
20+
void testExclusivityPCOne() {
3621
ValueBuffer scratch, scratch2;
3722
long var;
3823
swift_beginAccess(&var, &scratch,
39-
ExclusivityFlags::WarningOnly | ExclusivityFlags::Read,
24+
ExclusivityFlags::Read | ExclusivityFlags::Tracking,
4025
/*pc=*/(void *)1);
41-
swift_beginAccess(&var, &scratch2,
42-
ExclusivityFlags::WarningOnly | ExclusivityFlags::Modify,
26+
swift_beginAccess(&var, &scratch2, ExclusivityFlags::Modify,
4327
/*pc=*/(void *)1);
4428
swift_endAccess(&scratch2);
4529
swift_endAccess(&scratch);
4630
}
47-
#endif
4831

49-
#ifndef NDEBUG
50-
TEST(TestExclusivity, testBogusPC) {
32+
SWIFT_CC(swift) SWIFT_RUNTIME_LIBRARY_VISIBILITY extern "C"
33+
void testExclusivityBogusPC() {
5134
ValueBuffer scratch, scratch2;
5235
long var;
5336
swift_beginAccess(&var, &scratch,
54-
ExclusivityFlags::WarningOnly | ExclusivityFlags::Read,
37+
ExclusivityFlags::Read | ExclusivityFlags::Tracking,
5538
/*pc=*/(void *)0xdeadbeefdeadbeefULL);
56-
swift_beginAccess(&var, &scratch2,
57-
ExclusivityFlags::WarningOnly | ExclusivityFlags::Modify,
39+
swift_beginAccess(&var, &scratch2, ExclusivityFlags::Modify,
5840
/*pc=*/(void *)0xdeadbeefdeadbeefULL);
5941
swift_endAccess(&scratch2);
6042
swift_endAccess(&scratch);
6143
}
62-
#endif
44+
6345

6446
// rdar://32866493
65-
TEST(TestExclusivity, testNonNested) {
47+
SWIFT_CC(swift) SWIFT_RUNTIME_LIBRARY_VISIBILITY extern "C"
48+
void testExclusivityNonNested() {
6649
const int N = 5;
6750
ValueBuffer scratches[N];
6851
long vars[N];
6952

7053
auto begin = [&](unsigned i) {
7154
assert(i < N);
72-
swift_beginAccess(&vars[i], &scratches[i], ExclusivityFlags::Modify, 0);
55+
swift_beginAccess(&vars[i], &scratches[i],
56+
ExclusivityFlags::Modify | ExclusivityFlags::Tracking, 0);
7357
};
7458
auto end = [&](unsigned i) {
7559
assert(i < N);
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
//===--- RuntimeUnittest.swift ---------------------------------------------===//
2+
//
3+
// This source file is part of the Swift.org open source project
4+
//
5+
// Copyright (c) 2014 - 2018 Apple Inc. and the Swift project authors
6+
// Licensed under Apache License v2.0 with Runtime Library Exception
7+
//
8+
// See https://swift.org/LICENSE.txt for license information
9+
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
10+
//
11+
// Make runtime unit tests available to the stdlib unit test harness.
12+
//
13+
//===----------------------------------------------------------------------===//
14+
15+
// namespace
16+
public enum SwiftRuntimeUnitTest {
17+
@_silgen_name("testExclusivityNullPC")
18+
private static func _testExclusivityNullPC()
19+
20+
public static func testExclusivityNullPC() {
21+
_testExclusivityNullPC()
22+
}
23+
24+
@_silgen_name("testExclusivityPCOne")
25+
private static func _testExclusivityPCOne()
26+
27+
public static func testExclusivityPCOne() {
28+
_testExclusivityPCOne()
29+
}
30+
31+
@_silgen_name("testExclusivityBogusPC")
32+
private static func _testExclusivityBogusPC()
33+
34+
public static func testExclusivityBogusPC() {
35+
_testExclusivityBogusPC()
36+
}
37+
38+
@_silgen_name("testExclusivityNonNested")
39+
private static func _testExclusivityNonNestedPC()
40+
41+
public static func testExclusivityNonNestedPC() {
42+
_testExclusivityNonNestedPC()
43+
}
44+
}

unittests/runtime/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ if(("${SWIFT_HOST_VARIANT_SDK}" STREQUAL "${SWIFT_PRIMARY_VARIANT_SDK}") AND
3636
Array.cpp
3737
CompatibilityOverride.cpp
3838
Concurrent.cpp
39-
Exclusivity.cpp
4039
Metadata.cpp
4140
Mutex.cpp
4241
Enum.cpp
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// RUN: %target-run-simple-swift
2+
// REQUIRES: executable_test
3+
4+
import StdlibUnittest
5+
import RuntimeUnittest
6+
7+
var ExclusivityTestSuite = TestSuite("Exclusivity")
8+
9+
ExclusivityTestSuite.test("testExclusivityNullPC") {
10+
expectCrash(withMessage: "Simultaneous accesses") {
11+
SwiftRuntimeUnitTest.testExclusivityNullPC()
12+
}
13+
}
14+
15+
ExclusivityTestSuite.test("testExclusivityPCOne") {
16+
expectCrash(withMessage: "Simultaneous accesses") {
17+
SwiftRuntimeUnitTest.testExclusivityPCOne()
18+
}
19+
}
20+
21+
ExclusivityTestSuite.test("testExclusivityBogusPC") {
22+
expectCrash(withMessage: "Simultaneous accesses") {
23+
SwiftRuntimeUnitTest.testExclusivityBogusPC()
24+
}
25+
}
26+
27+
ExclusivityTestSuite.test("testExclusivityNonNestedPC") {
28+
SwiftRuntimeUnitTest.testExclusivityNonNestedPC()
29+
}
30+
31+
runAllTests()

0 commit comments

Comments
 (0)