diff options
-rw-r--r-- | clang/include/clang/Basic/DiagnosticLexKinds.td | 2 | ||||
-rw-r--r-- | clang/lib/Lex/ModuleMap.cpp | 22 | ||||
-rw-r--r-- | clang/lib/Lex/PPDirectives.cpp | 2 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/declare-use/h.h | 2 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/string_names/a.h | 4 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/string_names/b.h | 4 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/string_names/c.h | 4 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/string_names/module.map | 16 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/string_names/sub.h | 4 | ||||
-rw-r--r-- | clang/test/Modules/declare-use1.cpp | 2 | ||||
-rw-r--r-- | clang/test/Modules/declare-use2.cpp | 2 | ||||
-rw-r--r-- | clang/test/Modules/string_names.cpp | 6 |
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" |