summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/include/clang/Basic/DiagnosticLexKinds.td2
-rw-r--r--clang/lib/Lex/ModuleMap.cpp22
-rw-r--r--clang/lib/Lex/PPDirectives.cpp2
-rw-r--r--clang/test/Modules/Inputs/declare-use/h.h2
-rw-r--r--clang/test/Modules/Inputs/string_names/a.h4
-rw-r--r--clang/test/Modules/Inputs/string_names/b.h4
-rw-r--r--clang/test/Modules/Inputs/string_names/c.h4
-rw-r--r--clang/test/Modules/Inputs/string_names/module.map16
-rw-r--r--clang/test/Modules/Inputs/string_names/sub.h4
-rw-r--r--clang/test/Modules/declare-use1.cpp2
-rw-r--r--clang/test/Modules/declare-use2.cpp2
-rw-r--r--clang/test/Modules/string_names.cpp6
12 files changed, 45 insertions, 25 deletions
diff --git a/clang/include/clang/Basic/DiagnosticLexKinds.td b/clang/include/clang/Basic/DiagnosticLexKinds.td
index 871f5f65447..e9de4db0368 100644
--- a/clang/include/clang/Basic/DiagnosticLexKinds.td
+++ b/clang/include/clang/Basic/DiagnosticLexKinds.td
@@ -614,7 +614,7 @@ def err_expected_id_building_module : Error<
def error_use_of_private_header_outside_module : Error<
"use of private header from outside its module: '%0'">;
def error_undeclared_use_of_module : Error<
- "use of a module not declared used: '%0'">;
+ "module %0 does not depend on a module exporting '%1'">;
def warn_header_guard : Warning<
"%0 is used as a header guard here, followed by #define of a different macro">,
diff --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp
index f4dfa12854a..3ce0def1d1c 100644
--- a/clang/lib/Lex/ModuleMap.cpp
+++ b/clang/lib/Lex/ModuleMap.cpp
@@ -1066,7 +1066,7 @@ void ModuleMapParser::skipUntil(MMToken::TokenKind K) {
bool ModuleMapParser::parseModuleId(ModuleId &Id) {
Id.clear();
do {
- if (Tok.is(MMToken::Identifier)) {
+ if (Tok.is(MMToken::Identifier) || Tok.is(MMToken::StringLiteral)) {
Id.push_back(std::make_pair(Tok.getString(), Tok.getLocation()));
consumeToken();
} else {
@@ -1687,25 +1687,7 @@ void ModuleMapParser::parseUseDecl() {
consumeToken();
// Parse the module-id.
ModuleId ParsedModuleId;
-
- do {
- if (Tok.is(MMToken::Identifier)) {
- ParsedModuleId.push_back(
- std::make_pair(Tok.getString(), Tok.getLocation()));
- consumeToken();
-
- if (Tok.is(MMToken::Period)) {
- consumeToken();
- continue;
- }
-
- break;
- }
-
- Diags.Report(Tok.getLocation(), diag::err_mmap_module_id);
- HadError = true;
- return;
- } while (true);
+ parseModuleId(ParsedModuleId);
ActiveModule->UnresolvedDirectUses.push_back(ParsedModuleId);
}
diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp
index 7d4c788f660..70c32c3dc69 100644
--- a/clang/lib/Lex/PPDirectives.cpp
+++ b/clang/lib/Lex/PPDirectives.cpp
@@ -610,7 +610,7 @@ void Preprocessor::verifyModuleInclude(SourceLocation FilenameLoc,
if (RequestingModule && getLangOpts().ModulesDeclUse &&
violatesUseDeclarations(RequestingModule, RequestedModule.getModule()))
Diag(FilenameLoc, diag::error_undeclared_use_of_module)
- << Filename;
+ << RequestingModule->getFullModuleName() << Filename;
}
const FileEntry *Preprocessor::LookupFile(
diff --git a/clang/test/Modules/Inputs/declare-use/h.h b/clang/test/Modules/Inputs/declare-use/h.h
index df99a6dd10a..379e50180ca 100644
--- a/clang/test/Modules/Inputs/declare-use/h.h
+++ b/clang/test/Modules/Inputs/declare-use/h.h
@@ -1,7 +1,7 @@
#ifndef H_H
#define H_H
#include "c.h"
-#include "d.h" // expected-error {{use of a module not declared used}}
+#include "d.h" // expected-error {{does not depend on a module exporting}}
#include "h1.h"
const int h1 = aux_h*c*7*d;
#endif
diff --git a/clang/test/Modules/Inputs/string_names/a.h b/clang/test/Modules/Inputs/string_names/a.h
new file mode 100644
index 00000000000..a36dc1b59d6
--- /dev/null
+++ b/clang/test/Modules/Inputs/string_names/a.h
@@ -0,0 +1,4 @@
+#ifndef A_H
+#define A_H
+const int a = 2;
+#endif
diff --git a/clang/test/Modules/Inputs/string_names/b.h b/clang/test/Modules/Inputs/string_names/b.h
new file mode 100644
index 00000000000..55daf728680
--- /dev/null
+++ b/clang/test/Modules/Inputs/string_names/b.h
@@ -0,0 +1,4 @@
+#ifndef B_H
+#define B_H
+const int b = 3;
+#endif
diff --git a/clang/test/Modules/Inputs/string_names/c.h b/clang/test/Modules/Inputs/string_names/c.h
new file mode 100644
index 00000000000..38c278fc87d
--- /dev/null
+++ b/clang/test/Modules/Inputs/string_names/c.h
@@ -0,0 +1,4 @@
+#ifndef C_H
+#define C_H
+const int c = 2;
+#endif
diff --git a/clang/test/Modules/Inputs/string_names/module.map b/clang/test/Modules/Inputs/string_names/module.map
new file mode 100644
index 00000000000..4e70eda3992
--- /dev/null
+++ b/clang/test/Modules/Inputs/string_names/module.map
@@ -0,0 +1,16 @@
+module "my/module-a" {
+ header "a.h"
+ use "my/module-c"
+
+ module "Sub" {
+ header "sub.h"
+ }
+}
+
+module "my/module-b" {
+ header "b.h"
+}
+
+module "my/module-c" {
+ header "c.h"
+}
diff --git a/clang/test/Modules/Inputs/string_names/sub.h b/clang/test/Modules/Inputs/string_names/sub.h
new file mode 100644
index 00000000000..64b9112d3e6
--- /dev/null
+++ b/clang/test/Modules/Inputs/string_names/sub.h
@@ -0,0 +1,4 @@
+#ifndef SUB_H
+#define SUB_H
+const int sub = 2;
+#endif
diff --git a/clang/test/Modules/declare-use1.cpp b/clang/test/Modules/declare-use1.cpp
index 4508017c12d..5b344032d29 100644
--- a/clang/test/Modules/declare-use1.cpp
+++ b/clang/test/Modules/declare-use1.cpp
@@ -3,5 +3,5 @@
#include "g.h"
#include "e.h"
-#include "f.h" // expected-error {{use of a module not declared used}}
+#include "f.h" // expected-error {{module XG does not depend on a module exporting 'f.h'}}
const int g2 = g1+e+f;
diff --git a/clang/test/Modules/declare-use2.cpp b/clang/test/Modules/declare-use2.cpp
index a2ec55e5e5c..15c57ca36d8 100644
--- a/clang/test/Modules/declare-use2.cpp
+++ b/clang/test/Modules/declare-use2.cpp
@@ -3,5 +3,5 @@
#include "h.h"
#include "e.h"
-#include "f.h" // expected-error {{use of a module not declared used}}
+#include "f.h" // expected-error {{does not depend on a module exporting}}
const int h2 = h1+e+f;
diff --git a/clang/test/Modules/string_names.cpp b/clang/test/Modules/string_names.cpp
new file mode 100644
index 00000000000..ed65aa8a670
--- /dev/null
+++ b/clang/test/Modules/string_names.cpp
@@ -0,0 +1,6 @@
+// RUN: rm -rf %t
+// RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules -fmodules-decluse -I %S/Inputs/string_names %s -fmodule-name="my/module-a" -verify
+
+#include "a.h"
+#include "b.h" // expected-error {{does not depend on a module exporting}}
+#include "c.h"
OpenPOWER on IntegriCloud