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-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | // test <stdio.h> |
10 | |
11 | #include <stdio.h> |
12 | #include <stdarg.h> |
13 | |
14 | #include "test_macros.h" |
15 | |
16 | #ifdef getc |
17 | #error getc is defined |
18 | #endif |
19 | |
20 | #ifdef putc |
21 | #error putc is defined |
22 | #endif |
23 | |
24 | #ifdef clearerr |
25 | #error clearerr is defined |
26 | #endif |
27 | |
28 | #ifdef feof |
29 | #error feof is defined |
30 | #endif |
31 | |
32 | #ifdef ferror |
33 | #error ferror is defined |
34 | #endif |
35 | |
36 | #ifndef BUFSIZ |
37 | #error BUFSIZ not defined |
38 | #endif |
39 | |
40 | #ifndef EOF |
41 | #error EOF not defined |
42 | #endif |
43 | |
44 | #ifndef FILENAME_MAX |
45 | #error FILENAME_MAX not defined |
46 | #endif |
47 | |
48 | #ifndef FOPEN_MAX |
49 | #error FOPEN_MAX not defined |
50 | #endif |
51 | |
52 | #ifndef L_tmpnam |
53 | #error L_tmpnam not defined |
54 | #endif |
55 | |
56 | #ifndef NULL |
57 | #error NULL not defined |
58 | #endif |
59 | |
60 | #ifndef SEEK_CUR |
61 | #error SEEK_CUR not defined |
62 | #endif |
63 | |
64 | #ifndef SEEK_END |
65 | #error SEEK_END not defined |
66 | #endif |
67 | |
68 | #ifndef SEEK_SET |
69 | #error SEEK_SET not defined |
70 | #endif |
71 | |
72 | #ifndef TMP_MAX |
73 | #error TMP_MAX not defined |
74 | #endif |
75 | |
76 | #ifndef _IOFBF |
77 | #error _IOFBF not defined |
78 | #endif |
79 | |
80 | #ifndef _IOLBF |
81 | #error _IOLBF not defined |
82 | #endif |
83 | |
84 | #ifndef _IONBF |
85 | #error _IONBF not defined |
86 | #endif |
87 | |
88 | #ifndef stderr |
89 | #error stderr not defined |
90 | #endif |
91 | |
92 | #ifndef stdin |
93 | #error stdin not defined |
94 | #endif |
95 | |
96 | #ifndef stdout |
97 | #error stdout not defined |
98 | #endif |
99 | |
100 | TEST_CLANG_DIAGNOSTIC_IGNORED("-Wformat-zero-length" ) |
101 | TEST_GCC_DIAGNOSTIC_IGNORED("-Wformat-zero-length" ) |
102 | |
103 | FILE* fp = 0; |
104 | fpos_t fpos = fpos_t(); |
105 | size_t s = 0; |
106 | char* cp = 0; |
107 | char arr[] = {'a', 'b'}; |
108 | va_list va; |
109 | ASSERT_SAME_TYPE(int, decltype(remove(filename: "" ))); |
110 | ASSERT_SAME_TYPE(int, decltype(rename(old: "" ,new: "" ))); |
111 | ASSERT_SAME_TYPE(FILE*, decltype(tmpfile())); |
112 | TEST_DIAGNOSTIC_PUSH |
113 | TEST_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations" ) |
114 | TEST_GCC_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations" ) |
115 | ASSERT_SAME_TYPE(char*, decltype(tmpnam(cp))); |
116 | TEST_DIAGNOSTIC_POP |
117 | ASSERT_SAME_TYPE(int, decltype(fclose(fp))); |
118 | ASSERT_SAME_TYPE(int, decltype(fflush(fp))); |
119 | ASSERT_SAME_TYPE(FILE*, decltype(fopen(filename: "" , modes: "" ))); |
120 | ASSERT_SAME_TYPE(FILE*, decltype(freopen("" , "" , fp))); |
121 | ASSERT_SAME_TYPE(void, decltype(setbuf(fp,cp))); |
122 | ASSERT_SAME_TYPE(int, decltype(vfprintf(fp,"" ,va))); |
123 | ASSERT_SAME_TYPE(int, decltype(fprintf(fp," " ))); |
124 | ASSERT_SAME_TYPE(int, decltype(fscanf(fp,"" ))); |
125 | ASSERT_SAME_TYPE(int, decltype(printf(format: "\n" ))); |
126 | ASSERT_SAME_TYPE(int, decltype(scanf(format: "\n" ))); |
127 | ASSERT_SAME_TYPE(int, decltype(snprintf(s: cp,maxlen: 0,format: "p" ))); |
128 | TEST_DIAGNOSTIC_PUSH |
129 | TEST_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations" ) |
130 | TEST_GCC_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations" ) |
131 | ASSERT_SAME_TYPE(int, decltype(sprintf(cp," " ))); |
132 | TEST_DIAGNOSTIC_POP |
133 | ASSERT_SAME_TYPE(int, decltype(sscanf(s: "" ,format: "" ))); |
134 | ASSERT_SAME_TYPE(int, decltype(vfprintf(fp,"" ,va))); |
135 | ASSERT_SAME_TYPE(int, decltype(vfscanf(fp,"" ,va))); |
136 | ASSERT_SAME_TYPE(int, decltype(vprintf(format: " " ,arg: va))); |
137 | ASSERT_SAME_TYPE(int, decltype(vscanf(format: "" ,arg: va))); |
138 | ASSERT_SAME_TYPE(int, decltype(vsnprintf(s: cp,maxlen: 0,format: " " ,arg: va))); |
139 | TEST_DIAGNOSTIC_PUSH |
140 | TEST_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations" ) |
141 | TEST_GCC_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations" ) |
142 | ASSERT_SAME_TYPE(int, decltype(vsprintf(cp," " ,va))); |
143 | TEST_DIAGNOSTIC_POP |
144 | ASSERT_SAME_TYPE(int, decltype(vsscanf(s: "" ,format: "" ,arg: va))); |
145 | ASSERT_SAME_TYPE(int, decltype(fgetc(fp))); |
146 | ASSERT_SAME_TYPE(char*, decltype(fgets(cp,0,fp))); |
147 | ASSERT_SAME_TYPE(int, decltype(fputc(0,fp))); |
148 | ASSERT_SAME_TYPE(int, decltype(fputs("" ,fp))); |
149 | ASSERT_SAME_TYPE(int, decltype(getc(fp))); |
150 | ASSERT_SAME_TYPE(int, decltype(getchar())); |
151 | #if TEST_STD_VER < 14 |
152 | TEST_DIAGNOSTIC_PUSH |
153 | TEST_CLANG_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations" ) |
154 | TEST_GCC_DIAGNOSTIC_IGNORED("-Wdeprecated-declarations" ) |
155 | ASSERT_SAME_TYPE(char*, decltype(gets(cp))); |
156 | TEST_DIAGNOSTIC_POP |
157 | #endif |
158 | ASSERT_SAME_TYPE(int, decltype(putc(0,fp))); |
159 | ASSERT_SAME_TYPE(int, decltype(putchar(c: 0))); |
160 | ASSERT_SAME_TYPE(int, decltype(puts(s: "" ))); |
161 | ASSERT_SAME_TYPE(int, decltype(ungetc(0,fp))); |
162 | ASSERT_SAME_TYPE(size_t, decltype(fread((void*)0,0,0,fp))); |
163 | ASSERT_SAME_TYPE(size_t, decltype(fwrite((const void*)arr,1,0,fp))); |
164 | ASSERT_SAME_TYPE(int, decltype(fgetpos(fp, &fpos))); |
165 | ASSERT_SAME_TYPE(int, decltype(fseek(fp, 0,0))); |
166 | ASSERT_SAME_TYPE(int, decltype(fsetpos(fp, &fpos))); |
167 | ASSERT_SAME_TYPE(long, decltype(ftell(fp))); |
168 | ASSERT_SAME_TYPE(void, decltype(rewind(fp))); |
169 | ASSERT_SAME_TYPE(void, decltype(clearerr(fp))); |
170 | ASSERT_SAME_TYPE(int, decltype(feof(fp))); |
171 | ASSERT_SAME_TYPE(int, decltype(ferror(fp))); |
172 | ASSERT_SAME_TYPE(void, decltype(perror(s: "" ))); |
173 | |