2 // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fbuiltin-headers-in-system-modules -fmodules-cache-path=%t -I%S/Inputs/StdDef %s -verify -fno-modules-error-recovery
4 // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I%S/Inputs/StdDef %s -verify -fno-modules-error-recovery
10 // size_t is declared in both size_t.h and __stddef_size_t.h, both of which are
11 // modular headers. Regardless of whether stddef.h joins the StdDef test module
12 // or is in its _Builtin_stddef module, __stddef_size_t.h will be in
13 // _Builtin_stddef.size_t. It's not defined which module will win as the expected
14 // provider of size_t. For the purposes of this test it doesn't matter which header
15 // gets reported, just as long as it isn't other.h or include_again.h.
16 size_t st
; // expected-error-re {{missing '#include "{{size_t|__stddef_size_t}}.h"'; 'size_t' must be declared before it is used}}
17 // expected-note@size_t.h:* 0+ {{here}}
18 // expected-note@__stddef_size_t.h:* 0+ {{here}}
20 #include "include_again.h"
21 // Includes <stddef.h> which includes <__stddef_size_t.h> which imports the
22 // _Builtin_stddef.size_t module.
27 // Redeclares size_t, but the type merger should figure it out.