diff --git a/src/asm/asmy.y b/src/asm/asmy.y index abc47825..3200ffd0 100644 --- a/src/asm/asmy.y +++ b/src/asm/asmy.y @@ -814,7 +814,11 @@ assert_type : /* empty */ { $$ = ASSERT_ERROR; } assert : T_POP_ASSERT assert_type relocexpr { - if (rpn_isKnown(&$3) && $3.nVal == 0) { + if (!rpn_isKnown(&$3)) { + if (!out_CreateAssert($2, &$3, "")) + yyerror("Assertion creation failed: %s", + strerror(errno)); + } else if ($3.nVal == 0) { switch ($2) { case ASSERT_FATAL: fatalerror("Assertion failed"); @@ -826,16 +830,16 @@ assert : T_POP_ASSERT assert_type relocexpr "Assertion failed"); break; } - } else { - if (!out_CreateAssert($2, &$3, "")) - yyerror("Assertion creation failed: %s", - strerror(errno)); } rpn_Free(&$3); } | T_POP_ASSERT assert_type relocexpr ',' string { - if (rpn_isKnown(&$3) && $3.nVal == 0) { + if (!rpn_isKnown(&$3)) { + if (!out_CreateAssert($2, &$3, $5)) + yyerror("Assertion creation failed: %s", + strerror(errno)); + } else if ($3.nVal == 0) { switch ($2) { case ASSERT_FATAL: fatalerror("Assertion failed: %s", @@ -850,10 +854,6 @@ assert : T_POP_ASSERT assert_type relocexpr $5); break; } - } else { - if (!out_CreateAssert($2, &$3, $5)) - yyerror("Assertion creation failed: %s", - strerror(errno)); } rpn_Free(&$3); } diff --git a/test/asm/assert-const.asm b/test/asm/assert-const.asm new file mode 100644 index 00000000..f86d93e9 --- /dev/null +++ b/test/asm/assert-const.asm @@ -0,0 +1,7 @@ +; The following link-time assertion is known by RGBASM to be okay. +; This previously caused it to still pass the assertion to RGBLINK with an empty +; RPN expression + +SECTION "rgbasm passing asserts", ROM0[0] + db 0 + assert @ diff --git a/test/asm/assert-const.err b/test/asm/assert-const.err new file mode 100644 index 00000000..e69de29b diff --git a/test/asm/assert-const.out b/test/asm/assert-const.out new file mode 100644 index 00000000..e69de29b diff --git a/test/asm/assert-const.out.bin b/test/asm/assert-const.out.bin new file mode 100644 index 00000000..f76dd238 Binary files /dev/null and b/test/asm/assert-const.out.bin differ