| // 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 |
| } |