From a2dd6130d49777d63c2d1b641bd8e56f26fa0822 Mon Sep 17 00:00:00 2001 From: Iain Sandoe Date: Thu, 18 Aug 2022 14:34:50 +0100 Subject: [PATCH] [clang][Modules] Fix a regression in handling missing framework headers. 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 | 1 + clang/test/Modules/missing-framework-header.cpp | 27 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 clang/test/Modules/missing-framework-header.cpp diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp index 08ac457..97d0bba 100644 --- a/clang/lib/Lex/PPDirectives.cpp +++ b/clang/lib/Lex/PPDirectives.cpp @@ -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 index 0000000..b618451 --- /dev/null +++ b/clang/test/Modules/missing-framework-header.cpp @@ -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' + -- 2.7.4