Skip to content

Commit a7578f8

Browse files
AutomergerAutomerger
authored andcommitted
Propagating prior merge from 'llvm.org/master'.
apple-llvm-split-commit: 3744f87a245d54cc2cb9246e4a40af8878d2babe apple-llvm-split-dir: compiler-rt/
2 parents fbace0c + 2cf990f commit a7578f8

File tree

13 files changed

+226
-205
lines changed

13 files changed

+226
-205
lines changed

compiler-rt/CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,15 @@ if(DEFINED TARGET_powerpc64le_CFLAGS)
288288
append_list_if(COMPILER_RT_HAS_FNO_FUNCTION_SECTIONS_FLAG -fno-function-sections TARGET_powerpc64le_CFLAGS)
289289
endif()
290290

291+
# The following is a workaround for s390x. This avoids creation of "partial
292+
# inline" function fragments when building the asan libraries with certain
293+
# GCC versions. The presence of those fragments, in particular for the
294+
# interceptors, changes backtraces seen in asan error cases, which causes
295+
# testsuite failures.
296+
if("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "s390x")
297+
append_list_if(COMPILER_RT_HAS_FNO_PARTIAL_INLINING_FLAG -fno-partial-inlining SANITIZER_COMMON_CFLAGS)
298+
endif()
299+
291300
if(MSVC)
292301
# Replace the /M[DT][d] flags with /MT, and strip any definitions of _DEBUG,
293302
# which cause definition mismatches at link time.

compiler-rt/cmake/config-ix.cmake

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ check_cxx_compiler_flag("-Werror -msse3" COMPILER_RT_HAS_MSSE3_FLAG)
7474
check_cxx_compiler_flag("-Werror -msse4.2" COMPILER_RT_HAS_MSSE4_2_FLAG)
7575
check_cxx_compiler_flag(--sysroot=. COMPILER_RT_HAS_SYSROOT_FLAG)
7676
check_cxx_compiler_flag("-Werror -mcrc" COMPILER_RT_HAS_MCRC_FLAG)
77+
check_cxx_compiler_flag(-fno-partial-inlining COMPILER_RT_HAS_FNO_PARTIAL_INLINING_FLAG)
7778

7879
if(NOT WIN32 AND NOT CYGWIN)
7980
# MinGW warns if -fvisibility-inlines-hidden is used.
@@ -207,32 +208,6 @@ macro(get_test_cc_for_arch arch cc_out cflags_out)
207208
endif()
208209
endmacro()
209210

210-
# Returns CFLAGS that should be used to run tests for the
211-
# specific apple platform and architecture.
212-
function(get_test_cflags_for_apple_platform platform arch cflags_out)
213-
is_valid_apple_platform("${platform}" is_valid_platform)
214-
if (NOT is_valid_platform)
215-
message(FATAL_ERROR "\"${platform}\" is not a valid apple platform")
216-
endif()
217-
set(test_cflags "")
218-
get_target_flags_for_arch(${arch} test_cflags)
219-
list(APPEND test_cflags ${DARWIN_${platform}_CFLAGS})
220-
string(REPLACE ";" " " test_cflags_str "${test_cflags}")
221-
string(APPEND test_cflags_str "${COMPILER_RT_TEST_COMPILER_CFLAGS}")
222-
set(${cflags_out} "${test_cflags_str}" PARENT_SCOPE)
223-
endfunction()
224-
225-
function(is_valid_apple_platform platform is_valid_out)
226-
set(is_valid FALSE)
227-
if ("${platform}" STREQUAL "")
228-
message(FATAL_ERROR "platform cannot be empty")
229-
endif()
230-
if ("${platform}" MATCHES "^(osx|((ios|watchos|tvos)(sim)?))$")
231-
set(is_valid TRUE)
232-
endif()
233-
set(${is_valid_out} ${is_valid} PARENT_SCOPE)
234-
endfunction()
235-
236211
set(ARM64 aarch64)
237212
set(ARM32 arm armhf)
238213
set(HEXAGON hexagon)

compiler-rt/lib/fuzzer/tests/FuzzedDataProviderUnittest.cpp

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,13 @@ const uint8_t Data[] = {
107107

108108
TEST(FuzzedDataProvider, ConsumeBytes) {
109109
FuzzedDataProvider DataProv(Data, sizeof(Data));
110-
EXPECT_EQ(std::vector<char>(1, 0x8A), DataProv.ConsumeBytes<char>(1));
110+
EXPECT_EQ(std::vector<unsigned char>(1, 0x8A),
111+
DataProv.ConsumeBytes<unsigned char>(1));
111112
EXPECT_EQ(std::vector<uint8_t>(
112113
{0x19, 0x0D, 0x44, 0x37, 0x0D, 0x38, 0x5E, 0x9B, 0xAA, 0xF3}),
113114
DataProv.ConsumeBytes<uint8_t>(10));
114115

115-
std::vector<unsigned char> UChars = DataProv.ConsumeBytes(24);
116+
std::vector<unsigned char> UChars = DataProv.ConsumeBytes<unsigned char>(24);
116117
EXPECT_EQ(std::vector<unsigned char>({0xDA, 0xAA, 0x88, 0xF2, 0x9B, 0x6C,
117118
0xBA, 0xBE, 0xB1, 0xF2, 0xCF, 0x13,
118119
0xB8, 0xAC, 0x1A, 0x7F, 0x1C, 0xC9,
@@ -123,6 +124,28 @@ TEST(FuzzedDataProvider, ConsumeBytes) {
123124
DataProv.ConsumeBytes<signed char>(31337));
124125
}
125126

127+
TEST(FuzzedDataProvider, ConsumeBytesWithTerminator) {
128+
FuzzedDataProvider DataProv(Data, sizeof(Data));
129+
EXPECT_EQ(std::vector<unsigned char>({0x8A, 0x00}),
130+
DataProv.ConsumeBytesWithTerminator<unsigned char>(1));
131+
EXPECT_EQ(std::vector<uint8_t>({0x19, 0x0D, 0x44, 0x37, 0x0D, 0x38, 0x5E,
132+
0x9B, 0xAA, 0xF3, 111}),
133+
DataProv.ConsumeBytesWithTerminator<uint8_t>(10, 111));
134+
135+
std::vector<unsigned char> UChars =
136+
DataProv.ConsumeBytesWithTerminator<unsigned char>(24);
137+
EXPECT_EQ(std::vector<unsigned char>(
138+
{0xDA, 0xAA, 0x88, 0xF2, 0x9B, 0x6C, 0xBA, 0xBE, 0xB1,
139+
0xF2, 0xCF, 0x13, 0xB8, 0xAC, 0x1A, 0x7F, 0x1C, 0xC9,
140+
0x90, 0xD0, 0xD9, 0x5C, 0x42, 0xB3, 0x00}),
141+
UChars);
142+
143+
std::vector<signed char> Expected(Data + 1 + 10 + 24, Data + sizeof(Data));
144+
Expected.push_back(65);
145+
EXPECT_EQ(Expected,
146+
DataProv.ConsumeBytesWithTerminator<signed char>(31337, 65));
147+
}
148+
126149
TEST(FuzzedDataProvider, ConsumeBytesAsString) {
127150
FuzzedDataProvider DataProv(Data, sizeof(Data));
128151
EXPECT_EQ(std::string("\x8A\x19\x0D\x44\x37\x0D\x38\x5E\x9B\xAA\xF3\xDA"),
@@ -182,14 +205,15 @@ TEST(FuzzedDataProvider, ConsumeRemainingBytes) {
182205
{
183206
FuzzedDataProvider DataProv(Data, sizeof(Data));
184207
EXPECT_EQ(std::vector<uint8_t>(Data, Data + sizeof(Data)),
185-
DataProv.ConsumeRemainingBytes());
186-
EXPECT_EQ(std::vector<uint8_t>(), DataProv.ConsumeRemainingBytes());
208+
DataProv.ConsumeRemainingBytes<uint8_t>());
209+
EXPECT_EQ(std::vector<uint8_t>(),
210+
DataProv.ConsumeRemainingBytes<uint8_t>());
187211
}
188212

189213
{
190214
FuzzedDataProvider DataProv(Data, sizeof(Data));
191215
EXPECT_EQ(std::vector<uint8_t>(Data, Data + 123),
192-
DataProv.ConsumeBytes(123));
216+
DataProv.ConsumeBytes<uint8_t>(123));
193217
EXPECT_EQ(std::vector<char>(Data + 123, Data + sizeof(Data)),
194218
DataProv.ConsumeRemainingBytes<char>());
195219
}
@@ -206,7 +230,7 @@ TEST(FuzzedDataProvider, ConsumeRemainingBytesAsString) {
206230
{
207231
FuzzedDataProvider DataProv(Data, sizeof(Data));
208232
EXPECT_EQ(std::vector<uint8_t>(Data, Data + 123),
209-
DataProv.ConsumeBytes(123));
233+
DataProv.ConsumeBytes<uint8_t>(123));
210234
EXPECT_EQ(std::string(Data + 123, Data + sizeof(Data)),
211235
DataProv.ConsumeRemainingBytesAsString());
212236
}
@@ -265,9 +289,17 @@ TEST(FuzzedDataProvider, PickValueInArray) {
265289
EXPECT_EQ(uint8_t(0x69), DataProv.PickValueInArray(Data));
266290
EXPECT_EQ(uint8_t(0xD6), DataProv.PickValueInArray(Data));
267291

292+
EXPECT_EQ(uint32_t(777), DataProv.PickValueInArray<uint32_t>({1337, 777}));
293+
EXPECT_EQ(uint32_t(777), DataProv.PickValueInArray<uint32_t>({1337, 777}));
294+
EXPECT_EQ(uint64_t(1337), DataProv.PickValueInArray<uint64_t>({1337, 777}));
295+
EXPECT_EQ(size_t(777), DataProv.PickValueInArray<size_t>({1337, 777}));
296+
EXPECT_EQ(int16_t(1337), DataProv.PickValueInArray<int16_t>({1337, 777}));
297+
EXPECT_EQ(int32_t(777), DataProv.PickValueInArray<int32_t>({1337, 777}));
298+
EXPECT_EQ(int64_t(777), DataProv.PickValueInArray<int64_t>({1337, 777}));
299+
268300
// Exhaust the buffer.
269301
auto String = DataProv.ConsumeBytesAsString(31337);
270-
EXPECT_EQ(size_t(1007), String.length());
302+
EXPECT_EQ(size_t(1000), String.length());
271303
EXPECT_EQ(uint8_t(0x8A), DataProv.PickValueInArray(Data));
272304
}
273305

@@ -306,12 +338,13 @@ TEST(FuzzedDataProvider, remaining_bytes) {
306338
EXPECT_EQ(size_t(1024), DataProv.remaining_bytes());
307339
EXPECT_EQ(false, DataProv.ConsumeBool());
308340
EXPECT_EQ(size_t(1024 - 1), DataProv.remaining_bytes());
309-
EXPECT_EQ(std::vector<uint8_t>(Data, Data + 8), DataProv.ConsumeBytes(8));
341+
EXPECT_EQ(std::vector<uint8_t>(Data, Data + 8),
342+
DataProv.ConsumeBytes<uint8_t>(8));
310343
EXPECT_EQ(size_t(1024 - 1 - 8), DataProv.remaining_bytes());
311344

312345
// Exhaust the buffer.
313346
EXPECT_EQ(std::vector<uint8_t>(Data + 8, Data + sizeof(Data) - 1),
314-
DataProv.ConsumeRemainingBytes());
347+
DataProv.ConsumeRemainingBytes<uint8_t>());
315348
EXPECT_EQ(size_t(0), DataProv.remaining_bytes());
316349
}
317350

0 commit comments

Comments
 (0)