// RUN: --target solana --emit cfg
contract Testing {
// BEGIN-CHECK: Testing::Testing::function::switch_default__uint256
function switch_default(uint a) public pure returns (uint b) {
assembly {
// CHECK: switch (arg #0):
switch a
// CHECK: case uint256 1: goto block #2
// CHECK: case uint256 2: goto block #3
// CHECK: default: goto block #4
// CHECK: block1: # end_switch
// CHECK: branchcond (%b == uint256 7), block5, block6
case 1 {
// CHECK: block2: # case_0
// CHECK: ty:uint256 %b = uint256 5
b := 5
// CHECK: branch block1
}
case 2 {
// CHECK: block3: # case_1
// CHECK: ty:uint256 %b = uint256 6
b := 6
// CHECK: branch block1
}
default {
// CHECK: block4: # default
// CHECK: ty:uint256 %b = uint256 7
b := 7
// CHECK: branch block1
}
}
if (b == 7) {
b += 1;
}
}
// BEGIN-CHECK: Testing::Testing::function::switch_no_default__uint256
function switch_no_default(uint a) public pure returns (uint b) {
assembly {
switch a
// CHECK: switch (arg #0):
// CHECK: case uint256 1: goto block #2
// CHECK: case uint256 2: goto block #3
// CHECK: default: goto block #1
// CHECK: block1: # end_switch
// CHECK: branchcond (%b == uint256 5), block4, block5
case 1 {
// CHECK: block2: # case_0
// CHECK: ty:uint256 %b = uint256 5
// CHECK: branch block1
b := 5
}
case 2 {
// CHECK: block3: # case_1
// CHECK: ty:uint256 %b = uint256 6
// CHECK: branch block1
b := 6
}
}
if (b == 5) {
b += 1;
}
}
}