Gzip v1.9 In `gzip.c`, the signal handler `abort_gzip_signal` calls the function `remove_output_file` in a signal context. This function uses the non-`volatile` file-level variable `char ofname[MAX_PATH_LEN]` and passes it to `int xunlink(char *filename)`, which in turn calls `int unlink(const char *path)` with it. The problem with this chain of events is that it is not technically guaranteed that the value of a non-`volatile` variable, such as `ofname`, is committed to memory from the main thread of execution. The probably easiest way to deal with this problem is to declare `ofname` as `volatile`, as in `volatile char ofname[MAX_PATH_LEN]`. Note that this will require a whole slew of follow-up changes (e.g., instead of calling `strcpy(ofname, "stdout")`, a string copying function that is guaranteed to utilize volatile memory accesses would be needed). This behavior was detected using Symbolic Execution techniques developed in the course of the SYMBIOSYS research project at COMSYS, RWTH Aachen University. This research is supported by the European Research Council (ERC) under the EU's Horizon 2020 Research and Innovation Programme grant agreement n. 647295 (SYMBIOSYS).