Skip to content

[MC][MIPS]Clang Crashes When Assembling Invalid MIPS beql Instructions with --arch=mips #151453

@venkyqz

Description

@venkyqz

Description

When using the latest trunk version Clang with the --arch=mips option to assemble MIPS assembly code containing invalid beql instructions (e.g., using floating-point registers, memory references, or invalid syntax as operands), the assembler crashes with a SIGSEGV due to an assertion failure in MipsAsmParser::expandBranchImm. This issue was discovered in Compiler Explorer using x86-64 clang (assertions trunk).

Interesting Facts

  • Clang Versions Before 4.0.1: In Clang versions before 4.0.1, Clang does not crash and correctly reports invalid MIPS instructions with errors like "invalid operand for instruction". This suggests the crash is a regression or issue introduced in later versions.

  • Crash Triggered by --arch=mips: The crash only occurs when the --arch=mips flag is explicitly set. The MIPS backend seems to fail to handle invalid operands, leading to a SIGSEGV.

  • No Crash When Architecture Is Inferred: Without the --arch=mips flag, Clang infers the architecture itself and does not crash, instead reporting errors like "invalid instruction mnemonic 'beql'".

Related Issues

This issue may be related to #22763, which addressed incomplete support for immediate branch pseudo-instructions in the MIPS integrated assembler.

Steps to Reproduce

Here is the comprehensive reproduce link in Compiler Explorer: https://godbolt.org/z/xf4WavzxE

Metadata

Metadata

Assignees

No one assigned

    Labels

    backend:MIPScrashPrefer [crash-on-valid] or [crash-on-invalid]mcMachine (object) code

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions