Add more RGBLINK test coverage (#1637)

This commit is contained in:
Rangi
2025-01-29 11:41:08 -05:00
committed by GitHub
parent c19ddc80f0
commit f61019dd68
13 changed files with 51 additions and 18 deletions

View File

@@ -83,7 +83,7 @@ void sect_CheckSizes() {
if (uint32_t maxSize = sectionTypeInfo[sect.type].size; sect.size > maxSize) { if (uint32_t maxSize = sectionTypeInfo[sect.type].size; sect.size > maxSize) {
error( error(
"Section '%s' grew too big (max size = 0x%" PRIX32 " bytes, reached 0x%" PRIX32 "Section '%s' grew too big (max size = 0x%" PRIX32 " bytes, reached 0x%" PRIX32
").\n", ")\n",
sect.name.c_str(), sect.name.c_str(),
maxSize, maxSize,
sect.size sect.size
@@ -239,7 +239,7 @@ static void mergeSections(
} }
if (sect.modifier != mod) { if (sect.modifier != mod) {
sectError("Section already declared as %s section\n", sectionModNames[sect.modifier]); sectError("Section already declared as SECTION %s\n", sectionModNames[sect.modifier]);
} else { } else {
switch (mod) { switch (mod) {
case SECTION_UNION: case SECTION_UNION:
@@ -850,8 +850,8 @@ void sect_PCRelByte(Expression &expr, uint32_t pcShift) {
if (offset < -128 || offset > 127) { if (offset < -128 || offset > 127) {
error( error(
"jr target must be between -128 and 127 bytes away, not %" PRId16 "JR target must be between -128 and 127 bytes away, not %" PRId16
"; use jp instead\n", "; use JP instead\n",
offset offset
); );
writeByte(0); writeByte(0);

View File

@@ -516,8 +516,8 @@ static void applyFilePatches(Section &section, Section &dataSection) {
error( error(
patch.src, patch.src,
patch.lineNo, patch.lineNo,
"jr target must be between -128 and 127 bytes away, not %" PRId16 "JR target must be between -128 and 127 bytes away, not %" PRId16
"; use jp instead\n", "; use JP instead",
jumpOffset jumpOffset
); );
} }

View File

@@ -133,12 +133,12 @@ static void mergeSections(Section &target, std::unique_ptr<Section> &&other) {
if (target.modifier != other->modifier) { if (target.modifier != other->modifier) {
fprintf( fprintf(
stderr, stderr,
"error: Section \"%s\" is defined as %s at ", "error: Section \"%s\" is defined as SECTION %s at ",
target.name.c_str(), target.name.c_str(),
sectionModNames[target.modifier] sectionModNames[target.modifier]
); );
target.src->dump(target.lineNo); target.src->dump(target.lineNo);
fprintf(stderr, ", but as %s at ", sectionModNames[other->modifier]); fprintf(stderr, ", but as SECTION %s at ", sectionModNames[other->modifier]);
other->src->dump(other->lineNo); other->src->dump(other->lineNo);
putc('\n', stderr); putc('\n', stderr);
exit(1); exit(1);

View File

@@ -68,7 +68,7 @@ SectionTypeInfo sectionTypeInfo[SECTTYPE_INVALID] = {
// clang-format on // clang-format on
char const * const sectionModNames[] = { char const * const sectionModNames[] = {
"regular", // SECTION_NORMAL "(no modifier)", // SECTION_NORMAL
"union", // SECTION_UNION "UNION", // SECTION_UNION
"fragment", // SECTION_FRAGMENT "FRAGMENT", // SECTION_FRAGMENT
}; };

View File

@@ -1,3 +1,3 @@
error: invalid-jr.asm(3): error: invalid-jr.asm(3):
jr target must be between -128 and 127 bytes away, not -258; use jp instead JR target must be between -128 and 127 bytes away, not -258; use JP instead
error: Assembly aborted (1 error)! error: Assembly aborted (1 error)!

View File

@@ -3,13 +3,13 @@ warning: load-overflow.asm(5): [-Wempty-data-directive]
warning: load-overflow.asm(6): [-Wempty-data-directive] warning: load-overflow.asm(6): [-Wempty-data-directive]
DB directive without data in ROM DB directive without data in ROM
error: load-overflow.asm(26): error: load-overflow.asm(26):
Section 'Overflow' grew too big (max size = 0x8000 bytes, reached 0x8002). Section 'Overflow' grew too big (max size = 0x8000 bytes, reached 0x8002)
error: load-overflow.asm(26): error: load-overflow.asm(26):
Section 'oops' grew too big (max size = 0x2000 bytes, reached 0x2002). Section 'oops' grew too big (max size = 0x2000 bytes, reached 0x2002)
error: load-overflow.asm(26): error: load-overflow.asm(26):
Section 'Moar overflow' grew too big (max size = 0x8000 bytes, reached 0xD000). Section 'Moar overflow' grew too big (max size = 0x8000 bytes, reached 0xD000)
error: load-overflow.asm(26): error: load-overflow.asm(26):
Section 'hmm' grew too big (max size = 0x2000 bytes, reached 0x4000). Section 'hmm' grew too big (max size = 0x2000 bytes, reached 0x4000)
error: load-overflow.asm(26): error: load-overflow.asm(26):
Section 'lol' grew too big (max size = 0x2000 bytes, reached 0x3000). Section 'lol' grew too big (max size = 0x2000 bytes, reached 0x3000)
error: Assembly aborted (5 errors)! error: Assembly aborted (5 errors)!

View File

@@ -1,4 +1,4 @@
error: section-union.asm(37): error: section-union.asm(37):
Section already declared as union section Section already declared as SECTION UNION
FATAL: section-union.asm(37): FATAL: section-union.asm(37):
Cannot create section "test" (1 error) Cannot create section "test" (1 error)

View File

@@ -0,0 +1,10 @@
section "zero", rom0
Zero::
db 1 % Zero
db 2 ** (Zero - 1)
db BANK(NonexistentSymbol)
db BANK("NonexistentSection")
db STARTOF("NonexistentSection")
db SIZEOF("NonexistentSection")
ldh [Zero], a
jr Zero + 200

View File

@@ -0,0 +1,9 @@
error: invalid-patches.asm(10): JR target must be between -128 and 127 bytes away, not 190; use JP instead
warning: invalid-patches.asm(9): LDH is deprecated with values from $00 to $FF; use $FF00 to $FFFF
error: invalid-patches.asm(8): Requested SIZEOF() of section "NonexistentSection", which was not found
error: invalid-patches.asm(7): Requested STARTOF() of section "NonexistentSection", which was not found
error: invalid-patches.asm(6): Requested BANK() of section "NonexistentSection", which was not found
error: invalid-patches.asm(5): Requested BANK() of symbol "NonexistentSymbol", which was not found
error: invalid-patches.asm(4): Exponent by negative value -1
error: invalid-patches.asm(3): Modulo by 0
Linking failed with 7 errors

View File

@@ -0,0 +1,2 @@
section fragment "test", rom0
db 1

View File

@@ -0,0 +1,2 @@
section union "test", rom0
db 2

View File

@@ -0,0 +1 @@
error: Section "test" is defined as SECTION FRAGMENT at section-conflict/different-mod/a.asm(1), but as SECTION UNION at section-conflict/different-mod/b.asm(1)

View File

@@ -269,6 +269,15 @@ rgblinkQuiet "$otemp" "$test"/b.rel 2>"$outtemp"
tryDiff "$test"/out.err "$outtemp" tryDiff "$test"/out.err "$outtemp"
evaluateTest evaluateTest
test="section-conflict/different-mod"
startTest
"$RGBASM" -o "$otemp" "$test"/a.asm
"$RGBASM" -o "$gbtemp" "$test"/b.asm
continueTest
rgblinkQuiet "$otemp" "$gbtemp" 2>"$outtemp"
tryDiff "$test"/out.err "$outtemp"
evaluateTest
test="section-fragment/good" test="section-fragment/good"
startTest startTest
"$RGBASM" -o "$otemp" "$test"/a.asm "$RGBASM" -o "$otemp" "$test"/a.asm