aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
}