[gcc/devel/ranger] coroutines: Test that we correctly use class data members.

Aldy Hernandez aldyh@gcc.gnu.org
Wed Jun 17 19:20:17 GMT 2020


https://gcc.gnu.org/g:26e78220c71829523181592eb5047538a6e35a99

commit 26e78220c71829523181592eb5047538a6e35a99
Author: Iain Sandoe <iain@sandoe.co.uk>
Date:   Sun Feb 23 15:44:20 2020 +0000

    coroutines: Test that we correctly use class data members.
    
    Improve test coverage, NFC.
    
    gcc/testsuite/ChangeLog:
    
    2020-03-01 Iain Sandoe <iain@sandoe.co.uk>
    
            * g++.dg/coroutines/torture/class-07-data-member.C: New test.

Diff:
---
 gcc/testsuite/ChangeLog                            |  4 ++
 .../coroutines/torture/class-07-data-member.C      | 61 ++++++++++++++++++++++
 2 files changed, 65 insertions(+)

diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fd3eeba9946..35b1a3c2bfc 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2020-03-01 Iain Sandoe <iain@sandoe.co.uk>
+
+	* g++.dg/coroutines/torture/class-07-data-member.C: New test.
+
 2020-03-01  Paul Thomas  <pault@gcc.gnu.org>
 
 	PR fortran/92976
diff --git a/gcc/testsuite/g++.dg/coroutines/torture/class-07-data-member.C b/gcc/testsuite/g++.dg/coroutines/torture/class-07-data-member.C
new file mode 100644
index 00000000000..00a0df69758
--- /dev/null
+++ b/gcc/testsuite/g++.dg/coroutines/torture/class-07-data-member.C
@@ -0,0 +1,61 @@
+//  { dg-do run }
+
+// Show that we are correctly accessing class variables.
+
+#include "../coro.h"
+
+// boiler-plate for tests of codegen
+#include "../coro1-ret-int-yield-int.h"
+
+class Foo
+{
+  int v;
+  public:
+  Foo () : v(0) {};
+  Foo (int x) : v(x) {};
+  coro1 meth ()
+    {
+      PRINT ("coro1: about to return");
+      co_return v++;
+    }
+};
+
+int main ()
+{
+  Foo inst (42);
+  int y;
+  {
+    PRINT ("main: create coro1 [instance 1]");
+    coro1 x = inst.meth ();
+    if (x.handle.done())
+      abort();
+    PRINT ("main: got coro1 - resuming (initial suspend)");
+    x.handle.resume();
+    PRINT ("main: after resume");
+    y = x.handle.promise().get_value();
+    if ( y != 42 )
+      abort ();
+    if (!x.handle.done())
+      {
+        PRINT ("main: apparently not done...");
+        abort ();
+      }
+  }
+  PRINT ("main: create coro1 [instance 2]");
+  coro1 p = inst.meth ();
+  if (p.handle.done())
+    abort();
+  PRINT ("main: got coro1 - resuming (initial suspend)");
+  p.handle.resume();
+  PRINT ("main: after resume");
+  y = p.handle.promise().get_value();
+  if ( y != 43 )
+    abort ();
+  if (!p.handle.done())
+    {
+      PRINT ("main: apparently not done...");
+      abort ();
+    }
+  PRINT ("main: returning");
+  return 0;
+}


More information about the Gcc-cvs mailing list