Skip to content

Commit 15b28fb

Browse files
author
git apple-llvm automerger
committed
Merge commit '46fdaac098a3' from llvm.org/master into apple/main
2 parents 7fb620e + 46fdaac commit 15b28fb

File tree

1 file changed

+17
-20
lines changed
  • libcxx/test/std/experimental/language.support/support.coroutines/end.to.end

1 file changed

+17
-20
lines changed

libcxx/test/std/experimental/language.support/support.coroutines/end.to.end/expected.pass.cpp

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,53 +11,50 @@
1111

1212
#include <experimental/coroutine>
1313
#include <cassert>
14+
#include <memory>
1415

1516
#include "test_macros.h"
1617
using namespace std::experimental;
1718

18-
struct error {};
19+
struct error_tag { };
1920

2021
template <typename T, typename Error = int>
2122
struct expected {
2223

2324
struct Data {
25+
Data() : val(), error() { }
26+
Data(T v, Error e) : val(v), error(e) { }
2427
T val;
2528
Error error;
2629
};
27-
Data data;
30+
std::shared_ptr<Data> data;
2831

29-
struct DataPtr {
30-
Data *p;
31-
~DataPtr() { delete p; }
32-
};
33-
34-
expected() {}
35-
expected(T val) : data{std::move(val),{}} {}
36-
expected(struct error, Error error) : data{{}, std::move(error)} {}
37-
expected(DataPtr & p) : data{std::move(p.p->val), std::move(p.p->error)} {}
32+
expected(T val) : data(std::make_shared<Data>(val, Error())) {}
33+
expected(error_tag, Error error) : data(std::make_shared<Data>(T(), error)) {}
34+
expected(std::shared_ptr<Data> p) : data(p) {}
3835

3936
struct promise_type {
40-
Data* data;
41-
DataPtr get_return_object() { data = new Data{}; return {data}; }
37+
std::shared_ptr<Data> data;
38+
std::shared_ptr<Data> get_return_object() { data = std::make_shared<Data>(); return data; }
4239
suspend_never initial_suspend() { return {}; }
4340
suspend_never final_suspend() noexcept { return {}; }
44-
void return_value(T v) { data->val = std::move(v); data->error = {};}
41+
void return_value(T v) { data->val = v; data->error = {}; }
4542
void unhandled_exception() {}
4643
};
4744

48-
bool await_ready() { return !data.error; }
49-
T await_resume() { return std::move(data.val); }
45+
bool await_ready() { return !data->error; }
46+
T await_resume() { return data->val; }
5047
void await_suspend(coroutine_handle<promise_type> h) {
51-
h.promise().data->error =std::move(data.error);
48+
h.promise().data->error = data->error;
5249
h.destroy();
5350
}
5451

55-
T const& value() { return data.val; }
56-
Error const& error() { return data.error; }
52+
T const& value() { return data->val; }
53+
Error const& error() { return data->error; }
5754
};
5855

5956
expected<int> g() { return {0}; }
60-
expected<int> h() { return {error{}, 42}; }
57+
expected<int> h() { return {error_tag{}, 42}; }
6158

6259
extern "C" void print(int);
6360

0 commit comments

Comments
 (0)