On Apr 29, 2014, at 6:00 AM, NAKAMURA Takumi <geek4ci...@gmail.com> wrote:
> 2014-04-29 9:36 GMT+09:00 Ben Langmuir <blangm...@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. Thanks for the heads up. Reapplied in r207549 with a fix to move the dependency into Basic. > >> #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 >> +@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 >> +@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@cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits