| // { dg-do run } |
| // { dg-options "-w" } |
| // GROUPS passed references |
| // Check that if a reference is initialized to refer to a value |
| // which is returned from a function call, the actual call to |
| // the function is only invoked for the original initialization |
| // of the reference, and not for each subsequent use of the |
| // reference. |
| // |
| // This test fails with G++ 1.35.0- (pre-release). |
| // Reported 4/4/89 by Kim Smith |
| |
| extern "C" int printf (const char *, ...); |
| |
| struct base { |
| mutable int data_member; |
| |
| base () {} |
| void function_member () const; |
| }; |
| |
| base base_object; |
| |
| base base_returning_function (); |
| |
| int call_count = 0; |
| |
| int main () |
| { |
| const base& base_ref = base_returning_function (); |
| |
| base_ref.function_member (); |
| base_ref.function_member (); |
| base_ref.data_member = 99; |
| |
| if (call_count == 1) |
| printf ("PASS\n"); |
| else |
| { printf ("FAIL\n"); return 1; } |
| |
| return 0; |
| } |
| |
| base base_returning_function () |
| { |
| base local_base_object; |
| |
| call_count++; |
| return local_base_object; |
| } |
| |
| void base::function_member () const |
| { |
| } |