// RUN: rm -rf %t // RUN: split-file %s %t // RUN: sed "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json // RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full > %t/deps1.json // RUN: mv %t/tu2.c %t/tu.c // RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full > %t/deps2.json // RUN: diff -u %t/deps1.json %t/deps2.json // RUN: FileCheck %s < %t/deps1.json // CHECK: "-fmodule-file={{.*}}Indirect1 // CHECK-NOT: "-fmodule-file={{.*}}Indirect // CHECK: "-fmodule-file={{.*}}Indirect2 // CHECK-NOT: "-fmodule-file={{.*}}Indirect //--- cdb.json.template [{ "directory": "DIR", "command": "clang -fsyntax-only DIR/tu.c -fmodules -fimplicit-module-maps -fmodules-cache-path=DIR/cache", "file": "DIR/tu.c" }] //--- module.modulemap module Indirect1 { header "Indirect1.h" } module Indirect2 { header "Indirect2.h" } module Mod { umbrella "Mod" module * { export * } } //--- Indirect1.h void indirect1(void); //--- Indirect2.h void indirect2(void); //--- Mod/SubMod1.h #include "../Indirect1.h" //--- Mod/SubMod2.h #include "../Indirect2.h" //--- tu.c #include "Mod/SubMod1.h" #include "Mod/SubMod2.h" void tu1(void) { indirect1(); indirect2(); } //--- tu2.c #include "Mod/SubMod2.h" #include "Mod/SubMod1.h" void tu1(void) { indirect1(); indirect2(); }