Skip to content

Commit f6f603d

Browse files
committed
Cleanup [[no_unique_address]] tests
Related comments: * #65536 (comment) * #65536 (comment) * #65536 (comment)
1 parent 3a73fac commit f6f603d

File tree

2 files changed

+27
-15
lines changed

2 files changed

+27
-15
lines changed

libcxx/test/libcxx/ranges/range.adaptors/range.join.with/range.join.with.iterator/no_unique_address.compile.pass.cpp

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,31 +22,36 @@ struct IntRange : std::ranges::view_base {
2222
int* end();
2323
};
2424

25-
class InputIter {
25+
class Iter {
2626
public:
2727
using value_type = IntRange;
2828
using difference_type = ptrdiff_t;
2929

30-
InputIter& operator++();
30+
Iter& operator++();
3131
void operator++(int);
3232
value_type& operator*() const;
33-
bool operator==(const InputIter&) const;
33+
bool operator==(std::default_sentinel_t) const;
3434

3535
private:
3636
int* ptr_;
3737
};
3838

39-
static_assert(std::input_iterator<InputIter>);
40-
static_assert(!std::forward_iterator<InputIter>);
39+
static_assert(std::input_iterator<Iter>);
40+
static_assert(!std::forward_iterator<Iter>);
4141

42-
struct InputView : std::ranges::view_base {
43-
InputIter begin();
44-
InputIter end();
42+
struct View : std::ranges::view_base {
43+
Iter begin();
44+
std::default_sentinel_t end();
4545
};
4646

47-
static_assert(std::ranges::input_range<InputView>);
48-
static_assert(!std::ranges::forward_range<InputView>);
47+
static_assert(std::ranges::input_range<View>);
48+
static_assert(!std::ranges::forward_range<View>);
4949

50-
static_assert(alignof(void*) == alignof(std::variant<int*, int*>)); // alignof(__parent_) == alignof(__inner_it_)
51-
static_assert(sizeof(std::ranges::iterator_t<std::ranges::join_with_view<InputView, IntRange>>) ==
50+
using JWV = std::ranges::join_with_view<View, IntRange>;
51+
52+
// Expected JWV::iterator layout:
53+
// _Parent* __parent_; // offset: 0
54+
// [[no_unique_address]] __empty __outer_it; // 0
55+
// variant<_PatternIter, _InnerIter> __pattern_; // 8
56+
static_assert(sizeof(std::ranges::iterator_t<JWV>) ==
5257
sizeof(void*) + sizeof(std::variant<int*, int*>)); // sizeof(__parent_) + sizeof(__inner_it_)

libcxx/test/libcxx/ranges/range.adaptors/range.join.with/range.join.with.view/no_unique_address.compile.pass.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,15 @@ struct Pattern : std::ranges::view_base {
3333
template <class View>
3434
struct Test {
3535
[[no_unique_address]] View view;
36-
char c;
36+
unsigned char pad;
3737
};
3838

39-
static_assert(sizeof(Test<std::ranges::join_with_view<ForwardView, Pattern>>) ==
40-
sizeof(std::ranges::join_with_view<ForwardView, Pattern>));
39+
using JWV = std::ranges::join_with_view<ForwardView, Pattern>;
40+
41+
// Expected JWV layout:
42+
// [[no_unique_address]] _View __base_ // offset: 0
43+
// [[no_unique_address]] __empty_cache __outer_it; // 0
44+
// [[no_unique_address]] __empty_cache __inner_; // 1
45+
// [[no_unique_address]] _Patter __pattern_ // 0
46+
static_assert(sizeof(JWV) == 2);
47+
static_assert(sizeof(Test<JWV>) == 2);

0 commit comments

Comments
 (0)