diff options
author | Nathan Sidwell <nathan@acm.org> | 2020-12-14 11:40:44 -0800 |
---|---|---|
committer | Nathan Sidwell <nathan@acm.org> | 2020-12-15 07:43:23 -0800 |
commit | 4efde6781bba8d64b9dcff07e7efe71d35aa6f6a (patch) | |
tree | b5d1ce72629fac6faca3dd3b40c03cb2007549c6 /gcc/testsuite | |
parent | b7dfc2074c78415d451eb34d1608016c80b1c41a (diff) | |
download | gcc-4efde6781bba8d64b9dcff07e7efe71d35aa6f6a.zip gcc-4efde6781bba8d64b9dcff07e7efe71d35aa6f6a.tar.gz gcc-4efde6781bba8d64b9dcff07e7efe71d35aa6f6a.tar.bz2 |
c++: Modules Is Landing
This is the C++ modules implementation. Dropping in the real
module.cc file into the module-shaped hole I carved out. I include
some sanity tests for now. I'll commit the remaining tests when the
initial round of failures seems abated.
gcc/cp/
* module.cc: Replace stubs with implementation.
gcc/testsuite/
* g++.dg/modules/mod-decl-0-2a.C: New.
* g++.dg/modules/mod-decl-0.C: New.
* g++.dg/modules/mod-decl-1.C: New.
* g++.dg/modules/mod-decl-2_a.C: New.
* g++.dg/modules/mod-decl-2_b.C: New.
* g++.dg/modules/mod-decl-2_c.C: New.
* g++.dg/modules/mod-decl-3.C: New.
* g++.dg/modules/mod-decl-5_a.C: New.
* g++.dg/modules/mod-decl-5_b.C: New.
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/g++.dg/modules/mod-decl-0-2a.C | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/modules/mod-decl-0.C | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/modules/mod-decl-1.C | 29 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/modules/mod-decl-2_a.C | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/modules/mod-decl-2_b.C | 11 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/modules/mod-decl-2_c.C | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/modules/mod-decl-3.C | 26 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/modules/mod-decl-5_a.C | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/modules/mod-decl-5_b.C | 11 |
9 files changed, 108 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/modules/mod-decl-0-2a.C b/gcc/testsuite/g++.dg/modules/mod-decl-0-2a.C new file mode 100644 index 0000000..75406f8 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/mod-decl-0-2a.C @@ -0,0 +1,6 @@ +// { dg-options "-fno-modules -std=c++2a" } + +export // { dg-message "enabled with" } +module nope; // { dg-error "not name a type" } +// { dg-message "only available with .-fmodules." "" { target *-*-* } .-1 } +// { dg-module-cmi "!nope" } diff --git a/gcc/testsuite/g++.dg/modules/mod-decl-0.C b/gcc/testsuite/g++.dg/modules/mod-decl-0.C new file mode 100644 index 0000000..fcafc0b --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/mod-decl-0.C @@ -0,0 +1,6 @@ +// { dg-options "-fno-modules -std=c++17" } + +export // { dg-message "ignored" } +module nope; // { dg-error "not name a type" } +// { dg-message "only available with .-fmodules." "" { target *-*-* } .-1 } +// { dg-module-cmi "!nope" } diff --git a/gcc/testsuite/g++.dg/modules/mod-decl-1.C b/gcc/testsuite/g++.dg/modules/mod-decl-1.C new file mode 100644 index 0000000..b2665be --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/mod-decl-1.C @@ -0,0 +1,29 @@ +// { dg-additional-options "-fmodules-ts" } +module; + +export module frist; +// { dg-module-cmi "!frist" } + +import frist; // { dg-error {cannot import module.* in its own purview} } + +module foo.second; // { dg-error "not permitted here" } + +namespace Foo +{ +module third; // { dg-error "not permitted here" } +} + +struct Baz +{ + module forth; // { dg-error "expected" } +}; + +void Bink () +{ + module fifth; // { dg-error "expected" } +} + +module a.; // { dg-error "not permitted" } + +// { dg-prune-output "not writing module" } + diff --git a/gcc/testsuite/g++.dg/modules/mod-decl-2_a.C b/gcc/testsuite/g++.dg/modules/mod-decl-2_a.C new file mode 100644 index 0000000..9b4a920 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/mod-decl-2_a.C @@ -0,0 +1,8 @@ +// { dg-additional-options "-fmodules-ts" } +export module bob; +// { dg-module-cmi "bob" } +export void Foo (); +export +{ + void Bar (); +} diff --git a/gcc/testsuite/g++.dg/modules/mod-decl-2_b.C b/gcc/testsuite/g++.dg/modules/mod-decl-2_b.C new file mode 100644 index 0000000..a3ea9b5 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/mod-decl-2_b.C @@ -0,0 +1,11 @@ +// { dg-additional-options "-fmodules-ts" } +module bob; + +import bob; // { dg-error "cannot import module.* in its own purview" } + +// module linkage +void Baz () +{ + Foo (); + Bar (); +} diff --git a/gcc/testsuite/g++.dg/modules/mod-decl-2_c.C b/gcc/testsuite/g++.dg/modules/mod-decl-2_c.C new file mode 100644 index 0000000..4808ad2 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/mod-decl-2_c.C @@ -0,0 +1,8 @@ +// { dg-additional-options "-fmodules-ts" } +import bob; + +void Baz () +{ + Foo (); + Bar (); +} diff --git a/gcc/testsuite/g++.dg/modules/mod-decl-3.C b/gcc/testsuite/g++.dg/modules/mod-decl-3.C new file mode 100644 index 0000000..16fa5a8 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/mod-decl-3.C @@ -0,0 +1,26 @@ +// { dg-additional-options "-fmodules-ts -Wno-pedantic" } +module; +# 4 "mod-decl-3.C" 1 +export void Foo (); // { dg-error "after a module interface" } + +# 7 "" 2 +export module bob; +// { dg-module-cmi "!bob" } + +export +export // { dg-error "occur once" } +void Baz (); + +export +{ + export // { dg-error "occur once" } + void Bar (); +} + +namespace Bink +{ + import // { dg-error "does not name" } + ben; +} + +// { dg-prune-output "not writing module" } diff --git a/gcc/testsuite/g++.dg/modules/mod-decl-5_a.C b/gcc/testsuite/g++.dg/modules/mod-decl-5_a.C new file mode 100644 index 0000000..c39807d --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/mod-decl-5_a.C @@ -0,0 +1,3 @@ +// { dg-additional-options "-fmodules-ts" } +export module thing.baz; +// { dg-module-cmi "thing.baz" } diff --git a/gcc/testsuite/g++.dg/modules/mod-decl-5_b.C b/gcc/testsuite/g++.dg/modules/mod-decl-5_b.C new file mode 100644 index 0000000..b3eea76 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/mod-decl-5_b.C @@ -0,0 +1,11 @@ +// { dg-additional-options "-fmodules-ts -Wno-pedantic" } +module; +# 4 "gmf" 1 +import thing.baz; + +export int foo (); // { dg-error "after a module interface" } +# 8 "" 2 +export module thing.baz; // { dg-error "module already imported" } + +import thing.baz; + |