From b5f5af61675f26f5474bea82f17bd920ae336d08 Mon Sep 17 00:00:00 2001 From: Andrew Taylor Date: Wed, 10 Jul 2019 18:27:44 +1000 Subject: [PATCH] handle exit with uninitialized value --- .../unitialized_exit_status.txt | 6 ++++++ .../unitialized_exit_status.txt | 6 ++++++ .../unitialized_exit_status.txt | 6 ++++++ tests/run_time_errors/unitialized_exit_status.c | 14 ++++++++++++++ watch_valgrind.py | 9 +++++++++ 5 files changed, 41 insertions(+) create mode 100644 tests/expected_output/clang-6.0-x86_64-pc-linux-gnu/unitialized_exit_status.txt create mode 100644 tests/expected_output/clang-7.0-x86_64-pc-linux-gnu/unitialized_exit_status.txt create mode 100644 tests/expected_output/clang-8.0-x86_64-pc-linux-gnu/unitialized_exit_status.txt create mode 100644 tests/run_time_errors/unitialized_exit_status.c diff --git a/tests/expected_output/clang-6.0-x86_64-pc-linux-gnu/unitialized_exit_status.txt b/tests/expected_output/clang-6.0-x86_64-pc-linux-gnu/unitialized_exit_status.txt new file mode 100644 index 0000000..84aac95 --- /dev/null +++ b/tests/expected_output/clang-6.0-x86_64-pc-linux-gnu/unitialized_exit_status.txt @@ -0,0 +1,6 @@ + + +Runtime error: exit value is uninitialized + +Main is returning an uninitialized value or exit has been passed an uninitialized value. + diff --git a/tests/expected_output/clang-7.0-x86_64-pc-linux-gnu/unitialized_exit_status.txt b/tests/expected_output/clang-7.0-x86_64-pc-linux-gnu/unitialized_exit_status.txt new file mode 100644 index 0000000..84aac95 --- /dev/null +++ b/tests/expected_output/clang-7.0-x86_64-pc-linux-gnu/unitialized_exit_status.txt @@ -0,0 +1,6 @@ + + +Runtime error: exit value is uninitialized + +Main is returning an uninitialized value or exit has been passed an uninitialized value. + diff --git a/tests/expected_output/clang-8.0-x86_64-pc-linux-gnu/unitialized_exit_status.txt b/tests/expected_output/clang-8.0-x86_64-pc-linux-gnu/unitialized_exit_status.txt new file mode 100644 index 0000000..84aac95 --- /dev/null +++ b/tests/expected_output/clang-8.0-x86_64-pc-linux-gnu/unitialized_exit_status.txt @@ -0,0 +1,6 @@ + + +Runtime error: exit value is uninitialized + +Main is returning an uninitialized value or exit has been passed an uninitialized value. + diff --git a/tests/run_time_errors/unitialized_exit_status.c b/tests/run_time_errors/unitialized_exit_status.c new file mode 100644 index 0000000..9b1eac7 --- /dev/null +++ b/tests/run_time_errors/unitialized_exit_status.c @@ -0,0 +1,14 @@ +// A simple C program that attempts to be punny +// Written 23/2/2017 +// by Angela Finlayson (angf@cse.unsw.edu.au) +// for COMP1511 Lab 01 Exercise 1 + +#include + +int main(int argc, char *argv[]) { + int a[2]; + a[0] = 0; + printf("Hello, it is good to C you!\n"); + + return a[argc]; +} diff --git a/watch_valgrind.py b/watch_valgrind.py index 545b5e3..9edd2e2 100644 --- a/watch_valgrind.py +++ b/watch_valgrind.py @@ -27,6 +27,15 @@ def watch_valgrind(): sys.stderr.flush() start_gdb() break + elif 'exit_group(status)' in line: + error = f"""Runtime error: {color('exit value is uninitialized', 'red')} + +Main is returning an uninitialized value or exit has been passed an uninitialized value. +""" + os.environ['DCC_VALGRIND_ERROR'] = error + print('\n' + error, file=sys.stderr) + start_gdb() + sys.exit(1) elif 'below stack pointer' in line: error = f"""Runtime error: {color('access to function variables after function has returned', 'red')} You have used a pointer to a local variable that no longer exists.