Skip to content

Incorrect handling of come invalid inline assembly constraints #54130

Closed
@alois31

Description

@alois31

Short summary: When an inline assembly constraint lacks its closing curly brace, the compiler segfaults when optimizing, and accepts the code when not optimizing.

Steps to reproduce:

  • Write the following (invalid) code to some file (e.g. main.rs):
#![feature(asm)]
fn main() {
    let rax: u64;
    unsafe {asm!("", :"={rax"(rax))};
    println!("Accumulator is: {}", rax);
}

(note the missing closing brace in the constraint)

  • Compile it with optimization (i.e. rustc -O main.rs, on nightly because we use a feature flag)
  • Compile it without optimization (i.e. rustc main.rs)

Expected result

Error message that the constraint is not well-formed

Actual result

  • With optimization: The compiler terminates with SIGSEGV (note: this happens with any optimization flag enabled)
  • Without optimization: The code is silently accepted

Meta

  • rustc --version --verbose:
rustc 1.30.0-nightly (0198a1ea4 2018-09-08)
binary: rustc
commit-hash: 0198a1ea45e29af00d92423aa6d2ac876410c3f9
commit-date: 2018-09-08
host: x86_64-unknown-linux-gnu
release: 1.30.0-nightly
LLVM version: 8.0
  • Backtrace: not applicable (compiler does not panic)

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsArea: Messages for errors, warnings, and lintsA-inline-assemblyArea: Inline assembly (`asm!(…)`)C-bugCategory: This is a bug.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions