1 // Submitted by Erik Rozendaal <dlr@acm.org> 2 // Test case for GNATS bug 787. 3 // { dg-do run } 4 5 #include <stdio.h> 6 #include <stdlib.h> 7 8 static int calls; 9 foo(int & arg)10int &foo (int &arg) 11 { 12 calls++; 13 arg=0; 14 return arg; 15 } 16 identity(int & x)17int &identity (int &x) 18 { 19 return x; 20 } 21 main()22int main() 23 { 24 int a; 25 26 calls = 0; 27 int &b = ++foo (a); 28 if (calls > 1) 29 abort (); 30 if (&a != &b) 31 abort (); 32 if (a != 1) 33 abort (); 34 35 calls = 0; 36 int &c = ++identity (++foo (a)); 37 if (calls > 1) 38 abort (); 39 if (&a != &c) 40 abort (); 41 if (a != 2) 42 abort (); 43 44 exit (0); 45 } 46