aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDag-Erling Smørgrav <des@FreeBSD.org>2023-09-06 17:11:04 +0000
committerDag-Erling Smørgrav <des@FreeBSD.org>2023-09-06 17:11:13 +0000
commitaacbe7384221d2eafa326864bbbe2f22a10063ce (patch)
tree6621de0706de3251420200c6671b2f1bebe47dfe
parentb37a6938e39a7ed9542fafee671465bf719fd537 (diff)
downloadsrc-aacbe7384221d2eafa326864bbbe2f22a10063ce.tar.gz
src-aacbe7384221d2eafa326864bbbe2f22a10063ce.zip
unifdef: Handle redefined symbols correctly.
MFC after: 1 week Sponsored by: Klara, Inc. Reviewed by: kevans Differential Revision: https://reviews.freebsd.org/D41758
-rw-r--r--contrib/unifdef/unifdef.c6
-rw-r--r--usr.bin/unifdef/tests/unifdef_test.sh21
2 files changed, 26 insertions, 1 deletions
diff --git a/contrib/unifdef/unifdef.c b/contrib/unifdef/unifdef.c
index 82f6acd66038..3dd4ace7b81e 100644
--- a/contrib/unifdef/unifdef.c
+++ b/contrib/unifdef/unifdef.c
@@ -1550,8 +1550,12 @@ addsym2(bool ignorethis, const char *symname, const char *val)
sym->value = val;
r = RB_INSERT(MACROMAP, &macro_tree, sym);
assert(r == NULL);
+ debugsym("addsym", sym);
+ } else {
+ sym->ignore = ignorethis;
+ sym->value = val;
+ debugsym("updsym", sym);
}
- debugsym("addsym", sym);
}
static void
diff --git a/usr.bin/unifdef/tests/unifdef_test.sh b/usr.bin/unifdef/tests/unifdef_test.sh
index 98adef3adfdc..dfb08c187724 100644
--- a/usr.bin/unifdef/tests/unifdef_test.sh
+++ b/usr.bin/unifdef/tests/unifdef_test.sh
@@ -17,6 +17,27 @@ EOF
atf_check -o file:f unifdef <f
}
+atf_test_case redefine
+redefine_head() {
+ atf_set descr "redefine the same symbol"
+}
+redefine_body() {
+ cat >file <<EOF
+#if FOO
+a
+#else
+b
+#endif
+EOF
+ atf_check -s exit:1 -o inline:"a\n" unifdef -DFOO <file
+ atf_check -s exit:1 -o inline:"a\n" unifdef -UFOO -DFOO <file
+ atf_check -s exit:1 -o inline:"a\n" unifdef -DFOO=0 -DFOO <file
+ atf_check -s exit:1 -o inline:"b\n" unifdef -UFOO <file
+ atf_check -s exit:1 -o inline:"b\n" unifdef -DFOO -UFOO <file
+ atf_check -s exit:1 -o inline:"b\n" unifdef -DFOO -DFOO=0 <file
+}
+
atf_init_test_cases() {
atf_add_test_case hash_comment
+ atf_add_test_case redefine
}