forked from OSchip/llvm-project
[Modules] Improve error message when cannot find parent module for submodule definition.
Before the change the diagnostic for module unknown.submodule {} was "error: expected module name" which is incorrect and misleading because both "unknown" and "submodule" are valid module names. We already have a better error message when a parent module is a submodule itself and is missing. Make the error for a missing top-level module more like the one for a submodule. rdar://problem/64424407 Reviewed By: bruno Differential Revision: https://reviews.llvm.org/D84458
This commit is contained in:
parent
1e13372bc8
commit
8839e278ff
|
@ -695,6 +695,9 @@ def err_mmap_missing_module_unqualified : Error<
|
|||
"no module named '%0' visible from '%1'">;
|
||||
def err_mmap_missing_module_qualified : Error<
|
||||
"no module named '%0' in '%1'">;
|
||||
def err_mmap_missing_parent_module: Error<
|
||||
"no module named '%0' %select{found|in '%2'}1, "
|
||||
"parent module must be defined before the submodule">;
|
||||
def err_mmap_top_level_inferred_submodule : Error<
|
||||
"only submodules and framework modules may be inferred with wildcard syntax">;
|
||||
def err_mmap_inferred_no_umbrella : Error<
|
||||
|
|
|
@ -1903,18 +1903,16 @@ void ModuleMapParser::parseModuleDecl() {
|
|||
continue;
|
||||
}
|
||||
|
||||
if (ActiveModule) {
|
||||
Diags.Report(Id[I].second, diag::err_mmap_missing_module_qualified)
|
||||
<< Id[I].first
|
||||
<< ActiveModule->getTopLevelModule()->getFullModuleName();
|
||||
} else {
|
||||
Diags.Report(Id[I].second, diag::err_mmap_expected_module_name);
|
||||
}
|
||||
Diags.Report(Id[I].second, diag::err_mmap_missing_parent_module)
|
||||
<< Id[I].first << (ActiveModule != nullptr)
|
||||
<< (ActiveModule
|
||||
? ActiveModule->getTopLevelModule()->getFullModuleName()
|
||||
: "");
|
||||
HadError = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (ModuleMapFile != Map.getContainingModuleMapFile(TopLevelModule)) {
|
||||
if (TopLevelModule &&
|
||||
ModuleMapFile != Map.getContainingModuleMapFile(TopLevelModule)) {
|
||||
assert(ModuleMapFile != Map.getModuleMapFileForUniquing(TopLevelModule) &&
|
||||
"submodule defined in same file as 'module *' that allowed its "
|
||||
"top-level module");
|
||||
|
|
|
@ -28,3 +28,9 @@ module header_attr {
|
|||
header "quux.h" { size 1 mtime 2 }
|
||||
header "no_attrs.h" {}
|
||||
}
|
||||
|
||||
// CHECK: diagnostics.modulemap:[[@LINE+1]]:8: error: no module named 'unknown' found, parent module must be defined before the submodule
|
||||
module unknown.submodule {}
|
||||
module known_top_level {}
|
||||
// CHECK: diagnostics.modulemap:[[@LINE+1]]:24: error: no module named 'unknown' in 'known_top_level', parent module must be defined before the submodule
|
||||
module known_top_level.unknown.submodule {}
|
||||
|
|
Loading…
Reference in New Issue