diff --git a/contrib/unifdef/unifdef.c b/contrib/unifdef/unifdef.c --- a/contrib/unifdef/unifdef.c +++ b/contrib/unifdef/unifdef.c @@ -1550,8 +1550,12 @@ sym->value = val; r = RB_INSERT(MACROMAP, ¯o_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 --- a/usr.bin/unifdef/tests/unifdef_test.sh +++ b/usr.bin/unifdef/tests/unifdef_test.sh @@ -17,6 +17,27 @@ 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 }