--- /dev/null
+function sink (p, q) {
+ var g = function(x) { return x; };
+ if (p) { if (q) g.inner = 42; return g; }
+ return function(x) { return x; };
+}
+noInline(sink);
+
+for (var i = 0; i < 10000; ++i) {
+ var f = sink(true, true);
+ var result = f(42);
+ if (result != 42)
+ throw "Error: expected 42 but got " + result;
+}
+
+// At this point, the function should be compiled down to the FTL
+
+// Test the allocation on the implicit inner else branch
+var f = sink(true, false);
+var result = f(12);
+if (result != 12)
+ // This shouldn't matter as it should be either correct or completely crash
+ throw "Error: expected 12 but got " + result;
+
+// Check that the allocation did not sink beyond the property assignment
+var f = sink(true, true);
+var result = f.inner;
+if (result != 42)
+ throw "Error: inner should be 42 but is " + result;