xref: /llvm-project/clang/test/Headers/stddef.c (revision 9a7a6dd3c358ca7becef75c0a9581dcfa3e6b5f4)
1*9a7a6dd3SIan Anderson // RUN: rm -fR %t
272da678dSIan Anderson // RUN: %clang_cc1 -fsyntax-only -verify=c99 -std=c99 %s
372da678dSIan Anderson // RUN: %clang_cc1 -fsyntax-only -verify=c11 -std=c11 %s
472da678dSIan Anderson // RUN: %clang_cc1 -fsyntax-only -verify=c23 -std=c23 %s
5*9a7a6dd3SIan Anderson // RUN: %clang_cc1 -fsyntax-only -verify=c99-modules -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -std=c99 %s
6*9a7a6dd3SIan Anderson // RUN: %clang_cc1 -fsyntax-only -verify=c11-modules -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -std=c11 %s
7*9a7a6dd3SIan Anderson // RUN: %clang_cc1 -fsyntax-only -verify=c23-modules -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -std=c23 %s
872da678dSIan Anderson 
972da678dSIan Anderson struct astruct { char member; };
1072da678dSIan Anderson 
11*9a7a6dd3SIan Anderson ptrdiff_t p0; // c99-error{{unknown type name 'ptrdiff_t'}} c11-error{{unknown type}} c23-error{{unknown type}} \
12*9a7a6dd3SIan Anderson                  c99-modules-error{{unknown type}} c11-modules-error{{unknown type}} c23-modules-error{{unknown type}}
13*9a7a6dd3SIan Anderson size_t s0; // c99-error{{unknown type name 'size_t'}} c11-error{{unknown type}} c23-error{{unknown type}} \
14*9a7a6dd3SIan Anderson               c99-modules-error{{unknown type}} c11-modules-error{{unknown type}} c23-modules-error{{unknown type}}
15*9a7a6dd3SIan Anderson rsize_t r0; // c99-error{{unknown type name 'rsize_t'}} c11-error{{unknown type}} c23-error{{unknown type}} \
16*9a7a6dd3SIan Anderson                c99-modules-error{{unknown type}} c11-modules-error{{unknown type}} c23-modules-error{{unknown type}}
17*9a7a6dd3SIan Anderson wchar_t wc0; // c99-error{{unknown type name 'wchar_t'}} c11-error{{unknown type}} c23-error{{unknown type}} \
18*9a7a6dd3SIan Anderson                 c99-modules-error{{unknown type}} c11-modules-error{{unknown type}} c23-modules-error{{unknown type}}
19*9a7a6dd3SIan Anderson void *v0 = NULL; // c99-error{{use of undeclared identifier 'NULL'}} c11-error{{undeclared identifier}} c23-error{{undeclared identifier}} \
20*9a7a6dd3SIan Anderson                     c99-modules-error{{undeclared identifier}} c11-modules-error{{undeclared identifier}} c23-modules-error{{undeclared identifier}}
21*9a7a6dd3SIan Anderson nullptr_t n0; // c99-error{{unknown type name 'nullptr_t'}} c11-error{{unknown type}} c23-error{{unknown type}} \
22*9a7a6dd3SIan Anderson                  c99-modules-error{{unknown type}} c11-modules-error{{unknown type}} c23-modules-error{{unknown type}}
f0(void)23*9a7a6dd3SIan Anderson static void f0(void) { unreachable(); } // c99-error{{call to undeclared function 'unreachable'}} c11-error{{undeclared function}} c23-error{{undeclared identifier}} \
24*9a7a6dd3SIan Anderson                                            c99-modules-error{{undeclared function}} c11-modules-error{{undeclared function}} c23-modules-error{{undeclared identifier}}
25*9a7a6dd3SIan Anderson max_align_t m0; // c99-error{{unknown type name 'max_align_t'}} c11-error{{unknown type}} c23-error{{unknown type}} \
26*9a7a6dd3SIan Anderson                    c99-modules-error{{unknown type}} c11-modules-error{{unknown type}} c23-modules-error{{unknown type}}
2772da678dSIan Anderson size_t o0 = offsetof(struct astruct, member); // c99-error{{unknown type name 'size_t'}} c99-error{{call to undeclared function 'offsetof'}} c99-error{{expected expression}} c99-error{{use of undeclared identifier 'member'}} \
2872da678dSIan Anderson                                                  c11-error{{unknown type}} c11-error{{undeclared function}} c11-error{{expected expression}} c11-error{{undeclared identifier}} \
29*9a7a6dd3SIan Anderson                                                  c23-error{{unknown type}} c23-error{{undeclared identifier}} c23-error{{expected expression}} c23-error{{undeclared identifier}} \
30*9a7a6dd3SIan Anderson                                                  c99-modules-error{{unknown type}} c99-modules-error{{undeclared function}} c99-modules-error{{expected expression}} c99-modules-error{{undeclared identifier}} \
31*9a7a6dd3SIan Anderson                                                  c11-modules-error{{unknown type}} c11-modules-error{{undeclared function}} c11-modules-error{{expected expression}} c11-modules-error{{undeclared identifier}} \
32*9a7a6dd3SIan Anderson                                                  c23-modules-error{{unknown type}} c23-modules-error{{undeclared identifier}} c23-modules-error{{expected expression}} c23-modules-error{{undeclared identifier}}
33*9a7a6dd3SIan Anderson wint_t wi0; // c99-error{{unknown type name 'wint_t'}} c11-error{{unknown type}} c23-error{{unknown type}} \
34*9a7a6dd3SIan Anderson                c99-modules-error{{unknown type name 'wint_t'}} c11-modules-error{{unknown type}} c23-modules-error{{unknown type}}
3572da678dSIan Anderson 
3672da678dSIan Anderson #include <stddef.h>
3772da678dSIan Anderson 
3872da678dSIan Anderson ptrdiff_t p1;
3972da678dSIan Anderson size_t s1;
40*9a7a6dd3SIan Anderson rsize_t r1; // c99-error{{unknown type}} c11-error{{unknown type}} c23-error{{unknown type}} \
41*9a7a6dd3SIan Anderson                c99-note@__stddef_size_t.h:*{{'size_t' declared here}} c11-note@__stddef_size_t.h:*{{'size_t' declared here}} c23-note@__stddef_size_t.h:*{{'size_t' declared here}} \
42*9a7a6dd3SIan Anderson                c99-modules-error{{'rsize_t' must be declared before it is used}} c11-modules-error{{must be declared}} c23-modules-error{{must be declared}} \
43*9a7a6dd3SIan Anderson                c99-modules-note@__stddef_rsize_t.h:*{{declaration here is not visible}} c11-modules-note@__stddef_rsize_t.h:*{{declaration here is not visible}} c23-modules-note@__stddef_rsize_t.h:*{{declaration here is not visible}}
4472da678dSIan Anderson wchar_t wc1;
4572da678dSIan Anderson void *v1 = NULL;
46*9a7a6dd3SIan Anderson nullptr_t n1; // c99-error{{unknown type}} c11-error{{unknown type}} \
47*9a7a6dd3SIan Anderson                  c99-modules-error{{unknown type}} c11-modules-error{{unknown type}}
f1(void)48*9a7a6dd3SIan Anderson static void f1(void) { unreachable(); } // c99-error{{undeclared function}} c11-error{{undeclared function}} \
49*9a7a6dd3SIan Anderson                                            c99-modules-error{{undeclared function}} c11-modules-error{{undeclared function}}
50*9a7a6dd3SIan Anderson max_align_t m1; // c99-error{{unknown type}} c99-modules-error{{'max_align_t' must be declared before it is used}} \
51*9a7a6dd3SIan Anderson                    c99-modules-note@__stddef_max_align_t.h:*{{declaration here is not visible}}
5272da678dSIan Anderson size_t o1 = offsetof(struct astruct, member);
53*9a7a6dd3SIan Anderson wint_t wi1; // c99-error{{unknown type}} c11-error{{unknown type}} c23-error{{unknown type}} \
54*9a7a6dd3SIan Anderson                c99-modules-error{{unknown type}} c11-modules-error{{unknown type}} c23-modules-error{{unknown type}}
5572da678dSIan Anderson 
5672da678dSIan Anderson // rsize_t needs to be opted into via __STDC_WANT_LIB_EXT1__ >= 1.
5772da678dSIan Anderson #define __STDC_WANT_LIB_EXT1__ 1
5872da678dSIan Anderson #include <stddef.h>
5972da678dSIan Anderson ptrdiff_t p2;
6072da678dSIan Anderson size_t s2;
6172da678dSIan Anderson rsize_t r2;
6272da678dSIan Anderson wchar_t wc2;
6372da678dSIan Anderson void *v2 = NULL;
64*9a7a6dd3SIan Anderson nullptr_t n2; // c99-error{{unknown type}} c11-error{{unknown type}} \
65*9a7a6dd3SIan Anderson                  c99-modules-error{{unknown type}} c11-modules-error{{unknown type}}
f2(void)66*9a7a6dd3SIan Anderson static void f2(void) { unreachable(); } // c99-error{{undeclared function}} c11-error{{undeclared function}} \
67*9a7a6dd3SIan Anderson                                            c99-modules-error{{undeclared function}} c11-modules-error{{undeclared function}}
6872da678dSIan Anderson max_align_t m2; // c99-error{{unknown type}}
6972da678dSIan Anderson size_t o2 = offsetof(struct astruct, member);
70*9a7a6dd3SIan Anderson wint_t wi2; // c99-error{{unknown type}} c11-error{{unknown type}} c23-error{{unknown type}} \
71*9a7a6dd3SIan Anderson                c99-modules-error{{unknown type}} c11-modules-error{{unknown type}} c23-modules-error{{unknown type}}
72*9a7a6dd3SIan Anderson 
73*9a7a6dd3SIan Anderson // m2 and wi2 don't generate errors in modules, the "must be declared before used"
74*9a7a6dd3SIan Anderson // errors are only emitted the first time the known-but-not-visible type is seen.
75