Hi Bruno, I don’t know if you are still trying to figure out the problem here, but if you are, I believe the problem is that the forward slashes need to changed to search for either a forward slash or a backward slash since Windows will change them to a backslash.
Locally I can get the test to pass on my Windows machine if I change line 31 to the following: // CHECK-DMOD-NEXT: [ppIncludedFile]: [[DMOD_SUB_OTHER_H:.*/Modules/Inputs/DependsOnModule.framework[/\\]Frameworks[/\\]SubFramework\.framework[/\\]Headers[/\\]Other\.h]] | name: "SubFramework/Other.h" | hash loc: [[DMOD_SUB_H]]:1:1 | isImport: 0 | isAngled: 0 | isModule: 0 | module: DependsOnModule.SubFramework.Other Douglas Yung From: Bruno Cardoso Lopes via cfe-commits <cfe-commits@lists.llvm.org<mailto:cfe-commits@lists.llvm.org>> Date: April 27, 2017 at 17:48:32 PDT To: cfe-commits <cfe-commits@lists.llvm.org<mailto:cfe-commits@lists.llvm.org>> Subject: Re: r301597 - [Modules] Improve diagnostics for incomplete umbrella Reply-To: Bruno Cardoso Lopes <bruno.card...@gmail.com<mailto:bruno.card...@gmail.com>> This is breaking a non related test in some windows bots. Takumi & other with windows access, can you help me figure why? For instance: http://lab.llvm.org:8011/builders/clang-x64-ninja-win7/builds/3846 http://lab.llvm.org:8011/builders/clang-x86-windows-msvc2015/builds/4379 On Thu, Apr 27, 2017 at 3:29 PM, Bruno Cardoso Lopes via cfe-commits <cfe-commits@lists.llvm.org<mailto:cfe-commits@lists.llvm.org>> wrote: Author: bruno Date: Thu Apr 27 17:29:14 2017 New Revision: 301597 URL: http://llvm.org/viewvc/llvm-project?rev=301597&view=rev Log: [Modules] Improve diagnostics for incomplete umbrella One of the -Wincomplete-umbrella warnings diagnoses when a header is present in the directory but it's not present in the umbrella header. Currently, this warning only happens on top level modules; any submodule using an umbrella header does not get this warning. Fix that by also considering the submodules. Differential Revision: https://reviews.llvm.org/D32576 rdar://problem/22623686 Added: cfe/trunk/test/Modules/Inputs/incomplete-umbrella/ cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/ cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Headers/ cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Headers/Bar.h cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Headers/FooPublic.h cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Modules/ cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Modules/module.modulemap cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Modules/module.private.modulemap cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/PrivateHeaders/ cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/PrivateHeaders/Baz.h cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/PrivateHeaders/Foo.h cfe/trunk/test/Modules/incomplete-umbrella.m Modified: cfe/trunk/lib/Lex/PPLexerChange.cpp Modified: cfe/trunk/lib/Lex/PPLexerChange.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPLexerChange.cpp?rev=301597&r1=301596&r2=301597&view=diff ============================================================================== --- cfe/trunk/lib/Lex/PPLexerChange.cpp (original) +++ cfe/trunk/lib/Lex/PPLexerChange.cpp Thu Apr 27 17:29:14 2017 @@ -287,6 +287,14 @@ const char *Preprocessor::getCurLexerEnd return EndPos; } +static void collectAllSubModulesWithUmbrellaHeader( + const Module &Mod, SmallVectorImpl<const Module *> &SubMods) { + if (Mod.getUmbrellaHeader()) + SubMods.push_back(&Mod); + for (auto *M : Mod.submodules()) + collectAllSubModulesWithUmbrellaHeader(*M, SubMods); +} + void Preprocessor::diagnoseMissingHeaderInUmbrellaDir(const Module &Mod) { assert(Mod.getUmbrellaHeader() && "Module must use umbrella header"); SourceLocation StartLoc = @@ -507,10 +515,15 @@ bool Preprocessor::HandleEndOfFile(Token } // If we are building a module that has an umbrella header, make sure that - // each of the headers within the directory covered by the umbrella header - // was actually included by the umbrella header. - if (Module *Mod = getCurrentModule()) - diagnoseMissingHeaderInUmbrellaDir(*Mod); + // each of the headers within the directory, including all submodules, is + // covered by the umbrella header was actually included by the umbrella + // header. + if (Module *Mod = getCurrentModule()) { + llvm::SmallVector<const Module *, 4> AllMods; + collectAllSubModulesWithUmbrellaHeader(*Mod, AllMods); + for (auto *M : AllMods) + diagnoseMissingHeaderInUmbrellaDir(*M); + } return true; } Added: cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Headers/Bar.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Headers/Bar.h?rev=301597&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Headers/Bar.h (added) +++ cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Headers/Bar.h Thu Apr 27 17:29:14 2017 @@ -0,0 +1 @@ +#define BAR_PUBLIC 1 Added: cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Headers/FooPublic.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Headers/FooPublic.h?rev=301597&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Headers/FooPublic.h (added) +++ cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Headers/FooPublic.h Thu Apr 27 17:29:14 2017 @@ -0,0 +1 @@ +// FooPublic.h Added: cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Modules/module.modulemap URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Modules/module.modulemap?rev=301597&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Modules/module.modulemap (added) +++ cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Modules/module.modulemap Thu Apr 27 17:29:14 2017 @@ -0,0 +1,5 @@ +framework module Foo { + umbrella header "FooPublic.h" + requires objc + export * +} Added: cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Modules/module.private.modulemap URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Modules/module.private.modulemap?rev=301597&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Modules/module.private.modulemap (added) +++ cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/Modules/module.private.modulemap Thu Apr 27 17:29:14 2017 @@ -0,0 +1,5 @@ +explicit module Foo.Private { + umbrella header "Foo.h" + requires objc + export * +} Added: cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/PrivateHeaders/Baz.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/PrivateHeaders/Baz.h?rev=301597&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/PrivateHeaders/Baz.h (added) +++ cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/PrivateHeaders/Baz.h Thu Apr 27 17:29:14 2017 @@ -0,0 +1 @@ +#define BAZ_PRIVATE 1 Added: cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/PrivateHeaders/Foo.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/PrivateHeaders/Foo.h?rev=301597&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/PrivateHeaders/Foo.h (added) +++ cfe/trunk/test/Modules/Inputs/incomplete-umbrella/Foo.framework/PrivateHeaders/Foo.h Thu Apr 27 17:29:14 2017 @@ -0,0 +1 @@ +// Foo.h Added: cfe/trunk/test/Modules/incomplete-umbrella.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/incomplete-umbrella.m?rev=301597&view=auto ============================================================================== --- cfe/trunk/test/Modules/incomplete-umbrella.m (added) +++ cfe/trunk/test/Modules/incomplete-umbrella.m Thu Apr 27 17:29:14 2017 @@ -0,0 +1,15 @@ +// RUN: rm -rf %t +// RUN: not %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -F%S/Inputs/incomplete-umbrella -fsyntax-only %s 2>&1 | FileCheck %s + +#import <Foo/Foo.h> +#import <Foo/Bar.h> +#import <Foo/Baz.h> +@import Foo.Private; + +// CHECK: warning: umbrella header for module 'Foo' does not include header 'Bar.h' +// CHECK: warning: umbrella header for module 'Foo.Private' does not include header 'Baz.h' +int foo() { + int a = BAR_PUBLIC; + int b = BAZ_PRIVATE; + return 0; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org<mailto:cfe-commits@lists.llvm.org> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits -- Bruno Cardoso Lopes http://www.brunocardoso.cc _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org<mailto: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