On Fri, Oct 16, 2015 at 6:26 PM, Richard Smith <rich...@metafoo.co.uk> wrote:
> On Fri, Oct 16, 2015 at 6:25 PM, Sean Silva <chisophu...@gmail.com> wrote: > >> On Fri, Oct 16, 2015 at 6:12 PM, Richard Smith <rich...@metafoo.co.uk> >> wrote: >> >>> On Fri, Oct 16, 2015 at 4:43 PM, Sean Silva <chisophu...@gmail.com> >>> wrote: >>> >>>> On Fri, Oct 16, 2015 at 4:20 PM, Richard Smith via cfe-commits < >>>> cfe-commits@lists.llvm.org> wrote: >>>> >>>>> Author: rsmith >>>>> Date: Fri Oct 16 18:20:19 2015 >>>>> New Revision: 250577 >>>>> >>>>> URL: http://llvm.org/viewvc/llvm-project?rev=250577&view=rev >>>>> Log: >>>>> [modules] Allow the error when explicitly loading an incompatible >>>>> module file >>>>> via -fmodule-file= to be turned off; in that case, just include the >>>>> relevant >>>>> files textually. This allows module files to be unconditionally passed >>>>> to all >>>>> compile actions via CXXFLAGS, and to be ignored for rules that specify >>>>> custom >>>>> incompatible flags. >>>>> >>>> >>>> What direction are you trying to go with this? Are you thinking >>>> something like having CMake build a bunch of modules up front? >>>> >>> >>> That's certainly one thing you can do with this. Another is that you can >>> make cmake automatically and explicitly build a module for each library, >>> and then provide that for all the dependencies of that library, >>> >> >> How does CMake know which headers are part of which library? >> Strategically named top-level modules in the module map? >> > > The idea would be for CMake to generate the module map itself based on the > build rules. > How would it know which headers to include? Do our ADDITIONAL_HEADER_DIRS things in our CMakeLists.txt have enough information for this? -- Sean Silva > > >> -- Sean Silva >> >> >>> with an (error-by-default) warning in the case where the downstream >>> library specifies incompatible compilation flags. You can use this warning >>> flag to turn off the error so you can make progress before you get around >>> to fixing all the incompatible flags. >>> >>> >>>> If that's the case, it would be nice to explain what caused the >>>> mismatch, so that the user can look into rectifying it. Otherwise this >>>> warning is not directly actionable. The existing diagnostics seemed >>>> alright. Demoting them to "error: {{.*}} configuration mismatch" seems like >>>> a regression. >>>> >>> >>> I agree, it is a regression, and fixing it is high on my list of >>> priorities (sorry for not mentioning that in the commit message). >>> >>> -- Sean Silva >>>> >>>> >>>>> >>>>> Modified: >>>>> cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td >>>>> cfe/trunk/lib/Frontend/CompilerInstance.cpp >>>>> cfe/trunk/test/Modules/merge-target-features.cpp >>>>> >>>>> Modified: cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td?rev=250577&r1=250576&r2=250577&view=diff >>>>> >>>>> ============================================================================== >>>>> --- cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td (original) >>>>> +++ cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td Fri Oct >>>>> 16 18:20:19 2015 >>>>> @@ -172,6 +172,9 @@ def warn_incompatible_analyzer_plugin_ap >>>>> def note_incompatible_analyzer_plugin_api : Note< >>>>> "current API version is '%0', but plugin was compiled with >>>>> version '%1'">; >>>>> >>>>> +def warn_module_config_mismatch : Warning< >>>>> + "module file %0 cannot be loaded due to a configuration mismatch >>>>> with the current " >>>>> + "compilation">, InGroup<DiagGroup<"module-file-config-mismatch">>, >>>>> DefaultError; >>>>> def err_module_map_not_found : Error<"module map file '%0' not >>>>> found">, >>>>> DefaultFatal; >>>>> def err_missing_module_name : Error< >>>>> >>>>> Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=250577&r1=250576&r2=250577&view=diff >>>>> >>>>> ============================================================================== >>>>> --- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original) >>>>> +++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Fri Oct 16 18:20:19 >>>>> 2015 >>>>> @@ -1335,15 +1335,24 @@ bool CompilerInstance::loadModuleFile(St >>>>> >>>>> std::move(Listener)); >>>>> >>>>> // Try to load the module file. >>>>> - if (ModuleManager->ReadAST(FileName, >>>>> serialization::MK_ExplicitModule, >>>>> - SourceLocation(), ASTReader::ARR_None) >>>>> - != ASTReader::Success) >>>>> - return false; >>>>> - >>>>> + switch (ModuleManager->ReadAST(FileName, >>>>> serialization::MK_ExplicitModule, >>>>> + SourceLocation(), >>>>> + >>>>> ASTReader::ARR_ConfigurationMismatch)) { >>>>> + case ASTReader::Success: >>>>> // We successfully loaded the module file; remember the set of >>>>> provided >>>>> // modules so that we don't try to load implicit modules for them. >>>>> ListenerRef.registerAll(); >>>>> return true; >>>>> + >>>>> + case ASTReader::ConfigurationMismatch: >>>>> + // Ignore unusable module files. >>>>> + getDiagnostics().Report(SourceLocation(), >>>>> diag::warn_module_config_mismatch) >>>>> + << FileName; >>>>> + return true; >>>>> + >>>>> + default: >>>>> + return false; >>>>> + } >>>>> } >>>>> >>>>> ModuleLoadResult >>>>> >>>>> Modified: cfe/trunk/test/Modules/merge-target-features.cpp >>>>> URL: >>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/merge-target-features.cpp?rev=250577&r1=250576&r2=250577&view=diff >>>>> >>>>> ============================================================================== >>>>> --- cfe/trunk/test/Modules/merge-target-features.cpp (original) >>>>> +++ cfe/trunk/test/Modules/merge-target-features.cpp Fri Oct 16 >>>>> 18:20:19 2015 >>>>> @@ -20,7 +20,7 @@ >>>>> // RUN: -target-cpu i386 \ >>>>> // RUN: -fsyntax-only merge-target-features.cpp 2>&1 \ >>>>> // RUN: | FileCheck --check-prefix=SUBSET %s >>>>> -// SUBSET: AST file was compiled with the target feature'+sse2' but >>>>> the current translation unit is not >>>>> +// SUBSET: error: {{.*}} configuration mismatch >>>>> // >>>>> // RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \ >>>>> // RUN: -iquote Inputs/merge-target-features \ >>>>> @@ -56,8 +56,7 @@ >>>>> // RUN: -target-cpu i386 -target-feature +cx16 \ >>>>> // RUN: -fsyntax-only merge-target-features.cpp 2>&1 \ >>>>> // RUN: | FileCheck --check-prefix=MISMATCH %s >>>>> -// MISMATCH: AST file was compiled with the target feature'+sse2' but >>>>> the current translation unit is not >>>>> -// MISMATCH: current translation unit was compiled with the target >>>>> feature'+cx16' but the AST file was not >>>>> +// MISMATCH: error: {{.*}} configuration mismatch >>>>> >>>>> #include "foo.h" >>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> cfe-commits mailing list >>>>> cfe-commits@lists.llvm.org >>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>>>> >>>> >>>> >>> >> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits