// RUN: %check_clang_tidy %s cppcoreguidelines-pro-type-union-access %t
union U {
bool union_member1;
char union_member2;
} u;
struct S {
int non_union_member;
union {
bool union_member;
};
union {
char union_member2;
} u;
} s;
void f(char);
void f2(U);
void f3(U&);
void f4(U*);
void check()
{
u.union_member1 = true;
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: do not access members of unions; use (boost::)variant instead [cppcoreguidelines-pro-type-union-access]
auto b = u.union_member2;
// CHECK-MESSAGES: :[[@LINE-1]]:14: warning: do not access members of unions; use (boost::)variant instead
auto a = &s.union_member;
// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: do not access members of unions; use (boost::)variant instead
f(s.u.union_member2);
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: do not access members of unions; use (boost::)variant instead
s.non_union_member = 2; // OK
U u2 = u; // OK
f2(u); // OK
f3(u); // OK
f4(&u); // OK
}