
In 5fd17ab, we worked around the Apple system headers not providing const-correct overloads for some <string.h> functions. However, that required an attribute that was only present in recent Clangs at the time. We can now assume that all supported Clang versions on Apple platforms do support that attribute. Differential Revision: https://reviews.llvm.org/D100477
60 lines
2.5 KiB
C++
60 lines
2.5 KiB
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// <cstring>
|
|
|
|
#include <cstring>
|
|
#include <type_traits>
|
|
|
|
#include "test_macros.h"
|
|
|
|
#ifndef NULL
|
|
#error NULL not defined
|
|
#endif
|
|
|
|
int main(int, char**)
|
|
{
|
|
std::size_t s = 0;
|
|
void* vp = 0;
|
|
const void* vpc = 0;
|
|
char* cp = 0;
|
|
const char* cpc = 0;
|
|
|
|
ASSERT_SAME_TYPE(void*, decltype(std::memcpy(vp, vpc, s)));
|
|
ASSERT_SAME_TYPE(void*, decltype(std::memmove(vp, vpc, s)));
|
|
ASSERT_SAME_TYPE(char*, decltype(std::strcpy(cp, cpc)));
|
|
ASSERT_SAME_TYPE(char*, decltype(std::strncpy(cp, cpc, s)));
|
|
ASSERT_SAME_TYPE(char*, decltype(std::strcat(cp, cpc)));
|
|
ASSERT_SAME_TYPE(char*, decltype(std::strncat(cp, cpc, s)));
|
|
ASSERT_SAME_TYPE(int, decltype(std::memcmp(vpc, vpc, s)));
|
|
ASSERT_SAME_TYPE(int, decltype(std::strcmp(cpc, cpc)));
|
|
ASSERT_SAME_TYPE(int, decltype(std::strncmp(cpc, cpc, s)));
|
|
ASSERT_SAME_TYPE(int, decltype(std::strcoll(cpc, cpc)));
|
|
ASSERT_SAME_TYPE(std::size_t, decltype(std::strxfrm(cp, cpc, s)));
|
|
ASSERT_SAME_TYPE(void*, decltype(std::memchr(vp, 0, s)));
|
|
ASSERT_SAME_TYPE(const void*, decltype(std::memchr(vpc, 0, s)));
|
|
ASSERT_SAME_TYPE(char*, decltype(std::strchr(cp, 0)));
|
|
ASSERT_SAME_TYPE(const char*, decltype(std::strchr(cpc, 0)));
|
|
ASSERT_SAME_TYPE(std::size_t, decltype(std::strcspn(cpc, cpc)));
|
|
ASSERT_SAME_TYPE(char*, decltype(std::strpbrk(cp, cpc)));
|
|
ASSERT_SAME_TYPE(const char*, decltype(std::strpbrk(cpc, cpc)));
|
|
ASSERT_SAME_TYPE(char*, decltype(std::strrchr(cp, 0)));
|
|
ASSERT_SAME_TYPE(const char*, decltype(std::strrchr(cpc, 0)));
|
|
ASSERT_SAME_TYPE(std::size_t, decltype(std::strspn(cpc, cpc)));
|
|
ASSERT_SAME_TYPE(char*, decltype(std::strstr(cp, cpc)));
|
|
ASSERT_SAME_TYPE(const char*, decltype(std::strstr(cpc, cpc)));
|
|
#ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS
|
|
ASSERT_SAME_TYPE(char*, decltype(std::strtok(cp, cpc)));
|
|
#endif
|
|
ASSERT_SAME_TYPE(void*, decltype(std::memset(vp, 0, s)));
|
|
ASSERT_SAME_TYPE(char*, decltype(std::strerror(0)));
|
|
ASSERT_SAME_TYPE(std::size_t, decltype(std::strlen(cpc)));
|
|
|
|
return 0;
|
|
}
|