diff options
| author | Miquel Sabaté Solà <mssola@mssola.com> | 2026-02-05 18:53:20 +0100 |
|---|---|---|
| committer | Miquel Sabaté Solà <mssola@mssola.com> | 2026-02-06 14:05:37 +0100 |
| commit | 6894b01b22e848b5fdbb2fafae88e9459232ced2 (patch) | |
| tree | 6bb08be6754e4d481489b7cb01d50c6e706d4ba9 /lib | |
| parent | d36e0de313aa65192eba108dd75135991a42685e (diff) | |
| download | tools.nes-6894b01b22e848b5fdbb2fafae88e9459232ced2.tar.gz tools.nes-6894b01b22e848b5fdbb2fafae88e9459232ced2.zip | |
asan: don't complain on arithmetic with addresses
This was already the case for plain addresses, but it was not being
considered in the case of an arithmetic operation.
Signed-off-by: Miquel Sabaté Solà <mssola@mssola.com>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/xixanta/src/assembler.rs | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/lib/xixanta/src/assembler.rs b/lib/xixanta/src/assembler.rs index 96fdd01..507f5e1 100644 --- a/lib/xixanta/src/assembler.rs +++ b/lib/xixanta/src/assembler.rs @@ -2948,13 +2948,26 @@ impl<'a> Assembler<'a> { } NodeType::Operation(OperationType::Add) | NodeType::Operation(OperationType::Sub) => { // Get the name of the variable involved. - let left_name = &node.left.as_ref().unwrap().value.value; - let right_name = &node.left.as_ref().unwrap().value.value; - let name = if is_asan_friendly_name(left_name) { + let left_name = &node.left.as_ref().unwrap().value; + let right_name = &node.left.as_ref().unwrap().value; + let name = if is_asan_friendly_name(&left_name.value) { node.left.as_ref().unwrap() - } else if is_asan_friendly_name(right_name) { + } else if is_asan_friendly_name(&right_name.value) { node.right.as_ref().unwrap() } else { + // If everything failed but because it was an address + // (e.g. 'lda palettes + 1, x'), then return early. + if let Ok(var) = self.context.get_variable(left_name, &self.mappings) { + if matches!(var.object_type, ObjectType::Address) { + return Ok(()); + } + } + if let Ok(var) = self.context.get_variable(right_name, &self.mappings) { + if matches!(var.object_type, ObjectType::Address) { + return Ok(()); + } + } + self.warnings.push(Error { line: node.value.line, message: "accessing a memory region without a proper name".to_string(), |
