
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
129 lines
6.3 KiB
C++
129 lines
6.3 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// <cwchar>
|
|
|
|
#include <cwchar>
|
|
#include <ctime>
|
|
#include <cstdarg>
|
|
#include <cstdio>
|
|
#include <type_traits>
|
|
|
|
#include "test_macros.h"
|
|
|
|
#ifndef NULL
|
|
#error NULL not defined
|
|
#endif
|
|
|
|
#ifndef WCHAR_MAX
|
|
#error WCHAR_MAX not defined
|
|
#endif
|
|
|
|
#ifndef WCHAR_MIN
|
|
#error WCHAR_MIN not defined
|
|
#endif
|
|
|
|
#ifndef WEOF
|
|
#error WEOF not defined
|
|
#endif
|
|
|
|
int main(int, char**)
|
|
{
|
|
std::mbstate_t mb = {};
|
|
std::size_t s = 0;
|
|
std::tm *tm = 0;
|
|
std::wint_t w = 0;
|
|
::FILE* fp = 0;
|
|
std::va_list va;
|
|
|
|
char* ns = 0;
|
|
wchar_t* ws = 0;
|
|
|
|
((void)mb); // Prevent unused warning
|
|
((void)s); // Prevent unused warning
|
|
((void)tm); // Prevent unused warning
|
|
((void)w); // Prevent unused warning
|
|
((void)fp); // Prevent unused warning
|
|
((void)va); // Prevent unused warning
|
|
((void)ns); // Prevent unused warning
|
|
((void)ws); // Prevent unused warning
|
|
|
|
ASSERT_SAME_TYPE(int, decltype(std::fwprintf(fp, L"")));
|
|
ASSERT_SAME_TYPE(int, decltype(std::fwscanf(fp, L"")));
|
|
ASSERT_SAME_TYPE(int, decltype(std::swprintf(ws, s, L"")));
|
|
ASSERT_SAME_TYPE(int, decltype(std::swscanf(L"", L"")));
|
|
ASSERT_SAME_TYPE(int, decltype(std::vfwprintf(fp, L"", va)));
|
|
ASSERT_SAME_TYPE(int, decltype(std::vfwscanf(fp, L"", va)));
|
|
ASSERT_SAME_TYPE(int, decltype(std::vswprintf(ws, s, L"", va)));
|
|
ASSERT_SAME_TYPE(int, decltype(std::vswscanf(L"", L"", va)));
|
|
ASSERT_SAME_TYPE(std::wint_t, decltype(std::fgetwc(fp)));
|
|
ASSERT_SAME_TYPE(wchar_t*, decltype(std::fgetws(ws, 0, fp)));
|
|
ASSERT_SAME_TYPE(std::wint_t, decltype(std::fputwc(L' ', fp)));
|
|
ASSERT_SAME_TYPE(int, decltype(std::fputws(L"", fp)));
|
|
ASSERT_SAME_TYPE(int, decltype(std::fwide(fp, 0)));
|
|
ASSERT_SAME_TYPE(std::wint_t, decltype(std::getwc(fp)));
|
|
ASSERT_SAME_TYPE(std::wint_t, decltype(std::putwc(L' ', fp)));
|
|
ASSERT_SAME_TYPE(std::wint_t, decltype(std::ungetwc(L' ', fp)));
|
|
ASSERT_SAME_TYPE(double, decltype(std::wcstod(L"", (wchar_t**)0)));
|
|
ASSERT_SAME_TYPE(float, decltype(std::wcstof(L"", (wchar_t**)0)));
|
|
ASSERT_SAME_TYPE(long double, decltype(std::wcstold(L"", (wchar_t**)0)));
|
|
ASSERT_SAME_TYPE(long, decltype(std::wcstol(L"", (wchar_t**)0, 0)));
|
|
ASSERT_SAME_TYPE(long long, decltype(std::wcstoll(L"", (wchar_t**)0, 0)));
|
|
ASSERT_SAME_TYPE(unsigned long, decltype(std::wcstoul(L"", (wchar_t**)0, 0)));
|
|
ASSERT_SAME_TYPE(unsigned long long, decltype(std::wcstoull(L"", (wchar_t**)0, 0)));
|
|
ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcscpy(ws, L"")));
|
|
ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcsncpy(ws, L"", s)));
|
|
ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcscat(ws, L"")));
|
|
ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcsncat(ws, L"", s)));
|
|
ASSERT_SAME_TYPE(int, decltype(std::wcscmp(L"", L"")));
|
|
ASSERT_SAME_TYPE(int, decltype(std::wcscoll(L"", L"")));
|
|
ASSERT_SAME_TYPE(int, decltype(std::wcsncmp(L"", L"", s)));
|
|
ASSERT_SAME_TYPE(std::size_t, decltype(std::wcsxfrm(ws, L"", s)));
|
|
ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcschr((wchar_t*)0, L' ')));
|
|
ASSERT_SAME_TYPE(const wchar_t*, decltype(std::wcschr((const wchar_t*)0, L' ')));
|
|
ASSERT_SAME_TYPE(std::size_t, decltype(std::wcscspn(L"", L"")));
|
|
ASSERT_SAME_TYPE(std::size_t, decltype(std::wcslen(L"")));
|
|
ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcspbrk((wchar_t*)0, L"")));
|
|
ASSERT_SAME_TYPE(const wchar_t*, decltype(std::wcspbrk((const wchar_t*)0, L"")));
|
|
ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcsrchr((wchar_t*)0, L' ')));
|
|
ASSERT_SAME_TYPE(const wchar_t*, decltype(std::wcsrchr((const wchar_t*)0, L' ')));
|
|
ASSERT_SAME_TYPE(std::size_t, decltype(std::wcsspn(L"", L"")));
|
|
ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcsstr((wchar_t*)0, L"")));
|
|
ASSERT_SAME_TYPE(const wchar_t*, decltype(std::wcsstr((const wchar_t*)0, L"")));
|
|
ASSERT_SAME_TYPE(wchar_t*, decltype(std::wcstok(ws, L"", (wchar_t**)0)));
|
|
ASSERT_SAME_TYPE(wchar_t*, decltype(std::wmemchr((wchar_t*)0, L' ', s)));
|
|
ASSERT_SAME_TYPE(const wchar_t*, decltype(std::wmemchr((const wchar_t*)0, L' ', s)));
|
|
ASSERT_SAME_TYPE(int, decltype(std::wmemcmp(L"", L"", s)));
|
|
ASSERT_SAME_TYPE(wchar_t*, decltype(std::wmemcpy(ws, L"", s)));
|
|
ASSERT_SAME_TYPE(wchar_t*, decltype(std::wmemmove(ws, L"", s)));
|
|
ASSERT_SAME_TYPE(wchar_t*, decltype(std::wmemset(ws, L' ', s)));
|
|
ASSERT_SAME_TYPE(std::size_t, decltype(std::wcsftime(ws, s, L"", tm)));
|
|
ASSERT_SAME_TYPE(wint_t, decltype(std::btowc(0)));
|
|
ASSERT_SAME_TYPE(int, decltype(std::wctob(w)));
|
|
ASSERT_SAME_TYPE(int, decltype(std::mbsinit(&mb)));
|
|
ASSERT_SAME_TYPE(std::size_t, decltype(std::mbrlen("", s, &mb)));
|
|
ASSERT_SAME_TYPE(std::size_t, decltype(std::mbrtowc(ws, "", s, &mb)));
|
|
ASSERT_SAME_TYPE(std::size_t, decltype(std::wcrtomb(ns, L' ', &mb)));
|
|
ASSERT_SAME_TYPE(std::size_t, decltype(std::mbsrtowcs(ws, (const char**)0, s, &mb)));
|
|
ASSERT_SAME_TYPE(std::size_t, decltype(std::wcsrtombs(ns, (const wchar_t**)0, s, &mb)));
|
|
|
|
#ifndef _LIBCPP_HAS_NO_STDIN
|
|
ASSERT_SAME_TYPE(std::wint_t, decltype(std::getwchar()));
|
|
ASSERT_SAME_TYPE(int, decltype(std::vwscanf(L"", va)));
|
|
ASSERT_SAME_TYPE(int, decltype(std::wscanf(L"")));
|
|
#endif
|
|
|
|
#ifndef _LIBCPP_HAS_NO_STDOUT
|
|
ASSERT_SAME_TYPE(std::wint_t, decltype(std::putwchar(L' ')));
|
|
ASSERT_SAME_TYPE(int, decltype(std::vwprintf(L"", va)));
|
|
ASSERT_SAME_TYPE(int, decltype(std::wprintf(L"")));
|
|
#endif
|
|
|
|
return 0;
|
|
}
|