//===----------------------------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// // test #include #include #include "test_macros.h" #ifdef getc #error getc is defined #endif #ifdef putc #error putc is defined #endif #ifdef clearerr #error clearerr is defined #endif #ifdef feof #error feof is defined #endif #ifdef ferror #error ferror is defined #endif #ifndef BUFSIZ #error BUFSIZ not defined #endif #ifndef EOF #error EOF not defined #endif #ifndef FILENAME_MAX #error FILENAME_MAX not defined #endif #ifndef FOPEN_MAX #error FOPEN_MAX not defined #endif #ifndef L_tmpnam #error L_tmpnam not defined #endif #ifndef NULL #error NULL not defined #endif #ifndef SEEK_CUR #error SEEK_CUR not defined #endif #ifndef SEEK_END #error SEEK_END not defined #endif #ifndef SEEK_SET #error SEEK_SET not defined #endif #ifndef TMP_MAX #error TMP_MAX not defined #endif #ifndef _IOFBF #error _IOFBF not defined #endif #ifndef _IOLBF #error _IOLBF not defined #endif #ifndef _IONBF #error _IONBF not defined #endif #ifndef stderr #error stderr not defined #endif #ifndef stdin #error stdin not defined #endif #ifndef stdout #error stdout not defined #endif TEST_CLANG_DIAGNOSTIC_IGNORED("-Wformat-zero-length") TEST_GCC_DIAGNOSTIC_IGNORED("-Wformat-zero-length") FILE* fp = 0; fpos_t fpos = fpos_t(); size_t s = 0; char* cp = 0; char arr[] = {'a', 'b'}; va_list va; ASSERT_SAME_TYPE(int, decltype(remove(""))); ASSERT_SAME_TYPE(int, decltype(rename("",""))); ASSERT_SAME_TYPE(FILE*, decltype(tmpfile())); TEST_DIAGNOSTIC_PUSH TEST_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") TEST_GCC_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") ASSERT_SAME_TYPE(char*, decltype(tmpnam(cp))); TEST_DIAGNOSTIC_POP ASSERT_SAME_TYPE(int, decltype(fclose(fp))); ASSERT_SAME_TYPE(int, decltype(fflush(fp))); ASSERT_SAME_TYPE(FILE*, decltype(fopen("", ""))); ASSERT_SAME_TYPE(FILE*, decltype(freopen("", "", fp))); ASSERT_SAME_TYPE(void, decltype(setbuf(fp,cp))); ASSERT_SAME_TYPE(int, decltype(vfprintf(fp,"",va))); ASSERT_SAME_TYPE(int, decltype(fprintf(fp," "))); ASSERT_SAME_TYPE(int, decltype(fscanf(fp,""))); ASSERT_SAME_TYPE(int, decltype(printf("\n"))); ASSERT_SAME_TYPE(int, decltype(scanf("\n"))); ASSERT_SAME_TYPE(int, decltype(snprintf(cp,0,"p"))); TEST_DIAGNOSTIC_PUSH TEST_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") TEST_GCC_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") ASSERT_SAME_TYPE(int, decltype(sprintf(cp," "))); TEST_DIAGNOSTIC_POP ASSERT_SAME_TYPE(int, decltype(sscanf("",""))); ASSERT_SAME_TYPE(int, decltype(vfprintf(fp,"",va))); ASSERT_SAME_TYPE(int, decltype(vfscanf(fp,"",va))); ASSERT_SAME_TYPE(int, decltype(vprintf(" ",va))); ASSERT_SAME_TYPE(int, decltype(vscanf("",va))); ASSERT_SAME_TYPE(int, decltype(vsnprintf(cp,0," ",va))); TEST_DIAGNOSTIC_PUSH TEST_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") TEST_GCC_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") ASSERT_SAME_TYPE(int, decltype(vsprintf(cp," ",va))); TEST_DIAGNOSTIC_POP ASSERT_SAME_TYPE(int, decltype(vsscanf("","",va))); ASSERT_SAME_TYPE(int, decltype(fgetc(fp))); ASSERT_SAME_TYPE(char*, decltype(fgets(cp,0,fp))); ASSERT_SAME_TYPE(int, decltype(fputc(0,fp))); ASSERT_SAME_TYPE(int, decltype(fputs("",fp))); ASSERT_SAME_TYPE(int, decltype(getc(fp))); ASSERT_SAME_TYPE(int, decltype(getchar())); #if TEST_STD_VER < 14 TEST_DIAGNOSTIC_PUSH TEST_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") TEST_GCC_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations") ASSERT_SAME_TYPE(char*, decltype(gets(cp))); TEST_DIAGNOSTIC_POP #endif ASSERT_SAME_TYPE(int, decltype(putc(0,fp))); ASSERT_SAME_TYPE(int, decltype(putchar(0))); ASSERT_SAME_TYPE(int, decltype(puts(""))); ASSERT_SAME_TYPE(int, decltype(ungetc(0,fp))); ASSERT_SAME_TYPE(size_t, decltype(fread((void*)0,0,0,fp))); ASSERT_SAME_TYPE(size_t, decltype(fwrite((const void*)arr,1,0,fp))); ASSERT_SAME_TYPE(int, decltype(fgetpos(fp, &fpos))); ASSERT_SAME_TYPE(int, decltype(fseek(fp, 0,0))); ASSERT_SAME_TYPE(int, decltype(fsetpos(fp, &fpos))); ASSERT_SAME_TYPE(long, decltype(ftell(fp))); ASSERT_SAME_TYPE(void, decltype(rewind(fp))); ASSERT_SAME_TYPE(void, decltype(clearerr(fp))); ASSERT_SAME_TYPE(int, decltype(feof(fp))); ASSERT_SAME_TYPE(int, decltype(ferror(fp))); ASSERT_SAME_TYPE(void, decltype(perror("")));