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 Andersonstatic 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 Andersonstatic 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 Andersonstatic 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