diff --git a/test/asm/purge-refs.asm b/test/asm/purge-refs.asm new file mode 100644 index 00000000..74dd56c6 --- /dev/null +++ b/test/asm/purge-refs.asm @@ -0,0 +1,13 @@ + +SECTION "floating purging", ROM0 + +Floating: + db Floating + PURGE Floating ; This used to cause a use-after-free + ; To increase the chances of the data being re-allocated, it's not last + +SECTION "fixed purging", ROM0[0] + +Fixed: + db Fixed + PURGE Fixed ; Can work, it's a constant diff --git a/test/asm/purge-refs.err b/test/asm/purge-refs.err new file mode 100644 index 00000000..8ad27dec --- /dev/null +++ b/test/asm/purge-refs.err @@ -0,0 +1,3 @@ +ERROR: purge-refs.asm(6): + Symbol "Floating" is referenced and thus cannot be purged +error: Assembly aborted (1 errors)! diff --git a/test/asm/purge-refs.out b/test/asm/purge-refs.out new file mode 100644 index 00000000..e69de29b diff --git a/test/asm/purge.asm b/test/asm/purge.asm new file mode 100644 index 00000000..1552cea0 --- /dev/null +++ b/test/asm/purge.asm @@ -0,0 +1,13 @@ + +SECTION "purging", ROM0 + +Label: + PURGE Label +Label: + + db Referenced + PURGE Referenced ; Should fail + +Exported:: + PURGE Exported +Exported:: diff --git a/test/asm/purge.err b/test/asm/purge.err new file mode 100644 index 00000000..74f81e69 --- /dev/null +++ b/test/asm/purge.err @@ -0,0 +1,3 @@ +ERROR: purge.asm(9): + Symbol "Referenced" is referenced and thus cannot be purged +error: Assembly aborted (1 errors)! diff --git a/test/asm/purge.out b/test/asm/purge.out new file mode 100644 index 00000000..e69de29b