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