about summary refs log tree commit diff
path: root/src/libstd/sys/unix/stack_overflow.rs
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-11-04 20:39:49 +0000
committerbors <bors@rust-lang.org>2015-11-04 20:39:49 +0000
commiteffcd29652bbf16981d9cd0d8a578681b2ed55bb (patch)
tree0c5991d752c859eb48c499d3850b6ed7419ad718 /src/libstd/sys/unix/stack_overflow.rs
parent4ee11cd210ccb9a9be04ccab731cdaac5f4dea4c (diff)
parent59c5191c211711c8f51daa4911b1b734393a4011 (diff)
downloadrust-effcd29652bbf16981d9cd0d8a578681b2ed55bb.tar.gz
rust-effcd29652bbf16981d9cd0d8a578681b2ed55bb.zip
Auto merge of #29543 - Amanieu:asm_mem_constraint, r=alexcrichton
The "m" memory constraint in inline assembly is broken (generates incorrect code or triggers LLVM asserts) and should not be used. Instead, indirect memory operands should be used with "\*m", "=\*m" and "+\*m".

Clang does this transparently by transforming "m" constraints into "\*m" indirect constraints, but for now just being able to use "\*m" directly is enough since asm! isn't stable.

While "\*m" works fine as an input operand, "=\*m" and "+\*m" need to be specified as input operands because they take a pointer value as an input. This PR relaxes the constraint checker to allow constraints starting with "=" or "+" if the constraint string contains a "\*", which indicates an indirect operand.

This (indirectly) fixes these issues: #29382, #16383 and #13366. The code will need to be changed to use "\*m" instead of "m".
Diffstat (limited to 'src/libstd/sys/unix/stack_overflow.rs')
0 files changed, 0 insertions, 0 deletions