c++: Enable coroutines with -std=c++20.
authorJason Merrill <jason@redhat.com>
Fri, 15 May 2020 21:59:49 +0000 (17:59 -0400)
committerJason Merrill <jason@redhat.com>
Fri, 15 May 2020 21:59:49 +0000 (17:59 -0400)
Now that GCC 10 is out it seems time.  People can still choose to disable
coroutines with -fno-coroutines.

This also switches the coroutines testsuite to run in C++20 mode.  The
change to coro.h is only necessary for co-await-11-forwarding.C; we could
alternatively #include <utility> just in that file.

gcc/c-family/ChangeLog
2020-05-15  Jason Merrill  <jason@redhat.com>

* c-opts.c (set_std_cxx20): Set flag_coroutines.

gcc/testsuite/ChangeLog
2020-05-15  Jason Merrill  <jason@redhat.com>

* g++.dg/coroutines/coro.h: Always #include <utility>.
* g++.dg/coroutines/coroutines.exp (DEFAULT_COROFLAGS): Use
-std=c++20.

gcc/c-family/ChangeLog
gcc/c-family/c-opts.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/coroutines/coro.h
gcc/testsuite/g++.dg/coroutines/coroutines.exp

index 7bd78c085daee49a75306256fbd842bbf703e0e6..da4be414b6cbc37083390f0790cbd7c50010adaf 100644 (file)
@@ -1,3 +1,7 @@
+2020-05-15  Jason Merrill  <jason@redhat.com>
+
+       * c-opts.c (set_std_cxx20): Set flag_coroutines.
+
 2020-05-13  Jason Merrill  <jason@redhat.com>
 
        * c.opt (std=c++20): Make c++2a the alias.
index bd617d3df18eb478884d25714d699180ff85e80b..7695e88c13015a57fa806a68b1b9634dac178fb1 100644 (file)
@@ -1722,7 +1722,7 @@ set_std_cxx17 (int iso)
   lang_hooks.name = "GNU C++17";
 }
 
-/* Set the C++ 202a draft standard (without GNU extensions if ISO).  */
+/* Set the C++ 2020 standard (without GNU extensions if ISO).  */
 static void
 set_std_cxx20 (int iso)
 {
@@ -1734,9 +1734,10 @@ set_std_cxx20 (int iso)
   flag_isoc94 = 1;
   flag_isoc99 = 1;
   flag_isoc11 = 1;
-  /* C++20 includes concepts. */
+  /* C++20 includes coroutines. */
+  flag_coroutines = true;
   cxx_dialect = cxx20;
-  lang_hooks.name = "GNU C++17"; /* Pretend C++17 until standardization.  */
+  lang_hooks.name = "GNU C++20";
 }
 
 /* Args to -d specify what to dump.  Silently ignore
index fb93dbb927be6b29a34c082d2cf46ef9e905d3fa..875ac82fb3407c494fdcf5edfe445b3f134b8b07 100644 (file)
@@ -1,3 +1,9 @@
+2020-05-15  Jason Merrill  <jason@redhat.com>
+
+       * g++.dg/coroutines/coro.h: Always #include <utility>.
+       * g++.dg/coroutines/coroutines.exp (DEFAULT_COROFLAGS): Use
+       -std=c++20.
+
 2020-05-15  Segher Boessenkool  <segher@kernel.crashing.org>
 
        * gcc.target/powerpc/vec-gnb-0.c: Use int128 effective target.
index fccfe418616b336da168d72b1e0f2c944d06283e..02d26602727324072dc607bcb178b1e16d85983b 100644 (file)
@@ -2,20 +2,12 @@
 
 #include <coroutine>
 
-#  if __clang__
-#    include <utility>
-#  endif
-
 namespace coro = std;
 
 #elif __has_include(<experimental/coroutine>)
 
 #include <experimental/coroutine>
 
-#  if __clang__
-#    include <utility>
-#  endif
-
 namespace coro = std::experimental;
 
 #else
@@ -143,6 +135,8 @@ extern "C" int printf (const char *, ...);
 
 #include <cstdlib> /* for abort () */
 
+#include <utility> /* for std::forward */
+
 #ifndef OUTPUT
 #  define PRINT(X)
 #  define PRINTF (void)
index e7fd4dac461bf2b52ec9e96c72c0b86ca249261f..1bef98ae54d5494c6afb504380bdefb1cbbc2e92 100644 (file)
@@ -29,7 +29,7 @@ if ![info exists DEFAULT_CXXFLAGS] then {
 }
 
 set DEFAULT_COROFLAGS $DEFAULT_CXXFLAGS
-lappend DEFAULT_COROFLAGS "-std=c++17" "-fcoroutines"
+lappend DEFAULT_COROFLAGS "-std=c++20"
 
 dg-init