Skip to content

Commit a293b1e

Browse files
Merge pull request #7660 from ian-twilightcoder/fix-uses
[cherry-pick stable/20230725] [Modules] textual headers in submodules never resolve their `use`s
2 parents e55e0bc + 492c174 commit a293b1e

File tree

2 files changed

+38
-6
lines changed

2 files changed

+38
-6
lines changed

clang/lib/Lex/ModuleMap.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1408,16 +1408,17 @@ bool ModuleMap::resolveExports(Module *Mod, bool Complain) {
14081408
}
14091409

14101410
bool ModuleMap::resolveUses(Module *Mod, bool Complain) {
1411-
auto Unresolved = std::move(Mod->UnresolvedDirectUses);
1412-
Mod->UnresolvedDirectUses.clear();
1411+
auto *Top = Mod->getTopLevelModule();
1412+
auto Unresolved = std::move(Top->UnresolvedDirectUses);
1413+
Top->UnresolvedDirectUses.clear();
14131414
for (auto &UDU : Unresolved) {
1414-
Module *DirectUse = resolveModuleId(UDU, Mod, Complain);
1415+
Module *DirectUse = resolveModuleId(UDU, Top, Complain);
14151416
if (DirectUse)
1416-
Mod->DirectUses.push_back(DirectUse);
1417+
Top->DirectUses.push_back(DirectUse);
14171418
else
1418-
Mod->UnresolvedDirectUses.push_back(UDU);
1419+
Top->UnresolvedDirectUses.push_back(UDU);
14191420
}
1420-
return !Mod->UnresolvedDirectUses.empty();
1421+
return !Top->UnresolvedDirectUses.empty();
14211422
}
14221423

14231424
bool ModuleMap::resolveConflicts(Module *Mod, bool Complain) {
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// RUN: rm -rf %t
2+
// RUN: split-file %s %t
3+
// RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules -fimplicit-module-maps -I %t %t/no-undeclared-includes.c -verify
4+
5+
//--- no-undeclared-includes.c
6+
// expected-no-diagnostics
7+
#include <assert.h>
8+
9+
//--- assert.h
10+
#include <base.h>
11+
12+
//--- base.h
13+
#ifndef base_h
14+
#define base_h
15+
16+
17+
18+
#endif /* base_h */
19+
20+
//--- module.modulemap
21+
module cstd [system] [no_undeclared_includes] {
22+
use base
23+
module assert {
24+
textual header "assert.h"
25+
}
26+
}
27+
28+
module base [system] {
29+
header "base.h"
30+
export *
31+
}

0 commit comments

Comments
 (0)