solang icon indicating copy to clipboard operation
solang copied to clipboard

Type checking error in Yul assignment statements

Open lum7na opened this issue 1 year ago • 0 comments

An error occurs when assigning a uint8 type (which is actually uint256) to a bytes32 type in Yul assembly, causing the assert for type length to fail.

Compile: solang compile a.sol --target solana

Code:

contract Test {
  function test() external returns(bytes32 result) {
    uint8 st = 127;
    assembly  { result := st }
  }
}

Output:

warning: function can be declared 'pure'
  ┌─ ~/xxx/a.sol:2:3
  │
2 │   function test() external returns(bytes32 result) {
  │   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

thread 'main' panicked at src/emit/expression.rs:2212:13:
assertion `left == right` failed
  left: 1
 right: 32
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Version: solang version v0.3.3-56-g08dbe495

lum7na avatar Jan 27 '25 12:01 lum7na