|  | // RUN: rm -rf %t | 
|  | // RUN: split-file %s %t | 
|  | // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/modules.cache \ | 
|  | // RUN:            -fsyntax-only %t/test.c -verify | 
|  | // Test again with the populated module cache. | 
|  | // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t/modules.cache \ | 
|  | // RUN:            -fsyntax-only %t/test.c -verify | 
|  |  | 
|  | // Test that an identifier with the same name as a macro doesn't hide this | 
|  | // macro from the includers. | 
|  |  | 
|  | //--- macro-definition.h | 
|  | #define __P(protos) () | 
|  | #define __Q(protos) () | 
|  |  | 
|  | //--- macro-transitive.h | 
|  | #include "macro-definition.h" | 
|  | void test(int __P) {} // not "interesting" identifier | 
|  | struct __Q {};        // "interesting" identifier | 
|  |  | 
|  | //--- module.modulemap | 
|  | module MacroDefinition { header "macro-definition.h" export * } | 
|  | module MacroTransitive { header "macro-transitive.h" export * } | 
|  |  | 
|  | //--- test.c | 
|  | // expected-no-diagnostics | 
|  | #include "macro-transitive.h" | 
|  | void foo __P(()); | 
|  | void bar __Q(()); |