summaryrefslogtreecommitdiffstats
path: root/clang/test/Modules/Inputs
diff options
context:
space:
mode:
authorDaniel Jasper <djasper@google.com>2013-09-24 09:14:14 +0000
committerDaniel Jasper <djasper@google.com>2013-09-24 09:14:14 +0000
commitba7f2f7110c201e3564e89bd306e058aa9c6b881 (patch)
tree8f90b26f22d7dccaa4a21ed9d63f101ea2f090dc /clang/test/Modules/Inputs
parent22127cee34f0d2cf816fed14875e8e1ac12eee3c (diff)
downloadbcm5719-llvm-ba7f2f7110c201e3564e89bd306e058aa9c6b881.tar.gz
bcm5719-llvm-ba7f2f7110c201e3564e89bd306e058aa9c6b881.zip
Module use declarations (II)
Review: http://llvm-reviews.chandlerc.com/D1546. I have picked up this patch form Lawrence (http://llvm-reviews.chandlerc.com/D1063) and did a few changes. From the original change description (updated as appropriate): This patch adds a check that ensures that modules only use modules they have so declared. To this end, it adds a statement on intended module use to the module.map grammar: use module-id A module can then only use headers from other modules if it 'uses' them. This enforcement is off by default, but may be turned on with the new option -fmodules-decluse. When enforcing the module semantics, we also need to consider a source file part of a module. This is achieved with a compiler option -fmodule-name=<module-id>. The compiler at present only applies restrictions to the module directly being built. llvm-svn: 191283
Diffstat (limited to 'clang/test/Modules/Inputs')
-rw-r--r--clang/test/Modules/Inputs/declare-use/a.h4
-rw-r--r--clang/test/Modules/Inputs/declare-use/b.h4
-rw-r--r--clang/test/Modules/Inputs/declare-use/c.h6
-rw-r--r--clang/test/Modules/Inputs/declare-use/d.h6
-rw-r--r--clang/test/Modules/Inputs/declare-use/e.h6
-rw-r--r--clang/test/Modules/Inputs/declare-use/f.h6
-rw-r--r--clang/test/Modules/Inputs/declare-use/g.h6
-rw-r--r--clang/test/Modules/Inputs/declare-use/g1.h1
-rw-r--r--clang/test/Modules/Inputs/declare-use/h.h7
-rw-r--r--clang/test/Modules/Inputs/declare-use/h1.h1
-rw-r--r--clang/test/Modules/Inputs/declare-use/module.map43
11 files changed, 90 insertions, 0 deletions
diff --git a/clang/test/Modules/Inputs/declare-use/a.h b/clang/test/Modules/Inputs/declare-use/a.h
new file mode 100644
index 00000000000..a36dc1b59d6
--- /dev/null
+++ b/clang/test/Modules/Inputs/declare-use/a.h
@@ -0,0 +1,4 @@
+#ifndef A_H
+#define A_H
+const int a = 2;
+#endif
diff --git a/clang/test/Modules/Inputs/declare-use/b.h b/clang/test/Modules/Inputs/declare-use/b.h
new file mode 100644
index 00000000000..55daf728680
--- /dev/null
+++ b/clang/test/Modules/Inputs/declare-use/b.h
@@ -0,0 +1,4 @@
+#ifndef B_H
+#define B_H
+const int b = 3;
+#endif
diff --git a/clang/test/Modules/Inputs/declare-use/c.h b/clang/test/Modules/Inputs/declare-use/c.h
new file mode 100644
index 00000000000..a24cd5ae44c
--- /dev/null
+++ b/clang/test/Modules/Inputs/declare-use/c.h
@@ -0,0 +1,6 @@
+#ifndef C_H
+#define C_H
+#include "a.h"
+#include "b.h"
+const int c = a+b;
+#endif
diff --git a/clang/test/Modules/Inputs/declare-use/d.h b/clang/test/Modules/Inputs/declare-use/d.h
new file mode 100644
index 00000000000..a597b01c5d0
--- /dev/null
+++ b/clang/test/Modules/Inputs/declare-use/d.h
@@ -0,0 +1,6 @@
+#ifndef D_H
+#define D_H
+#include "a.h"
+#include "b.h"
+const int d = a+b;
+#endif
diff --git a/clang/test/Modules/Inputs/declare-use/e.h b/clang/test/Modules/Inputs/declare-use/e.h
new file mode 100644
index 00000000000..ed8d843f9a8
--- /dev/null
+++ b/clang/test/Modules/Inputs/declare-use/e.h
@@ -0,0 +1,6 @@
+#ifndef E_H
+#define E_H
+#include "a.h"
+#include "b.h"
+const int e = a*b;
+#endif
diff --git a/clang/test/Modules/Inputs/declare-use/f.h b/clang/test/Modules/Inputs/declare-use/f.h
new file mode 100644
index 00000000000..1d8e2fd2881
--- /dev/null
+++ b/clang/test/Modules/Inputs/declare-use/f.h
@@ -0,0 +1,6 @@
+#ifndef F_H
+#define F_H
+#include "a.h"
+#include "b.h"
+const int f = a+b;
+#endif
diff --git a/clang/test/Modules/Inputs/declare-use/g.h b/clang/test/Modules/Inputs/declare-use/g.h
new file mode 100644
index 00000000000..2a590177f8c
--- /dev/null
+++ b/clang/test/Modules/Inputs/declare-use/g.h
@@ -0,0 +1,6 @@
+#ifndef G_H
+#define G_H
+#include "c.h"
+#include "g1.h"
+const int g1 = aux_g*c*7;
+#endif
diff --git a/clang/test/Modules/Inputs/declare-use/g1.h b/clang/test/Modules/Inputs/declare-use/g1.h
new file mode 100644
index 00000000000..78a072451f8
--- /dev/null
+++ b/clang/test/Modules/Inputs/declare-use/g1.h
@@ -0,0 +1 @@
+int aux_g = 11;
diff --git a/clang/test/Modules/Inputs/declare-use/h.h b/clang/test/Modules/Inputs/declare-use/h.h
new file mode 100644
index 00000000000..df99a6dd10a
--- /dev/null
+++ b/clang/test/Modules/Inputs/declare-use/h.h
@@ -0,0 +1,7 @@
+#ifndef H_H
+#define H_H
+#include "c.h"
+#include "d.h" // expected-error {{use of a module not declared used}}
+#include "h1.h"
+const int h1 = aux_h*c*7*d;
+#endif
diff --git a/clang/test/Modules/Inputs/declare-use/h1.h b/clang/test/Modules/Inputs/declare-use/h1.h
new file mode 100644
index 00000000000..a9275d555c3
--- /dev/null
+++ b/clang/test/Modules/Inputs/declare-use/h1.h
@@ -0,0 +1 @@
+int aux_h = 13;
diff --git a/clang/test/Modules/Inputs/declare-use/module.map b/clang/test/Modules/Inputs/declare-use/module.map
new file mode 100644
index 00000000000..ae3e90801ec
--- /dev/null
+++ b/clang/test/Modules/Inputs/declare-use/module.map
@@ -0,0 +1,43 @@
+module A {
+ header "a.h"
+}
+
+module B {
+ header "b.h"
+}
+
+module C {
+ header "c.h"
+ use A
+}
+
+module D {
+ header "d.h"
+ use A
+}
+
+module E {
+ header "e.h"
+ use A
+ use B
+}
+
+module F {
+ header "f.h"
+ use A
+ use B
+}
+
+module G {
+ header "g.h"
+ header "g1.h"
+ use C
+ use E
+}
+
+module H {
+ header "h.h"
+ header "h1.h"
+ use C
+ use E
+}
OpenPOWER on IntegriCloud