From: Douglas Gregor Date: Thu, 29 Sep 2011 00:52:27 +0000 (+0000) Subject: Introduce an opt-in warning when a module is being implicitly built X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=08d6acf6e5efa6df57345922d412476127f856fc;p=clang Introduce an opt-in warning when a module is being implicitly built from sources. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140746 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticCommonKinds.td b/include/clang/Basic/DiagnosticCommonKinds.td index 7639b5b051..1313174b16 100644 --- a/include/clang/Basic/DiagnosticCommonKinds.td +++ b/include/clang/Basic/DiagnosticCommonKinds.td @@ -63,6 +63,8 @@ def err_module_not_found : Error<"module '%0' not found">, DefaultFatal; def err_module_not_built : Error<"could not build module '%0'">, DefaultFatal; def err_module_cycle : Error<"cyclic dependency in module '%0': %1">, DefaultFatal; +def warn_module_build : Warning<"building module '%0' from source">, + InGroup, DefaultIgnore; // Sema && Lex def ext_longlong : Extension< diff --git a/include/clang/Basic/DiagnosticGroups.td b/include/clang/Basic/DiagnosticGroups.td index a4dbf96243..9901b79bec 100644 --- a/include/clang/Basic/DiagnosticGroups.td +++ b/include/clang/Basic/DiagnosticGroups.td @@ -85,6 +85,7 @@ def : DiagGroup<"newline-eof">; def LongLong : DiagGroup<"long-long">; def MismatchedTags : DiagGroup<"mismatched-tags">; def MissingFieldInitializers : DiagGroup<"missing-field-initializers">; +def ModuleBuild : DiagGroup<"module-build">; def NullDereference : DiagGroup<"null-dereference">; def InitializerOverrides : DiagGroup<"initializer-overrides">; def NonNull : DiagGroup<"nonnull">; diff --git a/lib/Frontend/CompilerInstance.cpp b/lib/Frontend/CompilerInstance.cpp index 554ca352e1..27fe3f15ff 100644 --- a/lib/Frontend/CompilerInstance.cpp +++ b/lib/Frontend/CompilerInstance.cpp @@ -752,6 +752,8 @@ ModuleKey CompilerInstance::loadModule(SourceLocation ImportLoc, return 0; } + getDiagnostics().Report(ModuleNameLoc, diag::warn_module_build) + << ModuleName.getName(); BuildingModule = true; compileModule(*this, ModuleName.getName(), ModuleFileName, UmbrellaHeader); ModuleFile = PP->getHeaderSearchInfo().lookupModule(ModuleName.getName()); diff --git a/test/Modules/on-demand-build-warnings.m b/test/Modules/on-demand-build-warnings.m new file mode 100644 index 0000000000..ea531698cf --- /dev/null +++ b/test/Modules/on-demand-build-warnings.m @@ -0,0 +1,5 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fno-objc-infer-related-result-type -Wmodule-build -fmodule-cache-path %t -F %S/Inputs -DFOO -verify %s + +__import_module__ Module; // expected-warning{{building module 'Module' from source}} +