diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-08-18 00:17:35 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-08-18 00:17:35 +0300 |
| commit | ab011165cd440b5535d39febd8118e3e26b64b57 (patch) | |
| tree | 0f021b40bbcd9df6efdb5879832acac17ae254bb | |
| parent | e38ce698c0e53473a4540e940b25b6093da84cb7 (diff) | |
| download | kmi-ab011165cd440b5535d39febd8118e3e26b64b57.tar.gz kmi-ab011165cd440b5535d39febd8118e3e26b64b57.zip | |
small fixes to issues reported by analyzer
+ Currently analyzer has to be run manually with something like
make CFLAGS='-fanalyzer -Wno-analyzer-infinite-loop'
I use an infinite loop as an assert, I know it's not great/technically
UB but it's just a fallback.
+ Analyzer is still somewhat limited, I could add in more
attributes about different functions, such as memory allocation sizes
etc.
+ If I ever set up a CI pipeline, remember to use analyzer?
| -rw-r--r-- | src/regions.c | 3 | ||||
| -rw-r--r-- | src/sp_tree.c | 5 | ||||
| -rw-r--r-- | tests/Makefile | 3 | ||||
| -rw-r--r-- | tests/scripts/makefile | 2 |
4 files changed, 9 insertions, 4 deletions
diff --git a/src/regions.c b/src/regions.c index 4d82420..9849ba8 100644 --- a/src/regions.c +++ b/src/regions.c @@ -374,6 +374,9 @@ struct mem_region *find_first_region(struct mem_region_root *r) /* get used region with smallest address, likely also close to the start * of the linked list */ struct mem_region *m = find_closest_used_region(r, 0); + if (!m) + return NULL; + while (m->prev) { m = m->prev; } diff --git a/src/sp_tree.c b/src/sp_tree.c index 23f707b..5166cc3 100644 --- a/src/sp_tree.c +++ b/src/sp_tree.c @@ -12,6 +12,7 @@ */ #include <kmi/sp_tree.h> +#include <kmi/assert.h> /** * Basic BST left turn. @@ -25,6 +26,8 @@ static void __sp_turn_left(struct sp_node *n) struct sp_node *l = sp_left(n); struct sp_node *p = sp_paren(n); + assert(l); + sp_paren(l) = sp_paren(n); sp_left(n) = sp_right(l); sp_paren(n) = l; @@ -53,6 +56,8 @@ static void __sp_turn_right(struct sp_node *n) struct sp_node *r = sp_right(n); struct sp_node *p = sp_paren(n); + assert(r); + sp_paren(r) = sp_paren(n); sp_right(n) = sp_left(r); sp_paren(n) = r; diff --git a/tests/Makefile b/tests/Makefile index 8a27691..0a662f7 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -8,9 +8,6 @@ SOURCES != echo */source.mk DO != echo -n > tests.mk include $(SOURCES) -build/printf.o: common/printf.c - mkdir -p build && $(COMPILE_TEST) -c common/printf.c -o build/printf.o - RM ?= rm .PHONY: clean diff --git a/tests/scripts/makefile b/tests/scripts/makefile index 8ea802f..8079c3c 100644 --- a/tests/scripts/makefile +++ b/tests/scripts/makefile @@ -32,7 +32,7 @@ include tests.mk .PHONY: check check: $(TESTS) - @for d in reports/* ; do \ + @cd reports; for d in * ; do \ if [ ! -f "$$d/OK" ]; then \ echo "BROKEN: $$d" ; \ elif [ "$$(tail -n1 $$d/OK)" != "OK" ]; then \ |
