diff options
| author | Daniel Jasper <djasper@google.com> | 2013-09-24 09:14:14 +0000 |
|---|---|---|
| committer | Daniel Jasper <djasper@google.com> | 2013-09-24 09:14:14 +0000 |
| commit | ba7f2f7110c201e3564e89bd306e058aa9c6b881 (patch) | |
| tree | 8f90b26f22d7dccaa4a21ed9d63f101ea2f090dc /clang/test/Modules/Inputs | |
| parent | 22127cee34f0d2cf816fed14875e8e1ac12eee3c (diff) | |
| download | bcm5719-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.h | 4 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/declare-use/b.h | 4 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/declare-use/c.h | 6 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/declare-use/d.h | 6 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/declare-use/e.h | 6 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/declare-use/f.h | 6 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/declare-use/g.h | 6 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/declare-use/g1.h | 1 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/declare-use/h.h | 7 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/declare-use/h1.h | 1 | ||||
| -rw-r--r-- | clang/test/Modules/Inputs/declare-use/module.map | 43 |
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 +} |

