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 15e619862dbf0c4a46db6e3d816bcafcfef6e85977Stephan T. Lavavej#include "test_macros.h" 16e619862dbf0c4a46db6e3d816bcafcfef6e85977Stephan T. Lavavej 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef BUFSIZ 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error BUFSIZ not defined 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef EOF 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error EOF not defined 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef FILENAME_MAX 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error FILENAME_MAX not defined 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef FOPEN_MAX 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error FOPEN_MAX not defined 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef L_tmpnam 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error L_tmpnam not defined 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef NULL 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error NULL not defined 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef SEEK_CUR 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error SEEK_CUR not defined 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef SEEK_END 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error SEEK_END not defined 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef SEEK_SET 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error SEEK_SET not defined 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef TMP_MAX 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error TMP_MAX not defined 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef _IOFBF 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error _IOFBF not defined 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef _IOLBF 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error _IOLBF not defined 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef _IONBF 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error _IONBF not defined 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef stderr 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error stderr not defined 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef stdin 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error stdin not defined 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef stdout 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#error stdout not defined 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cstdarg> 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 834596c2919563b1a2c85285a8be96c74b1d993e75Eric Fiselier#if defined(__clang__) 84f57bd564fd16203c8969aaa29631f3e1bbaa993fHoward Hinnant#pragma clang diagnostic push 85f57bd564fd16203c8969aaa29631f3e1bbaa993fHoward Hinnant#pragma clang diagnostic ignored "-Wformat-zero-length" 8641a04d69c4a087bdbab75c44b668a608160fffe7Marshall Clow#pragma clang diagnostic ignored "-Wdeprecated-declarations" 874596c2919563b1a2c85285a8be96c74b1d993e75Eric Fiselier#endif 88f57bd564fd16203c8969aaa29631f3e1bbaa993fHoward Hinnant 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::FILE* fp = 0; 92c795c2a010758d782f530ab534cb0d68614c3241Mehdi Amini std::fpos_t fpos = std::fpos_t(); 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::size_t s = 0; 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char* cp = 0; 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::va_list va; 96a9ea11398d4e7c756f664d0ae364f1849ab5adecEric Fiselier ((void)fp); // Prevent unused warning 97a9ea11398d4e7c756f664d0ae364f1849ab5adecEric Fiselier ((void)fpos); // Prevent unused warning 98a9ea11398d4e7c756f664d0ae364f1849ab5adecEric Fiselier ((void)s); // Prevent unused warning 99a9ea11398d4e7c756f664d0ae364f1849ab5adecEric Fiselier ((void)cp); // Prevent unused warning 100a9ea11398d4e7c756f664d0ae364f1849ab5adecEric Fiselier ((void)va); // Prevent unused warning 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fclose(fp)), int>::value), ""); 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fflush(fp)), int>::value), ""); 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::setbuf(fp,cp)), void>::value), ""); 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::vfprintf(fp,"",va)), int>::value), ""); 105f1151efcb1536554cc781a6d09f1c0d36a3f488cHoward Hinnant static_assert((std::is_same<decltype(std::fprintf(fp," ")), int>::value), ""); 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fscanf(fp,"")), int>::value), ""); 107f1151efcb1536554cc781a6d09f1c0d36a3f488cHoward Hinnant static_assert((std::is_same<decltype(std::snprintf(cp,0," ")), int>::value), ""); 108f1151efcb1536554cc781a6d09f1c0d36a3f488cHoward Hinnant static_assert((std::is_same<decltype(std::sprintf(cp," ")), int>::value), ""); 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::sscanf("","")), int>::value), ""); 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::vfprintf(fp,"",va)), int>::value), ""); 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::vfscanf(fp,"",va)), int>::value), ""); 112f1151efcb1536554cc781a6d09f1c0d36a3f488cHoward Hinnant static_assert((std::is_same<decltype(std::vsnprintf(cp,0," ",va)), int>::value), ""); 113f1151efcb1536554cc781a6d09f1c0d36a3f488cHoward Hinnant static_assert((std::is_same<decltype(std::vsprintf(cp," ",va)), int>::value), ""); 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::vsscanf("","",va)), int>::value), ""); 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fgetc(fp)), int>::value), ""); 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fgets(cp,0,fp)), char*>::value), ""); 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fputc(0,fp)), int>::value), ""); 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fputs("",fp)), int>::value), ""); 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::getc(fp)), int>::value), ""); 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::putc(0,fp)), int>::value), ""); 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::ungetc(0,fp)), int>::value), ""); 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fread((void*)0,0,0,fp)), std::size_t>::value), ""); 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fwrite((const void*)0,0,0,fp)), std::size_t>::value), ""); 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fgetpos(fp, &fpos)), int>::value), ""); 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fseek(fp, 0,0)), int>::value), ""); 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::fsetpos(fp, &fpos)), int>::value), ""); 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::ftell(fp)), long>::value), ""); 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::rewind(fp)), void>::value), ""); 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::clearerr(fp)), void>::value), ""); 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::feof(fp)), int>::value), ""); 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::ferror(fp)), int>::value), ""); 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert((std::is_same<decltype(std::perror("")), void>::value), ""); 133abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten 134abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten#ifndef _LIBCPP_HAS_NO_GLOBAL_FILESYSTEM_NAMESPACE 135abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::fopen("", "")), std::FILE*>::value), ""); 136abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::freopen("", "", fp)), std::FILE*>::value), ""); 137abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::remove("")), int>::value), ""); 138abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::rename("","")), int>::value), ""); 139abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::tmpfile()), std::FILE*>::value), ""); 140abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::tmpnam(cp)), char*>::value), ""); 141abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten#endif 142abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten 143abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten#ifndef _LIBCPP_HAS_NO_STDIN 144abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::getchar()), int>::value), ""); 145e619862dbf0c4a46db6e3d816bcafcfef6e85977Stephan T. Lavavej#if TEST_STD_VER <= 11 146abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::gets(cp)), char*>::value), ""); 147abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten#endif 148abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::scanf(" ")), int>::value), ""); 149abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::vscanf("",va)), int>::value), ""); 150abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten#endif 151abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten 152abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten#ifndef _LIBCPP_HAS_NO_STDOUT 153abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::printf(" ")), int>::value), ""); 154abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::putchar(0)), int>::value), ""); 155abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::puts("")), int>::value), ""); 156abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten static_assert((std::is_same<decltype(std::vprintf(" ",va)), int>::value), ""); 157abd06b4c9be0a8cf3a69b2b745ef2b112cac83c8Ed Schouten#endif 158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 159