| // { dg-do assemble } |
| // { dg-prune-output "note" } |
| // { dg-prune-output "deleted" } |
| |
| // g++ 1.36.1 bug 900121_02 |
| |
| // Assignment of structs is defined as memberwise assignment, |
| // however g++ (1.36.2) and Cfront 2.0 differ on the definition |
| // of assignment for unions. |
| |
| // (NOTE: Stroustrup now says that assignment of unions which contain either |
| // members or sub-members (base classes are not allowed for unions) which |
| // have non-default assignment operators defined for them will be illegal |
| // in future.) |
| |
| // g++ (1.36.2) on the other hand, accepts this program without errors. |
| |
| // keywords: unions, operator=, inheritance, members |
| |
| struct s0 { |
| |
| int i; |
| |
| void operator= (s0 & arg) |
| { |
| this->i = arg.i; |
| } |
| }; |
| |
| struct s1 { |
| |
| double d; |
| |
| void operator= (s1 & arg) |
| { |
| this->d = arg.d; |
| } |
| }; |
| |
| union u0 { |
| s0 u0_member_0; // { dg-error "" } |
| s1 u0_member_1; // { dg-error "" } |
| }; |
| |
| void function () |
| { |
| u0 u0_object_0; |
| u0 u0_object_1; |
| |
| u0_object_0 = u0_object_1; |
| } |
| |
| int main () { return 0; } |