|  | // Check that the presence of non-affecting module map files does not affect the | 
|  | // contents of PCM files. | 
|  |  | 
|  | // RUN: rm -rf %t && mkdir %t | 
|  | // RUN: split-file %s %t | 
|  |  | 
|  | //--- a/module.modulemap | 
|  | module a {} | 
|  |  | 
|  | //--- b/module.modulemap | 
|  | module b {} | 
|  |  | 
|  | //--- c/module.modulemap | 
|  | module c { header "c.h" } | 
|  | //--- c/c.h | 
|  | @import b; | 
|  |  | 
|  | //--- tu.m | 
|  | @import c; | 
|  |  | 
|  | //--- explicit-mms-common-args.rsp | 
|  | -fmodule-map-file=b/module.modulemap -fmodule-map-file=c/module.modulemap -fmodules -fmodules-cache-path=cache -fdisable-module-hash -fsyntax-only tu.m | 
|  | //--- implicit-search-args.rsp | 
|  | -I a -I b -I c -fimplicit-module-maps -fmodules -fmodules-cache-path=cache -fdisable-module-hash -fsyntax-only tu.m | 
|  | //--- implicit-search-args.rsp-end | 
|  |  | 
|  | // Test with explicit module map files. | 
|  | // | 
|  | // RUN: %clang_cc1 -working-directory %t @%t/explicit-mms-common-args.rsp | 
|  | // RUN: mv %t/cache %t/cache-explicit-no-a-prune | 
|  | // RUN: %clang_cc1 -working-directory %t @%t/explicit-mms-common-args.rsp -fno-modules-prune-non-affecting-module-map-files | 
|  | // RUN: mv %t/cache %t/cache-explicit-no-a-keep | 
|  | // | 
|  | // RUN: %clang_cc1 -working-directory %t -fmodule-map-file=a/module.modulemap @%t/explicit-mms-common-args.rsp | 
|  | // RUN: mv %t/cache %t/cache-explicit-a-prune | 
|  | // RUN: %clang_cc1 -working-directory %t -fmodule-map-file=a/module.modulemap @%t/explicit-mms-common-args.rsp -fno-modules-prune-non-affecting-module-map-files | 
|  | // RUN: mv %t/cache %t/cache-explicit-a-keep | 
|  | // | 
|  | // RUN: diff %t/cache-explicit-no-a-prune/c.pcm %t/cache-explicit-a-prune/c.pcm | 
|  | // RUN: not diff %t/cache-explicit-no-a-keep/c.pcm %t/cache-explicit-a-keep/c.pcm | 
|  |  | 
|  | // Test with implicit module map search. | 
|  | // | 
|  | // RUN: %clang_cc1 -working-directory %t @%t/implicit-search-args.rsp | 
|  | // RUN: mv %t/cache %t/cache-implicit-no-a-prune | 
|  | // RUN: %clang_cc1 -working-directory %t @%t/implicit-search-args.rsp -fno-modules-prune-non-affecting-module-map-files | 
|  | // RUN: mv %t/cache %t/cache-implicit-no-a-keep | 
|  | // | 
|  | // FIXME: Instead of removing "a/module.modulemap" from the file system, we | 
|  | //        could drop the "-I a" search path argument in combination with the | 
|  | //        "-fmodules-skip-header-search-paths" flag. Unfortunately, that flag | 
|  | //        does not prevent serialization of the search path usage bit vector, | 
|  | //        making the files differ anyways. | 
|  | // RUN: rm %t/a/module.modulemap | 
|  | // | 
|  | // RUN: %clang_cc1 -working-directory %t @%t/implicit-search-args.rsp | 
|  | // RUN: mv %t/cache %t/cache-implicit-a-prune | 
|  | // RUN: %clang_cc1 -working-directory %t @%t/implicit-search-args.rsp -fno-modules-prune-non-affecting-module-map-files | 
|  | // RUN: mv %t/cache %t/cache-implicit-a-keep | 
|  | // | 
|  | // RUN: diff %t/cache-implicit-no-a-prune/c.pcm %t/cache-implicit-a-prune/c.pcm | 
|  | // RUN: not diff %t/cache-implicit-no-a-keep/c.pcm %t/cache-implicit-a-keep/c.pcm |