Index: tests/.expect/polymorphism.txt
===================================================================
--- tests/.expect/polymorphism.txt	(revision 93456846dc38174d2483127ddf47816e77c7e2a0)
+++ tests/.expect/polymorphism.txt	(revision 801978b5b1723c9d972a705d0172df3c7cfc721f)
@@ -1,2 +1,9 @@
 123 456 456
 5 5
+=== checkPlan9offsets
+static:
+  offset of inner double: 8
+  offset of inner float:  16
+dynamic:
+  offset of inner double: 8
+  offset of inner float:  16
Index: tests/polymorphism.cfa
===================================================================
--- tests/polymorphism.cfa	(revision 93456846dc38174d2483127ddf47816e77c7e2a0)
+++ tests/polymorphism.cfa	(revision 801978b5b1723c9d972a705d0172df3c7cfc721f)
@@ -54,4 +54,38 @@
 	b.i = s.i;
 	return b.j;
+}
+
+void checkPlan9offsets() {
+
+	forall( T )
+	struct thing {
+		T q;                // variable-sized padding
+		inline double;
+		inline float;
+	};
+
+	#define SHOW_OFFSETS \
+		double & x_inner_double = x; \
+		float  & x_inner_float  = x; \
+		printf("  offset of inner double: %ld\n", ((char *) & x_inner_double) - ((char *) & x) ); \
+		printf("  offset of inner float:  %ld\n", ((char *) & x_inner_float ) - ((char *) & x) );
+
+	void showStatic( thing(int) & x ) {
+		printf("static:\n");
+		SHOW_OFFSETS
+	}
+
+	forall( T )
+	void showDynamic( thing(T) & x ) {
+		printf("dynamic:\n");
+		SHOW_OFFSETS
+	}
+
+	#undef SHOW_OFFSETS
+
+	printf("=== checkPlan9offsets\n");
+	thing(int) x;
+	showStatic(x);
+	showDynamic(x);
 }
 
@@ -114,4 +148,6 @@
 		assertf(ret == u.f2, "union operation fails in polymorphic context.");
 	}
+
+	checkPlan9offsets();
 }
 
