--- /dev/null
+var foo = [
+ function(o) {
+ var x = true;
+ o.f.f;
+ if (x)
+ return;
+ throw new Error();
+ },
+ function(o) {
+ var x = true;
+ o.f.f;
+ if (!x)
+ throw new Error();
+ return;
+ },
+ function(o) {
+ var x = 0;
+ var y = 1;
+ o.f.f;
+ if (x < y)
+ return;
+ throw new Error();
+ },
+ function(o) {
+ var x = 1;
+ var y = 0;
+ o.f.f;
+ if (x > y)
+ return;
+ throw new Error();
+ },
+ function(o) {
+ var x = 0;
+ var y = 1;
+ o.f.f;
+ if (x <= y)
+ return;
+ throw new Error();
+ },
+ function(o) {
+ var x = 1;
+ var y = 0;
+ o.f.f;
+ if (x >= y)
+ return;
+ throw new Error();
+ },
+ function(o) {
+ var x = 0;
+ var y = 1;
+ o.f.f;
+ if (x >= y)
+ throw new Error();
+ return;
+ },
+ function(o) {
+ var x = 1;
+ var y = 0;
+ o.f.f;
+ if (x <= y)
+ throw new Error();
+ return;
+ },
+ function(o) {
+ var x = 0;
+ var y = 1;
+ o.f.f;
+ if (x > y)
+ throw new Error();
+ return;
+ },
+ function(o) {
+ var x = 1;
+ var y = 0;
+ o.f.f;
+ if (x < y)
+ throw new Error();
+ return;
+ },
+ function(o) {
+ var x = 42;
+ o.f.f;
+ if (x == 42)
+ return;
+ throw new Error();
+ },
+ function(o) {
+ var x = 42;
+ o.f.f;
+ if (x != 42)
+ throw new Error();
+ return;
+ },
+ function(o) {
+ var x = 42;
+ o.f.f;
+ if (x === 42)
+ return;
+ throw new Error();
+ },
+ function(o) {
+ var x = 42;
+ o.f.f;
+ if (x !== 42)
+ throw new Error();
+ return;
+ },
+];
+for (var i = 0; i < foo.length; ++i)
+ noInline(foo[i]);
+
+function test(o) {
+ var failed = [];
+ for (var i = 0; i < foo.length; ++i) {
+ try {
+ foo[i](o);
+ } catch (e) {
+ failed.push("Failed " + foo[i] + " with " + e);
+ }
+ }
+ if (failed.length)
+ throw failed;
+}
+
+var object = {f:{f:42}};
+
+for (var i = 0; i < 10000; ++i) {
+ test(object);
+}
+
+test({f:{g:43}});
+