1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// test <cstdio> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cstdio> 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <type_traits> 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef BUFSIZ 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error BUFSIZ not defined 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef EOF 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error EOF not defined 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef FILENAME_MAX 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error FILENAME_MAX not defined 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef FOPEN_MAX 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error FOPEN_MAX not defined 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef L_tmpnam 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error L_tmpnam not defined 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef NULL 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error NULL not defined 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef SEEK_CUR 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error SEEK_CUR not defined 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef SEEK_END 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error SEEK_END not defined 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef SEEK_SET 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error SEEK_SET not defined 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef TMP_MAX 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error TMP_MAX not defined 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef _IOFBF 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error _IOFBF not defined 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef _IOLBF 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error _IOLBF not defined 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef _IONBF 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error _IONBF not defined 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef stderr 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error stderr not defined 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef stdin 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error stdin not defined 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef stdout 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error stdout not defined 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cstdarg> 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 81f57bd564fd16203c8969aaa29631f3e1bbaa993fHoward Hinnant#pragma clang diagnostic push 82f57bd564fd16203c8969aaa29631f3e1bbaa993fHoward Hinnant#pragma clang diagnostic ignored "-Wformat-zero-length" 83f57bd564fd16203c8969aaa29631f3e1bbaa993fHoward Hinnant 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::FILE* fp = 0; 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::fpos_t fpos = {0}; 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::size_t s = 0; 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char* cp = 0; 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::va_list va; 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fclose(fp)), int>::value), ""); 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fflush(fp)), int>::value), ""); 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::setbuf(fp,cp)), void>::value), ""); 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::vfprintf(fp,"",va)), int>::value), ""); 95f1151efcb1536554cc781a6d09f1c0d36a3f488cHoward Hinnant static_assert((std::is_same<decltype(std::fprintf(fp," ")), int>::value), ""); 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fscanf(fp,"")), int>::value), ""); 97f1151efcb1536554cc781a6d09f1c0d36a3f488cHoward Hinnant static_assert((std::is_same<decltype(std::snprintf(cp,0," ")), int>::value), ""); 98f1151efcb1536554cc781a6d09f1c0d36a3f488cHoward Hinnant static_assert((std::is_same<decltype(std::sprintf(cp," ")), int>::value), ""); 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::sscanf("","")), int>::value), ""); 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::vfprintf(fp,"",va)), int>::value), ""); 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::vfscanf(fp,"",va)), int>::value), ""); 102f1151efcb1536554cc781a6d09f1c0d36a3f488cHoward Hinnant static_assert((std::is_same<decltype(std::vsnprintf(cp,0," ",va)), int>::value), ""); 103f1151efcb1536554cc781a6d09f1c0d36a3f488cHoward Hinnant static_assert((std::is_same<decltype(std::vsprintf(cp," ",va)), int>::value), ""); 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::vsscanf("","",va)), int>::value), ""); 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fgetc(fp)), int>::value), ""); 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fgets(cp,0,fp)), char*>::value), ""); 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fputc(0,fp)), int>::value), ""); 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fputs("",fp)), int>::value), ""); 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::getc(fp)), int>::value), ""); 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::putc(0,fp)), int>::value), ""); 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::ungetc(0,fp)), int>::value), ""); 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fread((void*)0,0,0,fp)), std::size_t>::value), ""); 113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fwrite((const void*)0,0,0,fp)), std::size_t>::value), ""); 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fgetpos(fp, &fpos)), int>::value), ""); 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fseek(fp, 0,0)), int>::value), ""); 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fsetpos(fp, &fpos)), int>::value), ""); 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::ftell(fp)), long>::value), ""); 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::rewind(fp)), void>::value), ""); 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::clearerr(fp)), void>::value), ""); 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::feof(fp)), int>::value), ""); 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::ferror(fp)), int>::value), ""); 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::perror("")), void>::value), ""); 123abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten 124abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten#ifndef _LIBCPP_HAS_NO_GLOBAL_FILESYSTEM_NAMESPACE 125abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::fopen("", "")), std::FILE*>::value), ""); 126abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::freopen("", "", fp)), std::FILE*>::value), ""); 127abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::remove("")), int>::value), ""); 128abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::rename("","")), int>::value), ""); 129abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::tmpfile()), std::FILE*>::value), ""); 130abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::tmpnam(cp)), char*>::value), ""); 131abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten#endif 132abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten 133abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten#ifndef _LIBCPP_HAS_NO_STDIN 134abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::getchar()), int>::value), ""); 135abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten#if _LIBCPP_STD_VER <= 11 136abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::gets(cp)), char*>::value), ""); 137abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten#endif 138abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::scanf(" ")), int>::value), ""); 139abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::vscanf("",va)), int>::value), ""); 140abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten#endif 141abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten 142abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten#ifndef _LIBCPP_HAS_NO_STDOUT 143abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::printf(" ")), int>::value), ""); 144abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::putchar(0)), int>::value), ""); 145abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::puts("")), int>::value), ""); 146abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::vprintf(" ",va)), int>::value), ""); 147abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten#endif 148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 149