r207477 - Check -Werror options during module validation
NAKAMURA Takumi
geek4civic at gmail.com
Tue Apr 29 06:00:56 PDT 2014
2014-04-29 9:36 GMT+09:00 Ben Langmuir <blangmuir at apple.com>:
> Author: benlangmuir
> Date: Mon Apr 28 19:36:53 2014
> New Revision: 207477
>
> URL: http://llvm.org/viewvc/llvm-project?rev=207477&view=rev
> Log:
> Check -Werror options during module validation
>
> This patch checks whether the diagnostic options that could lead to
> errors (principally -Werror) are consistent between when a module was
> built and when it is loaded. If there are new -Werror flags, then the
> module is rebuilt. In order to canonicalize the options we do this
> check at the level of the constructed DiagnosticsEngine, which contains
> the final set of diag to diagnostic level mappings. Currently we only
> rebuild with the new diagnostic options, but we intend to refine this in
> the future to include the union of the new and old flags, since we know
> the old ones did not cause errors. System modules are only rebuilt when
> -Wsystem-headers is enabled.
>
> One oddity is that unlike checking language options, we don’t perform
> this diagnostic option checking when loading from a precompiled header.
> The reason for this is that the compiler cannot rebuild the PCH, so
> anything that requires it to be rebuilt effectively leaks into the build
> system. And in this case, that would mean the build system
> understanding the complex relationship between diagnostic options and
> the underlying diagnostic mappings, which is unreasonable. Skipping the
> check is safe, because these options do not affect the generated AST.
> You simply won’t get new build errors due to changed -Werror options
> automatically, which is also true for non-module cases.
>
> Added:
> cfe/trunk/test/Modules/Werror-Wsystem-headers.m
> cfe/trunk/test/Modules/Werror.m
> Modified:
> cfe/trunk/include/clang/Basic/Diagnostic.h
> cfe/trunk/include/clang/Basic/DiagnosticSerializationKinds.td
> cfe/trunk/include/clang/Serialization/ASTReader.h
> cfe/trunk/lib/Frontend/FrontendActions.cpp
> cfe/trunk/lib/Serialization/ASTReader.cpp
> cfe/trunk/test/Modules/module_file_info.m
> cfe/trunk/test/Modules/resolution-change.m
>
> Modified: cfe/trunk/include/clang/Basic/Diagnostic.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Diagnostic.h?rev=207477&r1=207476&r2=207477&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/Diagnostic.h (original)
> +++ cfe/trunk/include/clang/Basic/Diagnostic.h Mon Apr 28 19:36:53 2014
> @@ -21,6 +21,7 @@
> #include "llvm/ADT/ArrayRef.h"
> #include "llvm/ADT/DenseMap.h"
> #include "llvm/ADT/IntrusiveRefCntPtr.h"
> +#include "llvm/ADT/iterator_range.h"
> #include <list>
> #include <vector>
>
> @@ -364,6 +365,14 @@ public:
> /// \brief Retrieve the diagnostic options.
> DiagnosticOptions &getDiagnosticOptions() const { return *DiagOpts; }
>
> + typedef llvm::iterator_range<DiagState::const_iterator> diag_mapping_range;
> +
> + /// \brief Get the current set of diagnostic mappings.
> + diag_mapping_range getDiagnosticMappings() const {
> + const DiagState &DS = *GetCurDiagState();
> + return diag_mapping_range(DS.begin(), DS.end());
> + }
> +
> DiagnosticConsumer *getClient() { return Client; }
> const DiagnosticConsumer *getClient() const { return Client; }
>
>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticSerializationKinds.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSerializationKinds.td?rev=207477&r1=207476&r2=207477&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticSerializationKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticSerializationKinds.td Mon Apr 28 19:36:53 2014
> @@ -39,6 +39,8 @@ def err_pch_langopt_mismatch : Error<"%0
> "PCH file but is currently %select{disabled|enabled}2">;
> def err_pch_langopt_value_mismatch : Error<
> "%0 differs in PCH file vs. current file">;
> +def err_pch_diagopt_mismatch : Error<"%0 is currently enabled, but was not in "
> + "the PCH file">;
>
> def err_pch_version_too_old : Error<
> "PCH file uses an older PCH format that is no longer supported">;
>
> Modified: cfe/trunk/include/clang/Serialization/ASTReader.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTReader.h?rev=207477&r1=207476&r2=207477&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Serialization/ASTReader.h (original)
> +++ cfe/trunk/include/clang/Serialization/ASTReader.h Mon Apr 28 19:36:53 2014
> @@ -133,8 +133,9 @@ public:
> ///
> /// \returns true to indicate the diagnostic options are invalid, or false
> /// otherwise.
> - virtual bool ReadDiagnosticOptions(const DiagnosticOptions &DiagOpts,
> - bool Complain) {
> + virtual bool
> + ReadDiagnosticOptions(IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts,
> + bool Complain) {
> return false;
> }
>
> @@ -211,7 +212,7 @@ public:
> bool ReadLanguageOptions(const LangOptions &LangOpts, bool Complain) override;
> bool ReadTargetOptions(const TargetOptions &TargetOpts,
> bool Complain) override;
> - bool ReadDiagnosticOptions(const DiagnosticOptions &DiagOpts,
> + bool ReadDiagnosticOptions(IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts,
> bool Complain) override;
> bool ReadFileSystemOptions(const FileSystemOptions &FSOpts,
> bool Complain) override;
> @@ -244,6 +245,8 @@ public:
> bool Complain) override;
> bool ReadTargetOptions(const TargetOptions &TargetOpts,
> bool Complain) override;
> + bool ReadDiagnosticOptions(IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts,
> + bool Complain) override;
> bool ReadPreprocessorOptions(const PreprocessorOptions &PPOpts, bool Complain,
> std::string &SuggestedPredefines) override;
> void ReadCounter(const serialization::ModuleFile &M, unsigned Value) override;
>
> Modified: cfe/trunk/lib/Frontend/FrontendActions.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendActions.cpp?rev=207477&r1=207476&r2=207477&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Frontend/FrontendActions.cpp (original)
> +++ cfe/trunk/lib/Frontend/FrontendActions.cpp Mon Apr 28 19:36:53 2014
> @@ -459,6 +459,25 @@ namespace {
> return false;
> }
>
> + virtual bool
> + ReadDiagnosticOptions(IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts,
> + bool Complain) override {
> + Out.indent(2) << "Diagnostic options:\n";
> +#define DIAGOPT(Name, Bits, Default) DUMP_BOOLEAN(DiagOpts->Name, #Name);
> +#define ENUM_DIAGOPT(Name, Type, Bits, Default) \
> + Out.indent(4) << #Name << ": " << DiagOpts->get##Name() << "\n";
> +#define VALUE_DIAGOPT(Name, Bits, Default) \
> + Out.indent(4) << #Name << ": " << DiagOpts->Name << "\n";
> +#include "clang/Basic/DiagnosticOptions.def"
> +
> + Out.indent(4) << "Warning options:\n";
> + for (const std::string &Warning : DiagOpts->Warnings) {
> + Out.indent(6) << "-W" << Warning << "\n";
> + }
> +
> + return false;
> + }
> +
> bool ReadHeaderSearchOptions(const HeaderSearchOptions &HSOpts,
> bool Complain) override {
> Out.indent(2) << "Header search options:\n";
>
> Modified: cfe/trunk/lib/Serialization/ASTReader.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=207477&r1=207476&r2=207477&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTReader.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTReader.cpp Mon Apr 28 19:36:53 2014
> @@ -29,6 +29,7 @@
> #include "clang/Basic/TargetOptions.h"
> #include "clang/Basic/Version.h"
> #include "clang/Basic/VersionTuple.h"
> +#include "clang/Frontend/Utils.h"
Frontend already depends on Serialization. Serialization should not
depend on Frontend.
Reverted in r207497.
See also; http://bb.pgr.jp/builders/clang-3stage-x86_64-linux/builds/5775
You can reproduce with BUILD_SHARED_LIBS=ON on cmake.
> #include "clang/Lex/HeaderSearch.h"
> #include "clang/Lex/HeaderSearchOptions.h"
> #include "clang/Lex/MacroInfo.h"
> @@ -90,7 +91,7 @@ ChainedASTReaderListener::ReadTargetOpti
> Second->ReadTargetOptions(TargetOpts, Complain);
> }
> bool ChainedASTReaderListener::ReadDiagnosticOptions(
> - const DiagnosticOptions &DiagOpts, bool Complain) {
> + IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
> return First->ReadDiagnosticOptions(DiagOpts, Complain) ||
> Second->ReadDiagnosticOptions(DiagOpts, Complain);
> }
> @@ -291,6 +292,120 @@ namespace {
> DeclsMap;
> }
>
> +static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags,
> + DiagnosticsEngine &Diags,
> + bool Complain) {
> + typedef DiagnosticsEngine::Level Level;
> +
> + // Check current mappings for new -Werror mappings, and the stored mappings
> + // for cases that were explicitly mapped to *not* be errors that are now
> + // errors because of options like -Werror.
> + DiagnosticsEngine *MappingSources[] = { &Diags, &StoredDiags };
> +
> + for (DiagnosticsEngine *MappingSource : MappingSources) {
> + for (auto DiagIDMappingPair : MappingSource->getDiagnosticMappings()) {
> + diag::kind DiagID = DiagIDMappingPair.first;
> + Level CurLevel = Diags.getDiagnosticLevel(DiagID, SourceLocation());
> + if (CurLevel < DiagnosticsEngine::Error)
> + continue; // not significant
> + Level StoredLevel =
> + StoredDiags.getDiagnosticLevel(DiagID, SourceLocation());
> + if (StoredLevel < DiagnosticsEngine::Error) {
> + if (Complain)
> + Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror=" +
> + Diags.getDiagnosticIDs()->getWarningOptionForDiag(DiagID).str();
> + return true;
> + }
> + }
> + }
> +
> + return false;
> +}
> +
> +static DiagnosticsEngine::ExtensionHandling
> +isExtHandlingFromDiagsError(DiagnosticsEngine &Diags) {
> + DiagnosticsEngine::ExtensionHandling Ext =
> + Diags.getExtensionHandlingBehavior();
> + if (Ext == DiagnosticsEngine::Ext_Warn && Diags.getWarningsAsErrors())
> + Ext = DiagnosticsEngine::Ext_Error;
> + return Ext;
> +}
> +
> +static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags,
> + DiagnosticsEngine &Diags,
> + bool IsSystem, bool Complain) {
> + // Top-level options
> + if (IsSystem) {
> + if (Diags.getSuppressSystemWarnings())
> + return false;
> + // If -Wsystem-headers was not enabled before, be conservative
> + if (StoredDiags.getSuppressSystemWarnings()) {
> + if (Complain)
> + Diags.Report(diag::err_pch_diagopt_mismatch) << "-Wsystem-headers";
> + return true;
> + }
> + }
> +
> + if (Diags.getWarningsAsErrors() && !StoredDiags.getWarningsAsErrors()) {
> + if (Complain)
> + Diags.Report(diag::err_pch_diagopt_mismatch) << "-Werror";
> + return true;
> + }
> +
> + if (Diags.getWarningsAsErrors() && Diags.getEnableAllWarnings() &&
> + !StoredDiags.getEnableAllWarnings()) {
> + if (Complain)
> + Diags.Report(diag::err_pch_diagopt_mismatch) << "-Weverything -Werror";
> + return true;
> + }
> +
> + if (isExtHandlingFromDiagsError(Diags) &&
> + !isExtHandlingFromDiagsError(StoredDiags)) {
> + if (Complain)
> + Diags.Report(diag::err_pch_diagopt_mismatch) << "-pedantic-errors";
> + return true;
> + }
> +
> + return checkDiagnosticGroupMappings(StoredDiags, Diags, Complain);
> +}
> +
> +bool PCHValidator::ReadDiagnosticOptions(
> + IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts, bool Complain) {
> + DiagnosticsEngine &ExistingDiags = PP.getDiagnostics();
> + IntrusiveRefCntPtr<DiagnosticIDs> DiagIDs(ExistingDiags.getDiagnosticIDs());
> + IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
> + new DiagnosticsEngine(DiagIDs, DiagOpts.getPtr()));
> + // This should never fail, because we would have processed these options
> + // before writing them to an ASTFile.
> + ProcessWarningOptions(*Diags, *DiagOpts, /*Report*/false);
> +
> + ModuleManager &ModuleMgr = Reader.getModuleManager();
> + assert(ModuleMgr.size() >= 1 && "what ASTFile is this then");
> +
> + // If the original import came from a file explicitly generated by the user,
> + // don't check the diagnostic mappings.
> + // FIXME: currently this is approximated by checking whether this is not a
> + // module import.
> + // Note: ModuleMgr.rbegin() may not be the current module, but it must be in
> + // the transitive closure of its imports, since unrelated modules cannot be
> + // imported until after this module finishes validation.
> + ModuleFile *TopImport = *ModuleMgr.rbegin();
> + while (!TopImport->ImportedBy.empty())
> + TopImport = TopImport->ImportedBy[0];
> + if (TopImport->Kind != MK_Module)
> + return false;
> +
> + StringRef ModuleName = TopImport->ModuleName;
> + assert(!ModuleName.empty() && "diagnostic options read before module name");
> +
> + Module *M = PP.getHeaderSearchInfo().lookupModule(ModuleName);
> + assert(M && "missing module");
> +
> + // FIXME: if the diagnostics are incompatible, save a DiagnosticOptions that
> + // contains the union of their flags.
> + return checkDiagnosticMappings(*Diags, ExistingDiags, M->IsSystem, Complain);
> +}
> +
> /// \brief Collect the macro definitions provided by the given preprocessor
> /// options.
> static void collectMacroDefinitions(const PreprocessorOptions &PPOpts,
> @@ -2268,11 +2383,11 @@ ASTReader::ReadControlBlock(ModuleFile &
> }
>
> case DIAGNOSTIC_OPTIONS: {
> - bool Complain = (ClientLoadCapabilities & ARR_ConfigurationMismatch)==0;
> + bool Complain = (ClientLoadCapabilities & ARR_OutOfDate)==0;
> if (Listener && &F == *ModuleMgr.begin() &&
> ParseDiagnosticOptions(Record, Complain, *Listener) &&
> - !DisableValidation && !AllowConfigurationMismatch)
> - return ConfigurationMismatch;
> + !DisableValidation)
> + return OutOfDate;
> break;
> }
>
> @@ -4481,15 +4596,15 @@ bool ASTReader::ParseTargetOptions(const
>
> bool ASTReader::ParseDiagnosticOptions(const RecordData &Record, bool Complain,
> ASTReaderListener &Listener) {
> - DiagnosticOptions DiagOpts;
> + IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
> unsigned Idx = 0;
> -#define DIAGOPT(Name, Bits, Default) DiagOpts.Name = Record[Idx++];
> +#define DIAGOPT(Name, Bits, Default) DiagOpts->Name = Record[Idx++];
> #define ENUM_DIAGOPT(Name, Type, Bits, Default) \
> - DiagOpts.set##Name(static_cast<Type>(Record[Idx++]));
> + DiagOpts->set##Name(static_cast<Type>(Record[Idx++]));
> #include "clang/Basic/DiagnosticOptions.def"
>
> for (unsigned N = Record[Idx++]; N; --N) {
> - DiagOpts.Warnings.push_back(ReadString(Record, Idx));
> + DiagOpts->Warnings.push_back(ReadString(Record, Idx));
> }
>
> return Listener.ReadDiagnosticOptions(DiagOpts, Complain);
>
> Added: cfe/trunk/test/Modules/Werror-Wsystem-headers.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Werror-Wsystem-headers.m?rev=207477&view=auto
> ==============================================================================
> --- cfe/trunk/test/Modules/Werror-Wsystem-headers.m (added)
> +++ cfe/trunk/test/Modules/Werror-Wsystem-headers.m Mon Apr 28 19:36:53 2014
> @@ -0,0 +1,23 @@
> +// REQUIRES: shell
> +// RUN: rm -rf %t
> +// RUN: rm -rf %t-saved
> +// RUN: mkdir %t-saved
> +
> +// Initial module build
> +// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fdisable-module-hash \
> +// RUN: -isysroot %S/Inputs/System -fsyntax-only %s -verify
> +// RUN: cp %t/cstd.pcm %t-saved/cstd.pcm
> +
> +// Even with -Werror don't rebuild a system module
> +// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fdisable-module-hash \
> +// RUN: -isysroot %S/Inputs/System -fsyntax-only %s -verify -Werror
> +// RUN: diff %t/cstd.pcm %t-saved/cstd.pcm
> +
> +// Unless -Wsystem-headers is on
> +// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fdisable-module-hash \
> +// RUN: -isysroot %S/Inputs/System -fsyntax-only %s -verify \
> +// RUN: -Werror=unused -Wsystem-headers
> +// RUN: not diff %t/cstd.pcm %t-saved/cstd.pcm
> +
> +// expected-no-diagnostics
> + at import cstd;
>
> Added: cfe/trunk/test/Modules/Werror.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Werror.m?rev=207477&view=auto
> ==============================================================================
> --- cfe/trunk/test/Modules/Werror.m (added)
> +++ cfe/trunk/test/Modules/Werror.m Mon Apr 28 19:36:53 2014
> @@ -0,0 +1,75 @@
> +// REQUIRES: shell
> +// RUN: rm -rf %t
> +// RUN: rm -rf %t-saved
> +// RUN: mkdir -p %t-saved
> +
> +// Initial module build (-Werror=header-guard)
> +// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fdisable-module-hash \
> +// RUN: -F %S/Inputs -fsyntax-only %s -verify -Wno-incomplete-umbrella \
> +// RUN: -Werror=header-guard
> +// RUN: cp %t/Module.pcm %t-saved/Module.pcm
> +
> +// Building with looser -Werror options does not rebuild
> +// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fdisable-module-hash \
> +// RUN: -F %S/Inputs -fsyntax-only %s -verify -Wno-incomplete-umbrella
> +// RUN: diff %t/Module.pcm %t-saved/Module.pcm
> +
> +// Make the build more restricted (-Werror)
> +// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fdisable-module-hash \
> +// RUN: -F %S/Inputs -fsyntax-only %s -verify -Wno-incomplete-umbrella \
> +// RUN: -Werror -Wno-incomplete-umbrella
> +// RUN: not diff %t/Module.pcm %t-saved/Module.pcm
> +// RUN: cp %t/Module.pcm %t-saved/Module.pcm
> +
> +// Ensure -Werror=header-guard is less strict than -Werror
> +// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fdisable-module-hash \
> +// RUN: -F %S/Inputs -fsyntax-only %s -verify -Wno-incomplete-umbrella \
> +// RUN: -Werror=header-guard -Wno-incomplete-umbrella
> +// RUN: diff %t/Module.pcm %t-saved/Module.pcm
> +
> +// But -Werror=unused is not, because some of its diags are DefaultIgnore
> +// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fdisable-module-hash \
> +// RUN: -F %S/Inputs -fsyntax-only %s -verify -Wno-incomplete-umbrella \
> +// RUN: -Werror=unused
> +// RUN: not diff %t/Module.pcm %t-saved/Module.pcm
> +// RUN: cp %t/Module.pcm %t-saved/Module.pcm
> +
> +// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fdisable-module-hash \
> +// RUN: -F %S/Inputs -fsyntax-only %s -verify -Wno-incomplete-umbrella \
> +// RUN: -Werror -Wno-incomplete-umbrella
> +
> +// FIXME: when rebuilding the module, take the union of the diagnostic options
> +// so that we don't need to rebuild here
> +// RUN-DISABLED: diff %t/Module.pcm %t-saved/Module.pcm
> +
> +// -Wno-everything, -Werror
> +// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fdisable-module-hash \
> +// RUN: -F %S/Inputs -fsyntax-only %s -verify -Wno-incomplete-umbrella \
> +// RUN: -Wno-everything -Wall -Werror
> +// RUN: cp %t/Module.pcm %t-saved/Module.pcm
> +// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fdisable-module-hash \
> +// RUN: -F %S/Inputs -fsyntax-only %s -verify -Wno-incomplete-umbrella \
> +// RUN: -Wall -Werror
> +// RUN: not diff %t/Module.pcm %t-saved/Module.pcm
> +
> +// -pedantic, -Werror is not compatible with -Wall -Werror
> +// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fdisable-module-hash \
> +// RUN: -F %S/Inputs -fsyntax-only %s -verify -Wno-incomplete-umbrella \
> +// RUN: -Werror -pedantic
> +// RUN: not diff %t/Module.pcm %t-saved/Module.pcm
> +// RUN: cp %t/Module.pcm %t-saved/Module.pcm
> +
> +// -pedantic-errors is less strict that -pedantic, -Werror
> +// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fdisable-module-hash \
> +// RUN: -F %S/Inputs -fsyntax-only %s -verify -Wno-incomplete-umbrella \
> +// RUN: -pedantic-errors
> +// RUN: diff %t/Module.pcm %t-saved/Module.pcm
> +
> +// -Wsystem-headers does not affect non-system modules
> +// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fdisable-module-hash \
> +// RUN: -F %S/Inputs -fsyntax-only %s -verify -Wno-incomplete-umbrella \
> +// RUN: -pedantic-errors -Wsystem-headers
> +// RUN: diff %t/Module.pcm %t-saved/Module.pcm
> +
> +// expected-no-diagnostics
> + at import Module;
>
> Modified: cfe/trunk/test/Modules/module_file_info.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/module_file_info.m?rev=207477&r1=207476&r2=207477&view=diff
> ==============================================================================
> --- cfe/trunk/test/Modules/module_file_info.m (original)
> +++ cfe/trunk/test/Modules/module_file_info.m Mon Apr 28 19:36:53 2014
> @@ -2,7 +2,7 @@
> @import DependsOnModule;
>
> // RUN: rm -rf %t
> -// RUN: %clang_cc1 -w -fmodules -fdisable-module-hash -fmodules-cache-path=%t -F %S/Inputs -DBLARG -DWIBBLE=WOBBLE %s
> +// RUN: %clang_cc1 -w -Wunused -fmodules -fdisable-module-hash -fmodules-cache-path=%t -F %S/Inputs -DBLARG -DWIBBLE=WOBBLE %s
> // RUN: %clang_cc1 -module-file-info %t/DependsOnModule.pcm | FileCheck %s
>
> // CHECK: Generated by this Clang:
> @@ -21,6 +21,11 @@
> // CHECK: ABI:
> // CHECK: Linker version:
>
> +// CHECK: Diagnostic options:
> +// CHECK: IgnoreWarnings: Yes
> +// CHECK: Warning options:
> +// CHECK: -Wunused
> +
> // CHECK: Header search options:
> // CHECK: System root [-isysroot=]: '/'
> // CHECK: Use builtin include directories [-nobuiltininc]: Yes
>
> Modified: cfe/trunk/test/Modules/resolution-change.m
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/resolution-change.m?rev=207477&r1=207476&r2=207477&view=diff
> ==============================================================================
> --- cfe/trunk/test/Modules/resolution-change.m (original)
> +++ cfe/trunk/test/Modules/resolution-change.m Mon Apr 28 19:36:53 2014
> @@ -6,6 +6,9 @@
> // Use the PCH with the same header search options; should be fine
> // RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I %S/Inputs/modules-with-same-name/DependsOnA -I %S/Inputs/modules-with-same-name/path1/A -include-pch %t-A.pch %s -fsyntax-only -Werror
>
> +// Different -W options are ok
> +// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I %S/Inputs/modules-with-same-name/DependsOnA -I %S/Inputs/modules-with-same-name/path1/A -include-pch %t-A.pch %s -fsyntax-only -Werror -Wauto-import
> +
> // Use the PCH with no way to resolve DependsOnA
> // RUN: not %clang_cc1 -fmodules -fmodules-cache-path=%t -include-pch %t-A.pch %s -fsyntax-only 2>&1 | FileCheck -check-prefix=CHECK-NODOA %s
> // CHECK-NODOA: module 'DependsOnA' imported by AST file '{{.*A.pch}}' not found
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list