Allow string literals as module names.
In order to make the migration to modules easier, it seems to be helpful
to allow a 1:1 mapping between target names of a current build system
and the corresponding C++ modules. As such targets commonly contain
characters like "-". ":" and "/", allowing arbitrary quote-escaped
strings seems to be a straightforward option.
After several offline discussions, the precise mechanisms for C++
module names especially regarding submodules and import statements has
yet to be determined. Thus, this patch only enables string literals as
names inside the module map files which can be used by automatic module
import (through #include).
Also improve the error message on missing use-declarations.
llvm-svn: 196573
diff --git a/clang/test/Modules/Inputs/declare-use/h.h b/clang/test/Modules/Inputs/declare-use/h.h
index df99a6d..379e501 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 0000000..a36dc1b
--- /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 0000000..55daf72
--- /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 0000000..38c278f
--- /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 0000000..4e70eda
--- /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 0000000..64b9112
--- /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 4508017..5b34403 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 a2ec55e..15c57ca 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 0000000..ed65aa8
--- /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"