Index: lib/Frontend/CompilerInstance.cpp =================================================================== --- lib/Frontend/CompilerInstance.cpp +++ lib/Frontend/CompilerInstance.cpp @@ -1736,7 +1736,9 @@ // module cache, we don't know how to rebuild modules. unsigned ARRFlags = Source == ModuleCache ? ASTReader::ARR_OutOfDate | ASTReader::ARR_Missing : - ASTReader::ARR_ConfigurationMismatch; + Source == PrebuiltModulePath ? + 0 : + ASTReader::ARR_ConfigurationMismatch; switch (ModuleManager->ReadAST(ModuleFileName, Source == PrebuiltModulePath ? serialization::MK_PrebuiltModule Index: test/Modules/Inputs/module-mismatch.cppm =================================================================== --- /dev/null +++ test/Modules/Inputs/module-mismatch.cppm @@ -0,0 +1,13 @@ +#ifdef HAS_PTHREAD +export module module_mismatch; +#else +export module module_no_mismatch; +#endif + +export bool hasPthreads() { +#ifdef HAS_PTHREAD + return true; +#else + return false; +#endif +} Index: test/Modules/mismatch-diagnostics.cpp =================================================================== --- /dev/null +++ test/Modules/mismatch-diagnostics.cpp @@ -0,0 +1,29 @@ +// RUN: rm -rf %t +// RUN: mkdir -p %t/prebuilt_modules +// +// RUN: exit 0 +// +// RUN: %clang_cpp -triple %itanium_abi_triple \ +// RUN: -fmodules-ts -fprebuilt-module-path=%t/prebuilt-modules \ +// RUN: -pthread -DHAS_PTHREAD=1 \ +// RUN: --precompile -c %S/Inputs/module-mismatch.cppm \ +// RUN: -o %t/prebuilt_modules/module_mismatch.pcm +// +// RUN: %clang_cpp -triple %itanium_abi_triple \ +// RUN: -fmodules-ts -fprebuilt-module-path=%t/prebuilt-modules \ +// RUN: --precompile -c %S/Inputs/module-mismatch.cppm \ +// RUN: -o %t/prebuilt_modules/module_no_mismatch.pcm +// +// RUN: %clang_cc1 -triple %itanium_abi_triple -fmodules-ts \ +// RUN: -fprebuilt-module-path=%t/prebuilt_modules -DMISMATCH_CHCEK=1 %s +// +// RUN: %clang_cc1 -triple %itanium_abi_triple -fmodules-ts \ +// RUN: -fprebuilt-module-path=%t/prebuilt_modules %s + +#ifdef MISMATCH_CHECK +import module_mismatch; +// expected-error {{foo}} +#else +import module_no_mismatch; // no-warning +#endif +