From 72b677a8d7d5f334b67b5a9bfadf98261fdd43cc Mon Sep 17 00:00:00 2001 From: ISSOtm Date: Sat, 5 Feb 2022 14:12:18 +0100 Subject: [PATCH] Enable "debug" optimizations in `make develop` Enhances some warnings as well as the sanitizers (Clang especially complained about it) The `-f*` flags are to get better stack traces out of the sanitizers, as recommended by Clang's docs: https://clang.llvm.org/docs/AddressSanitizer.html#usage GCC's docs claim that these optimizations should not hinder the debugging experience, and Clang's don't mention optimization flags at all. --- CMakeLists.txt | 10 ++++++---- Makefile | 2 +- src/gfx/makepng.c | 6 +++--- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 854a6a5f..ea6c4531 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,16 +42,18 @@ else() -fsanitize=alignment -fsanitize=null -fsanitize=address) add_compile_options(${SAN_FLAGS}) link_libraries(${SAN_FLAGS}) + # A non-zero optimization level is desired in debug mode, but allow overriding it nonetheless + # TODO: this overrides anything previously set... that's a bit sloppy! + set(CMAKE_C_FLAGS_DEBUG "-g -Og -fno-omit-frame-pointer -fno-optimize-sibling-calls" CACHE STRING "" FORCE) endif() if(MORE_WARNINGS) add_compile_options(-Werror -Wextra -Walloc-zero -Wcast-align -Wcast-qual -Wduplicated-branches -Wduplicated-cond - -Wfloat-equal -Winline -Wlogical-op -Wnested-externs -Wold-style-definition - -Wshift-overflow=2 - -Wstrict-overflow=5 -Wstrict-prototypes -Wundef -Wuninitialized -Wunused + -Wfloat-equal -Winline -Wlogical-op -Wnested-externs -Wnull-dereference + -Wold-style-definition -Wshift-overflow=2 -Wstrict-overflow=5 + -Wstrict-prototypes -Wstringop-overflow=4 -Wundef -Wuninitialized -Wunused -Wshadow # TODO: -Wshadow=compatible-local ? - -Wnull-dereference -Wstringop-overflow=4 # TODO: would work better with optimizations -Wno-sign-compare # TODO: fix those warnings -Wformat=2 -Wformat-overflow=2 -Wformat-truncation=1 -Wno-format-nonliteral # We have a couple of "dynamic" prints diff --git a/Makefile b/Makefile index 5f07ce99..7ed2fb45 100644 --- a/Makefile +++ b/Makefile @@ -230,7 +230,7 @@ develop: -fsanitize=signed-integer-overflow -fsanitize=bounds \ -fsanitize=object-size -fsanitize=bool -fsanitize=enum \ -fsanitize=alignment -fsanitize=null -fsanitize=address" \ - CFLAGS="-ggdb3 -O0" + CFLAGS="-ggdb3 -Og -fno-omit-frame-pointer -fno-optimize-sibling-calls" # Targets for the project maintainer to easily create Windows exes. # This is not for Windows users! diff --git a/src/gfx/makepng.c b/src/gfx/makepng.c index 80607e84..7c276840 100644 --- a/src/gfx/makepng.c +++ b/src/gfx/makepng.c @@ -95,6 +95,9 @@ void output_png_file(const struct Options *opts, if (!f) err("Opening output png file '%s' failed", outfile); + if (opts->debug) + free(outfile); + img.png = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!img.png) @@ -135,9 +138,6 @@ void output_png_file(const struct Options *opts, png_destroy_write_struct(&img.png, &img.info); fclose(f); - - if (opts->debug) - free(outfile); } void destroy_raw_image(struct RawIndexedImage **raw_image_ptr_ptr)