aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2020-12-14 11:40:44 -0800
committerNathan Sidwell <nathan@acm.org>2020-12-15 07:43:23 -0800
commit4efde6781bba8d64b9dcff07e7efe71d35aa6f6a (patch)
treeb5d1ce72629fac6faca3dd3b40c03cb2007549c6 /gcc/testsuite
parentb7dfc2074c78415d451eb34d1608016c80b1c41a (diff)
downloadgcc-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.C6
-rw-r--r--gcc/testsuite/g++.dg/modules/mod-decl-0.C6
-rw-r--r--gcc/testsuite/g++.dg/modules/mod-decl-1.C29
-rw-r--r--gcc/testsuite/g++.dg/modules/mod-decl-2_a.C8
-rw-r--r--gcc/testsuite/g++.dg/modules/mod-decl-2_b.C11
-rw-r--r--gcc/testsuite/g++.dg/modules/mod-decl-2_c.C8
-rw-r--r--gcc/testsuite/g++.dg/modules/mod-decl-3.C26
-rw-r--r--gcc/testsuite/g++.dg/modules/mod-decl-5_a.C3
-rw-r--r--gcc/testsuite/g++.dg/modules/mod-decl-5_b.C11
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;
+