173 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// test <stdio.h>10 11#include <stdio.h>12#include <stdarg.h>13 14#include "test_macros.h"15 16#ifdef getc17#error getc is defined18#endif19 20#ifdef putc21#error putc is defined22#endif23 24#ifdef clearerr25#error clearerr is defined26#endif27 28#ifdef feof29#error feof is defined30#endif31 32#ifdef ferror33#error ferror is defined34#endif35 36#ifndef BUFSIZ37#error BUFSIZ not defined38#endif39 40#ifndef EOF41#error EOF not defined42#endif43 44#ifndef FILENAME_MAX45#error FILENAME_MAX not defined46#endif47 48#ifndef FOPEN_MAX49#error FOPEN_MAX not defined50#endif51 52#ifndef L_tmpnam53#error L_tmpnam not defined54#endif55 56#ifndef NULL57#error NULL not defined58#endif59 60#ifndef SEEK_CUR61#error SEEK_CUR not defined62#endif63 64#ifndef SEEK_END65#error SEEK_END not defined66#endif67 68#ifndef SEEK_SET69#error SEEK_SET not defined70#endif71 72#ifndef TMP_MAX73#error TMP_MAX not defined74#endif75 76#ifndef _IOFBF77#error _IOFBF not defined78#endif79 80#ifndef _IOLBF81#error _IOLBF not defined82#endif83 84#ifndef _IONBF85#error _IONBF not defined86#endif87 88#ifndef stderr89#error stderr not defined90#endif91 92#ifndef stdin93#error stdin not defined94#endif95 96#ifndef stdout97#error stdout not defined98#endif99 100TEST_CLANG_DIAGNOSTIC_IGNORED("-Wformat-zero-length")101TEST_GCC_DIAGNOSTIC_IGNORED("-Wformat-zero-length")102 103FILE* fp = 0;104fpos_t fpos = fpos_t();105size_t s = 0;106char* cp = 0;107char arr[] = {'a', 'b'};108va_list va;109ASSERT_SAME_TYPE(int, decltype(remove("")));110ASSERT_SAME_TYPE(int, decltype(rename("","")));111ASSERT_SAME_TYPE(FILE*, decltype(tmpfile()));112TEST_DIAGNOSTIC_PUSH113TEST_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations")114TEST_GCC_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations")115ASSERT_SAME_TYPE(char*, decltype(tmpnam(cp)));116TEST_DIAGNOSTIC_POP117ASSERT_SAME_TYPE(int, decltype(fclose(fp)));118ASSERT_SAME_TYPE(int, decltype(fflush(fp)));119ASSERT_SAME_TYPE(FILE*, decltype(fopen("", "")));120ASSERT_SAME_TYPE(FILE*, decltype(freopen("", "", fp)));121ASSERT_SAME_TYPE(void, decltype(setbuf(fp,cp)));122ASSERT_SAME_TYPE(int, decltype(vfprintf(fp,"",va)));123ASSERT_SAME_TYPE(int, decltype(fprintf(fp," ")));124ASSERT_SAME_TYPE(int, decltype(fscanf(fp,"")));125ASSERT_SAME_TYPE(int, decltype(printf("\n")));126ASSERT_SAME_TYPE(int, decltype(scanf("\n")));127ASSERT_SAME_TYPE(int, decltype(snprintf(cp,0,"p")));128TEST_DIAGNOSTIC_PUSH129TEST_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations")130TEST_GCC_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations")131ASSERT_SAME_TYPE(int, decltype(sprintf(cp," ")));132TEST_DIAGNOSTIC_POP133ASSERT_SAME_TYPE(int, decltype(sscanf("","")));134ASSERT_SAME_TYPE(int, decltype(vfprintf(fp,"",va)));135ASSERT_SAME_TYPE(int, decltype(vfscanf(fp,"",va)));136ASSERT_SAME_TYPE(int, decltype(vprintf(" ",va)));137ASSERT_SAME_TYPE(int, decltype(vscanf("",va)));138ASSERT_SAME_TYPE(int, decltype(vsnprintf(cp,0," ",va)));139TEST_DIAGNOSTIC_PUSH140TEST_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations")141TEST_GCC_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations")142ASSERT_SAME_TYPE(int, decltype(vsprintf(cp," ",va)));143TEST_DIAGNOSTIC_POP144ASSERT_SAME_TYPE(int, decltype(vsscanf("","",va)));145ASSERT_SAME_TYPE(int, decltype(fgetc(fp)));146ASSERT_SAME_TYPE(char*, decltype(fgets(cp,0,fp)));147ASSERT_SAME_TYPE(int, decltype(fputc(0,fp)));148ASSERT_SAME_TYPE(int, decltype(fputs("",fp)));149ASSERT_SAME_TYPE(int, decltype(getc(fp)));150ASSERT_SAME_TYPE(int, decltype(getchar()));151#if TEST_STD_VER < 14152TEST_DIAGNOSTIC_PUSH153TEST_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations")154TEST_GCC_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations")155ASSERT_SAME_TYPE(char*, decltype(gets(cp)));156TEST_DIAGNOSTIC_POP157#endif158ASSERT_SAME_TYPE(int, decltype(putc(0,fp)));159ASSERT_SAME_TYPE(int, decltype(putchar(0)));160ASSERT_SAME_TYPE(int, decltype(puts("")));161ASSERT_SAME_TYPE(int, decltype(ungetc(0,fp)));162ASSERT_SAME_TYPE(size_t, decltype(fread((void*)0,0,0,fp)));163ASSERT_SAME_TYPE(size_t, decltype(fwrite((const void*)arr,1,0,fp)));164ASSERT_SAME_TYPE(int, decltype(fgetpos(fp, &fpos)));165ASSERT_SAME_TYPE(int, decltype(fseek(fp, 0,0)));166ASSERT_SAME_TYPE(int, decltype(fsetpos(fp, &fpos)));167ASSERT_SAME_TYPE(long, decltype(ftell(fp)));168ASSERT_SAME_TYPE(void, decltype(rewind(fp)));169ASSERT_SAME_TYPE(void, decltype(clearerr(fp)));170ASSERT_SAME_TYPE(int, decltype(feof(fp)));171ASSERT_SAME_TYPE(int, decltype(ferror(fp)));172ASSERT_SAME_TYPE(void, decltype(perror("")));173