Index: src/tests/.expect/references.txt
===================================================================
--- src/tests/.expect/references.txt	(revision 0415e24ec530c161ec8bce654c8703de31df6ded)
+++ src/tests/.expect/references.txt	(revision dc7db63bf0be12448903e49a8a34ea50bdb9008e)
@@ -28,4 +28,8 @@
 Destructing a Y
 Destructing a Y
+3 3
+3
+3
+3 9 { 1, 7 }, [1, 2, 3]
 Destructing a Y
 Destructing a Y
Index: src/tests/references.c
===================================================================
--- src/tests/references.c	(revision 0415e24ec530c161ec8bce654c8703de31df6ded)
+++ src/tests/references.c	(revision dc7db63bf0be12448903e49a8a34ea50bdb9008e)
@@ -87,4 +87,24 @@
 
 	z1 = z2;
+
+	// test rvalue-to-reference conversion
+	{
+		struct S { double x, y; };
+		void f( int & i, int & j, S & s, int v[] ) {
+			printf("%d %d { %g, %g }, [%d, %d, %d]\n", i, j, s.[x, y], v[0], v[1], v[2]);
+		}
+		void g(int & i) { printf("%d\n", i); }
+		void h(int &&& i) { printf("%d\n", i); }
+
+		int &&& r = 3;  // rvalue to reference
+		int i = r;
+		printf("%d %d\n", i, r);  // both 3
+
+		g( 3 );          // rvalue to reference
+		h( (int &&&)3 ); // rvalue to reference
+
+		int a = 5, b = 4;
+		f( 3, a + b, (S){ 1.0, 7.0 }, (int [3]){ 1, 2, 3 } ); // two rvalue to reference
+	}
 }
 
