From ccc5eef051c8588c1fe4029e832d5b6387976aa6 Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Sun, 18 May 2014 12:01:17 +0200 Subject: SI-8601 Avoid over-eager optimization of LOAD_FIELD It can NPE or trigger static class initilization, we can't elimiate it without changing semantics. To make sure we don't thwart closure elimination, I've allowed DCE to eliminate a non-static LOAD_FIELD of a member of a closure class. It would be more general to track nullity of the reciever (e.g, `this` or `new Foo` cannot be null), but that would require more infrastructure in this phase. I've added a test for closure inlining based on a a suggestion by @dragos. This actually passes if we remove the (LOAD_FIELD, DROP) peephole optimization for `closelim` altogether. But I chose to adapt that optimization (only allow it for non-static, closure fields), rather then remove it alogether, in the interests of treading lightly. --- test/files/run/t8601c.flags | 1 + 1 file changed, 1 insertion(+) create mode 100644 test/files/run/t8601c.flags (limited to 'test/files/run/t8601c.flags') diff --git a/test/files/run/t8601c.flags b/test/files/run/t8601c.flags new file mode 100644 index 0000000000..1182725e86 --- /dev/null +++ b/test/files/run/t8601c.flags @@ -0,0 +1 @@ +-optimize \ No newline at end of file -- cgit v1.2.3