From 44c330d647c3e1a17e7169f5aa5abb322166fdae Mon Sep 17 00:00:00 2001 From: Philip Date: Tue, 28 Apr 2015 09:23:29 +0000 Subject: VLA fix: save stack pointer right after modification This patch disables the optimization of saving stack pointers lazily, which didn't fully take into account that control flow might not reach the stack-saving instructions. I've decided to leave in the extra calls to vla_sp_save() in case anyone wants to restore this optimization. Tests added and enabled. There are two remaining bugs: VLA variables can be modified, and jumping into the scope of a declared VLA will cause a segfault rather than a compiler error. Both of these do not affect correct C code, but should be fixed at some point. Once VLA variables have been made properly immutable, we can share them with the saved stack pointer and save stack and instructions. --- tests/tests2/79_vla_continue.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'tests/tests2/79_vla_continue.c') diff --git a/tests/tests2/79_vla_continue.c b/tests/tests2/79_vla_continue.c index 9c48c1d..19301e0 100644 --- a/tests/tests2/79_vla_continue.c +++ b/tests/tests2/79_vla_continue.c @@ -81,12 +81,36 @@ void test4() } } +void test5() +{ + int count = 10; + int a[f()]; + int c[f()]; + + c[0] = 42; + + for(;count--;) { + int b[f()]; + int i; + for (i=0; i