From bd489a48153aeb24ffa5eccb1fa0199f9c7ea994 Mon Sep 17 00:00:00 2001 From: Philip Date: Mon, 27 Apr 2015 14:41:57 +0000 Subject: [PATCH] add test case for VLA segfaults This test obviously shouldn't segfault, but currently does so. The problem is in the VLA code, which fails to save the stack pointer before taking a conditional branch in some cases. See this thread: http://lists.nongnu.org/archive/html/tinycc-devel/2015-04/msg00130.html --- tests/tests2/78_vla_label.c | 21 +++++++++++++++++++++ tests/tests2/78_vla_label.expect | 2 ++ tests/tests2/Makefile | 3 ++- 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 tests/tests2/78_vla_label.c create mode 100644 tests/tests2/78_vla_label.expect diff --git a/tests/tests2/78_vla_label.c b/tests/tests2/78_vla_label.c new file mode 100644 index 00000000..0908e1bb --- /dev/null +++ b/tests/tests2/78_vla_label.c @@ -0,0 +1,21 @@ +#include + +/* This test segfaults as of April 27, 2015. */ + +void f(int argc) +{ + char test[argc]; + if(0) + label: + printf("boom!\n"); + if(argc-- == 0) + return; + goto label; +} + +int main() +{ + f(2); + + return 0; +} diff --git a/tests/tests2/78_vla_label.expect b/tests/tests2/78_vla_label.expect new file mode 100644 index 00000000..9a8c1599 --- /dev/null +++ b/tests/tests2/78_vla_label.expect @@ -0,0 +1,2 @@ +boom! +boom! diff --git a/tests/tests2/Makefile b/tests/tests2/Makefile index 87daf7b5..470716b6 100644 --- a/tests/tests2/Makefile +++ b/tests/tests2/Makefile @@ -96,7 +96,8 @@ TESTS = \ 74_nocode_wanted.test \ 75_array_in_struct_init.test \ 76_dollars_in_identifiers.test \ - 77_push_pop_macro.test + 77_push_pop_macro.test \ + 78_vla_label.test # 34_array_assignment.test -- array assignment is not in C standard