[clang][Modules] Fix a regression in handling missing framework headers.
authorIain Sandoe <iain@sandoe.co.uk>
Thu, 18 Aug 2022 13:34:50 +0000 (14:34 +0100)
committerIain Sandoe <iain@sandoe.co.uk>
Fri, 19 Aug 2022 08:13:22 +0000 (09:13 +0100)
The commit of af2d11b1d5c1508b506825df460656e0151cd3b0 missed a case where
the value of a suggested module needed to be reset to nullptr.  Fixed thus
and added a testcase to cover the circumstance.

clang/lib/Lex/PPDirectives.cpp
clang/test/Modules/missing-framework-header.cpp [new file with mode: 0644]

index 08ac457..97d0bba 100644 (file)
@@ -2286,6 +2286,7 @@ Preprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(
       // actual module containing it exists (because the umbrella header is
       // incomplete).  Treat this as a textual inclusion.
       SuggestedModule = ModuleMap::KnownHeader();
+      SM = nullptr;
     } else if (Imported.isConfigMismatch()) {
       // On a configuration mismatch, enter the header textually. We still know
       // that it's part of the corresponding module.
diff --git a/clang/test/Modules/missing-framework-header.cpp b/clang/test/Modules/missing-framework-header.cpp
new file mode 100644 (file)
index 0000000..b618451
--- /dev/null
@@ -0,0 +1,27 @@
+// RUN: rm -rf %t && mkdir %t
+// RUN: split-file %s %t
+
+//--- frameworks/FW.framework/Modules/module.modulemap
+framework module FW {
+   umbrella header "FW.h"
+   module * { export * }
+}
+
+//--- frameworks/FW.framework/Headers/FW.h
+#include "One.h"
+//--- frameworks/FW.framework/Headers/One.h
+//--- frameworks/FW.framework/Headers/Two.h
+
+//--- module.modulemap
+module Mod { header "Mod.h" }
+//--- Mod.h
+#include "FW/Two.h"
+//--- from_module.m
+#include "Mod.h"
+
+// RUN: %clang -fmodules -fmodules-cache-path=%t/cache \
+// RUN: -iframework %t/frameworks -c %t/from_module.m -o %t/from_module.o \
+// RUN:  2>&1 | FileCheck %s
+
+// CHECK: warning: missing submodule 'FW.Two'
+