Files
compiler-explorer/lib/tooling
Matt Godbolt c4bb7f7c68 Fix unsafe type casting in assembly processing tools (#7767)
## Summary

Fixes unsafe type casting in assembly processing tools that was causing
`TypeError: text.split is not a function` runtime crashes.

## Root Cause Analysis

**COMPILER-EXPLORER-C2N** (57 occurrences) and **COMPILER-EXPLORER-AWW**
(184 occurrences):

The issue stemmed from tools making unsafe assumptions about
`compilationInfo.asm` type:

```typescript
// CompilationInfo.asm type (from types/compilation/compilation.interfaces.ts:168)
asm?: ParsedAsmResultLine[] | string;  // "Temp hack until we get all code to agree on type of asm"
```

**The bug sequence:**
1. `base-compiler.ts:3120` converts string assembly to parsed format:
`result.asm = [{text: result.asm}]`
2. Tools unsafely cast back to string: `compilationInfo.asm as string`
3. `AsmParser.processBinaryAsm()` calls `splitLines(asmResult)` 
4. If `asm` is actually `ParsedAsmResultLine[]`, `splitLines()` receives
an array
5. `text.split()` fails because arrays don't have `.split()` method

**Affected tools:** osaca-tool, x86to6502-tool, llvm-mca-tool

## Changes

### New Helper Functions in `utils.ts`:

1. **`extractTextLines(asm: string | any[]): string[]`**
   - Safely extracts text lines from union types
- Throws descriptive errors for unexpected types (will surface in
Sentry)

2. **`normalizeAsmToString(asm: string | any[] | undefined): string`**
- Centralizes the common pattern of converting union type to string for
parser consumption
   - Handles undefined gracefully

### Tool Fixes:

- **Removed unsafe casts**: `compilationInfo.asm as string` →
`normalizeAsmToString(compilationInfo.asm)`
- **Added null checks**: Explicit error handling for missing assembly
data
- **Type safety**: No more runtime type assumptions

## Impact

- Eliminates root cause of `text.split is not a function` errors (241+
occurrences combined)
- Maintains existing functionality - tools continue to work normally
- Better error messages when assembly data is missing
- Centralizes type handling logic for future maintainability

**Note:** The underlying architectural issue (union type "temp hack")
remains, but tools now handle it safely without crashes.

Fixes COMPILER-EXPLORER-C2N
Fixes COMPILER-EXPLORER-AWW

🤖 Generated with [Claude Code](https://claude.ai/code)

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Mats Jun Larsen <mats@jun.codes>
2025-06-11 18:04:25 -05:00
..
2025-05-30 07:17:01 -05:00
2025-03-14 16:59:27 +01:00
2025-03-14 17:32:53 +01:00
2025-05-30 07:17:01 -05:00