mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge remote-tracking branch 'origin/develop' into breaking
This commit is contained in:
+20
-17
@@ -92,7 +92,7 @@ echo "Using solc binary at ${SOLC}"
|
||||
INTERACTIVE=true
|
||||
if ! tty -s || [ "$CI" ]
|
||||
then
|
||||
INTERACTIVE=""
|
||||
INTERACTIVE=false
|
||||
fi
|
||||
|
||||
# extend stack size in case we run via ASAN
|
||||
@@ -123,7 +123,7 @@ function update_expectation {
|
||||
|
||||
function ask_expectation_update
|
||||
{
|
||||
if [[ $INTERACTIVE != "" ]]
|
||||
if [[ $INTERACTIVE == true ]]
|
||||
then
|
||||
local newExpectation="${1}"
|
||||
local expectationFile="${2}"
|
||||
@@ -142,12 +142,13 @@ function ask_expectation_update
|
||||
e*) "$editor" "$expectationFile"; break;;
|
||||
u*) update_expectation "$newExpectation" "$expectationFile"; break;;
|
||||
s*) return;;
|
||||
q*) exit 1;;
|
||||
q*) fail;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
else
|
||||
exit 1
|
||||
[[ $INTERACTIVE == false ]] || assertFail
|
||||
fail
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -252,7 +253,7 @@ EOF
|
||||
printError "Incorrect exit code. Expected $exit_code_expected but got $exitCode."
|
||||
|
||||
[[ $exit_code_expectation_file != "" ]] && ask_expectation_update "$exitCode" "$exit_code_expectation_file"
|
||||
[[ $exit_code_expectation_file == "" ]] && exit 1
|
||||
[[ $exit_code_expectation_file == "" ]] && fail
|
||||
fi
|
||||
|
||||
if [[ "$(cat "$stdout_path")" != "${stdout_expected}" ]]
|
||||
@@ -266,7 +267,7 @@ EOF
|
||||
printError "When running $solc_command"
|
||||
|
||||
[[ $stdout_expectation_file != "" ]] && ask_expectation_update "$(cat "$stdout_path")" "$stdout_expectation_file"
|
||||
[[ $stdout_expectation_file == "" ]] && exit 1
|
||||
[[ $stdout_expectation_file == "" ]] && fail
|
||||
fi
|
||||
|
||||
if [[ "$(cat "$stderr_path")" != "${stderr_expected}" ]]
|
||||
@@ -280,7 +281,7 @@ EOF
|
||||
printError "When running $solc_command"
|
||||
|
||||
[[ $stderr_expectation_file != "" ]] && ask_expectation_update "$(cat "$stderr_path")" "$stderr_expectation_file"
|
||||
[[ $stderr_expectation_file == "" ]] && exit 1
|
||||
[[ $stderr_expectation_file == "" ]] && fail
|
||||
fi
|
||||
|
||||
rm "$stdout_path" "$stderr_path"
|
||||
@@ -300,10 +301,10 @@ function test_solc_assembly_output()
|
||||
if [ -z "$empty" ]
|
||||
then
|
||||
printError "Incorrect assembly output. Expected: "
|
||||
echo -e "${expected}"
|
||||
>&2 echo -e "${expected}"
|
||||
printError "with arguments ${solc_args[*]}, but got:"
|
||||
echo "${output}"
|
||||
exit 1
|
||||
>&2 echo "${output}"
|
||||
fail
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -373,7 +374,7 @@ printTask "Running general commandline tests..."
|
||||
then
|
||||
printError "Ambiguous input. Found input files in multiple formats:"
|
||||
echo -e "${inputFiles}"
|
||||
exit 1
|
||||
fail
|
||||
fi
|
||||
|
||||
# Use printf to get rid of the trailing newline
|
||||
@@ -475,7 +476,8 @@ echo "Done."
|
||||
|
||||
printTask "Testing library checksum..."
|
||||
echo '' | msg_on_error --no-stdout "$SOLC" - --link --libraries a=0x90f20564390eAe531E810af625A22f51385Cd222
|
||||
echo '' | "$SOLC" - --link --libraries a=0x80f20564390eAe531E810af625A22f51385Cd222 &>/dev/null && exit 1
|
||||
echo '' | "$SOLC" - --link --libraries a=0x80f20564390eAe531E810af625A22f51385Cd222 &>/dev/null && \
|
||||
fail "solc --link did not reject a library address with an invalid checksum."
|
||||
|
||||
printTask "Testing long library names..."
|
||||
echo '' | msg_on_error --no-stdout "$SOLC" - --link --libraries aveeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeerylonglibraryname=0x90f20564390eAe531E810af625A22f51385Cd222
|
||||
@@ -503,7 +505,8 @@ SOLTMPDIR=$(mktemp -d)
|
||||
# First time it works
|
||||
echo 'contract C {}' | msg_on_error --no-stderr "$SOLC" - --bin -o "$SOLTMPDIR/non-existing-stuff-to-create"
|
||||
# Second time it fails
|
||||
echo 'contract C {}' | "$SOLC" - --bin -o "$SOLTMPDIR/non-existing-stuff-to-create" 2>/dev/null && exit 1
|
||||
echo 'contract C {}' | "$SOLC" - --bin -o "$SOLTMPDIR/non-existing-stuff-to-create" 2>/dev/null && \
|
||||
fail "solc did not refuse to overwrite $SOLTMPDIR/non-existing-stuff-to-create."
|
||||
# Unless we force
|
||||
echo 'contract C {}' | msg_on_error --no-stderr "$SOLC" - --overwrite --bin -o "$SOLTMPDIR/non-existing-stuff-to-create"
|
||||
)
|
||||
@@ -517,8 +520,8 @@ printTask "Testing assemble, yul, strict-assembly and optimize..."
|
||||
|
||||
# Test options above in conjunction with --optimize.
|
||||
# Using both, --assemble and --optimize should fail.
|
||||
echo '{}' | "$SOLC" - --assemble --optimize &>/dev/null && exit 1
|
||||
echo '{}' | "$SOLC" - --yul --optimize &>/dev/null && exit 1
|
||||
echo '{}' | "$SOLC" - --assemble --optimize &>/dev/null && fail "solc --assemble --optimize did not fail as expected."
|
||||
echo '{}' | "$SOLC" - --yul --optimize &>/dev/null && fail "solc --yul --optimize did not fail as expected."
|
||||
|
||||
# Test yul and strict assembly output
|
||||
# Non-empty code results in non-empty binary representation with optimizations turned off,
|
||||
@@ -563,8 +566,8 @@ SOLTMPDIR=$(mktemp -d)
|
||||
cd "$SOLTMPDIR"
|
||||
if ! "$REPO_ROOT/scripts/ASTImportTest.sh"
|
||||
then
|
||||
rm -rf "$SOLTMPDIR"
|
||||
exit 1
|
||||
rm -r "$SOLTMPDIR"
|
||||
fail
|
||||
fi
|
||||
)
|
||||
rm -r "$SOLTMPDIR"
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
--experimental-via-ir --combined-json function-debug-runtime --pretty-json --json-indent 4
|
||||
@@ -0,0 +1,5 @@
|
||||
Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing "SPDX-License-Identifier: <SPDX-License>" to each source file. Use "SPDX-License-Identifier: UNLICENSED" for non-open-source code. Please see https://spdx.org for more information.
|
||||
--> inline_assembly_function_name_clash/input.sol
|
||||
|
||||
Warning: Source file does not specify required compiler version!
|
||||
--> inline_assembly_function_name_clash/input.sol
|
||||
@@ -0,0 +1,18 @@
|
||||
contract C {
|
||||
uint x;
|
||||
modifier m() {
|
||||
uint t;
|
||||
assembly {
|
||||
function f() -> x { x := 8 }
|
||||
t := f()
|
||||
}
|
||||
x = t;
|
||||
_;
|
||||
}
|
||||
function f() m m public returns (uint r) {
|
||||
assembly { function f() -> x { x := 1 } r := f() }
|
||||
}
|
||||
function g() m m public returns (uint r) {
|
||||
assembly { function f() -> x { x := 2 } r := f() }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,168 @@
|
||||
{
|
||||
"contracts":
|
||||
{
|
||||
"inline_assembly_function_name_clash/input.sol:C":
|
||||
{
|
||||
"function-debug-runtime":
|
||||
{
|
||||
"abi_decode_tuple_":
|
||||
{
|
||||
"entryPoint": 216,
|
||||
"parameterSlots": 2,
|
||||
"returnSlots": 0
|
||||
},
|
||||
"abi_encode_t_uint256_to_t_uint256_fromStack":
|
||||
{
|
||||
"entryPoint": 250,
|
||||
"parameterSlots": 2,
|
||||
"returnSlots": 0
|
||||
},
|
||||
"abi_encode_tuple_t_uint256__to_t_uint256__fromStack":
|
||||
{
|
||||
"entryPoint": 265,
|
||||
"parameterSlots": 2,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"allocate_unbounded":
|
||||
{
|
||||
"entryPoint": 196,
|
||||
"parameterSlots": 0,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"cleanup_t_uint256":
|
||||
{
|
||||
"entryPoint": 240,
|
||||
"parameterSlots": 1,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"convert_t_uint256_to_t_uint256":
|
||||
{
|
||||
"entryPoint": 391,
|
||||
"parameterSlots": 1,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"fun_f_25":
|
||||
{
|
||||
"entryPoint": 658,
|
||||
"id": 25,
|
||||
"parameterSlots": 0,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"fun_f_25_inner":
|
||||
{
|
||||
"entryPoint": 624,
|
||||
"parameterSlots": 1,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"fun_g_36":
|
||||
{
|
||||
"entryPoint": 874,
|
||||
"id": 36,
|
||||
"parameterSlots": 0,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"fun_g_36_inner":
|
||||
{
|
||||
"entryPoint": 840,
|
||||
"parameterSlots": 1,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"identity":
|
||||
{
|
||||
"entryPoint": 381,
|
||||
"parameterSlots": 1,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"modifier_m_17":
|
||||
{
|
||||
"entryPoint": 470,
|
||||
"id": 14,
|
||||
"parameterSlots": 1,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"modifier_m_19":
|
||||
{
|
||||
"entryPoint": 547,
|
||||
"id": 14,
|
||||
"parameterSlots": 1,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"modifier_m_28":
|
||||
{
|
||||
"entryPoint": 686,
|
||||
"id": 14,
|
||||
"parameterSlots": 1,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"modifier_m_30":
|
||||
{
|
||||
"entryPoint": 763,
|
||||
"id": 14,
|
||||
"parameterSlots": 1,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"prepare_store_t_uint256":
|
||||
{
|
||||
"entryPoint": 425,
|
||||
"parameterSlots": 1,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"revert_error_42b3090547df1d2001c96683413b8cf91c1b902ef5e3cb8d9f6f304cf7446f74":
|
||||
{
|
||||
"entryPoint": 292,
|
||||
"parameterSlots": 0,
|
||||
"returnSlots": 0
|
||||
},
|
||||
"revert_error_ca66f745a3ce8ff40e2ccaf1ad45db7774001b90d25810abd9040049be7bf4bb":
|
||||
{
|
||||
"entryPoint": 206,
|
||||
"parameterSlots": 0,
|
||||
"returnSlots": 0
|
||||
},
|
||||
"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b":
|
||||
{
|
||||
"entryPoint": 211,
|
||||
"parameterSlots": 0,
|
||||
"returnSlots": 0
|
||||
},
|
||||
"shift_left_0":
|
||||
{
|
||||
"entryPoint": 302,
|
||||
"parameterSlots": 1,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"shift_right_224_unsigned":
|
||||
{
|
||||
"entryPoint": 183,
|
||||
"parameterSlots": 1,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"update_byte_slice_32_shift_0":
|
||||
{
|
||||
"entryPoint": 315,
|
||||
"parameterSlots": 2,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"update_storage_value_offset_0t_uint256_to_t_uint256":
|
||||
{
|
||||
"entryPoint": 435,
|
||||
"parameterSlots": 2,
|
||||
"returnSlots": 0
|
||||
},
|
||||
"usr$f":
|
||||
{
|
||||
"entryPoint": 493,
|
||||
"parameterSlots": 0,
|
||||
"returnSlots": 1
|
||||
},
|
||||
"zero_value_for_split_t_uint256":
|
||||
{
|
||||
"entryPoint": 297,
|
||||
"parameterSlots": 0,
|
||||
"returnSlots": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"version": "<VERSION REMOVED>"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
linking_qualified_library_name/contract1.sol --bin --libraries linking_qualified_library_name/math.sol:Log:0x7777777777777777777777777777777777777777
|
||||
@@ -0,0 +1,10 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
pragma solidity >=0.0;
|
||||
|
||||
import "linking_qualified_library_name/math.sol";
|
||||
|
||||
contract C {
|
||||
function foo() public {
|
||||
Log.log10();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
pragma solidity >=0.0;
|
||||
|
||||
library Log {
|
||||
function log10() external {}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
|
||||
======= linking_qualified_library_name/contract1.sol:C =======
|
||||
Binary:
|
||||
<BYTECODE REMOVED>
|
||||
|
||||
======= linking_qualified_library_name/math.sol:Log =======
|
||||
Binary:
|
||||
<BYTECODE REMOVED>
|
||||
@@ -1,26 +0,0 @@
|
||||
|
||||
======= linking_strict_assembly_no_file_name_in_link_reference/input.yul (EVM) =======
|
||||
|
||||
Pretty printed source:
|
||||
object "a" {
|
||||
code {
|
||||
let addr := linkersymbol("L")
|
||||
sstore(0, addr)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Binary representation:
|
||||
7312345678901234567890123456789012345678908060005550
|
||||
|
||||
Text representation:
|
||||
/* "linking_strict_assembly_no_file_name_in_link_reference/input.yul":44:61 */
|
||||
linkerSymbol("8aa64f937099b65a4febc243a5ae0f2d6416bb9e473c30dd29c1ee498fb7c5a8")
|
||||
/* "linking_strict_assembly_no_file_name_in_link_reference/input.yul":80:84 */
|
||||
dup1
|
||||
/* "linking_strict_assembly_no_file_name_in_link_reference/input.yul":77:78 */
|
||||
0x00
|
||||
/* "linking_strict_assembly_no_file_name_in_link_reference/input.yul":70:85 */
|
||||
sstore
|
||||
/* "linking_strict_assembly_no_file_name_in_link_reference/input.yul":22:91 */
|
||||
pop
|
||||
@@ -0,0 +1 @@
|
||||
--strict-assembly --libraries :L=0x1234567890123456789012345678901234567890 --debug-info none
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
object "a" {
|
||||
code {
|
||||
let addr := linkersymbol(":L")
|
||||
sstore(0, addr)
|
||||
}
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
|
||||
======= linking_strict_assembly_qualified_library_qualified_reference/input.yul (EVM) =======
|
||||
|
||||
Pretty printed source:
|
||||
object "a" {
|
||||
code {
|
||||
let addr := linkersymbol(":L")
|
||||
sstore(0, addr)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Binary representation:
|
||||
7312345678901234567890123456789012345678908060005550
|
||||
|
||||
Text representation:
|
||||
linkerSymbol("20a18a9bf97d889dcf77111b674da319a4e9e3e05d3f4df9e0bf5c588dd4f0f8")
|
||||
dup1
|
||||
0x00
|
||||
sstore
|
||||
pop
|
||||
@@ -0,0 +1 @@
|
||||
--strict-assembly --libraries :L=0x1234567890123456789012345678901234567890 --debug-info none
|
||||
@@ -0,0 +1 @@
|
||||
Warning: Yul is still experimental. Please use the output with care.
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
|
||||
======= linking_strict_assembly_qualified_library_unqualified_reference/input.yul (EVM) =======
|
||||
|
||||
Pretty printed source:
|
||||
object "a" {
|
||||
code {
|
||||
let addr := linkersymbol("L")
|
||||
sstore(0, addr)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Binary representation:
|
||||
73__$8aa64f937099b65a4febc243a5ae0f2d64$__8060005550
|
||||
|
||||
Text representation:
|
||||
linkerSymbol("8aa64f937099b65a4febc243a5ae0f2d6416bb9e473c30dd29c1ee498fb7c5a8")
|
||||
dup1
|
||||
0x00
|
||||
sstore
|
||||
pop
|
||||
+1
-1
@@ -1 +1 @@
|
||||
--strict-assembly --libraries L=0x1234567890123456789012345678901234567890
|
||||
--strict-assembly --libraries L=0x1234567890123456789012345678901234567890 --debug-info none
|
||||
@@ -0,0 +1 @@
|
||||
Warning: Yul is still experimental. Please use the output with care.
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
object "a" {
|
||||
code {
|
||||
let addr := linkersymbol(":L")
|
||||
sstore(0, addr)
|
||||
}
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
|
||||
======= linking_strict_assembly_unqualified_library_qualified_reference/input.yul (EVM) =======
|
||||
|
||||
Pretty printed source:
|
||||
object "a" {
|
||||
code {
|
||||
let addr := linkersymbol(":L")
|
||||
sstore(0, addr)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Binary representation:
|
||||
73__$20a18a9bf97d889dcf77111b674da319a4$__8060005550
|
||||
|
||||
Text representation:
|
||||
linkerSymbol("20a18a9bf97d889dcf77111b674da319a4e9e3e05d3f4df9e0bf5c588dd4f0f8")
|
||||
dup1
|
||||
0x00
|
||||
sstore
|
||||
pop
|
||||
+1
@@ -0,0 +1 @@
|
||||
--strict-assembly --libraries L=0x1234567890123456789012345678901234567890 --debug-info none
|
||||
+1
@@ -0,0 +1 @@
|
||||
Warning: Yul is still experimental. Please use the output with care.
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
object "a" {
|
||||
code {
|
||||
let addr := linkersymbol("L")
|
||||
sstore(0, addr)
|
||||
}
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
|
||||
======= linking_strict_assembly_unqualified_library_unqualified_reference/input.yul (EVM) =======
|
||||
|
||||
Pretty printed source:
|
||||
object "a" {
|
||||
code {
|
||||
let addr := linkersymbol("L")
|
||||
sstore(0, addr)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Binary representation:
|
||||
7312345678901234567890123456789012345678908060005550
|
||||
|
||||
Text representation:
|
||||
linkerSymbol("8aa64f937099b65a4febc243a5ae0f2d6416bb9e473c30dd29c1ee498fb7c5a8")
|
||||
dup1
|
||||
0x00
|
||||
sstore
|
||||
pop
|
||||
@@ -0,0 +1 @@
|
||||
linking_unqualified_library_name/contract1.sol linking_unqualified_library_name/contract2.sol --bin --libraries Log:0x7777777777777777777777777777777777777777
|
||||
@@ -0,0 +1,11 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
pragma solidity >=0.0;
|
||||
|
||||
|
||||
import "linking_unqualified_library_name/error.sol";
|
||||
|
||||
contract C {
|
||||
function foo() public {
|
||||
Log.print();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
pragma solidity >=0.0;
|
||||
|
||||
import "linking_unqualified_library_name/math.sol";
|
||||
|
||||
contract C {
|
||||
function foo() public {
|
||||
Log.log10();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
pragma solidity >=0.0;
|
||||
|
||||
library Log {
|
||||
function print() external {}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
pragma solidity >=0.0;
|
||||
|
||||
library Log {
|
||||
function log10() external {}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
|
||||
======= linking_unqualified_library_name/contract1.sol:C =======
|
||||
Binary:
|
||||
<BYTECODE REMOVED>__$cdf6d5ab08a9335b02e7c2475aa27d04fa$__<BYTECODE REMOVED>
|
||||
|
||||
// $cdf6d5ab08a9335b02e7c2475aa27d04fa$ -> linking_unqualified_library_name/error.sol:Log
|
||||
|
||||
======= linking_unqualified_library_name/contract2.sol:C =======
|
||||
Binary:
|
||||
<BYTECODE REMOVED>__$22584241c2fc4f2884d5222245463779a8$__<BYTECODE REMOVED>
|
||||
|
||||
// $22584241c2fc4f2884d5222245463779a8$ -> linking_unqualified_library_name/math.sol:Log
|
||||
|
||||
======= linking_unqualified_library_name/error.sol:Log =======
|
||||
Binary:
|
||||
<BYTECODE REMOVED>
|
||||
|
||||
======= linking_unqualified_library_name/math.sol:Log =======
|
||||
Binary:
|
||||
<BYTECODE REMOVED>
|
||||
@@ -0,0 +1 @@
|
||||
--model-checker-engine chc --model-checker-invariants all
|
||||
@@ -0,0 +1,15 @@
|
||||
Warning: Return value of low-level calls not used.
|
||||
--> model_checker_invariants_all/input.sol:6:3:
|
||||
|
|
||||
6 | _a.call("");
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
Info: Contract invariant(s) for model_checker_invariants_all/input.sol:test:
|
||||
(x <= 0)
|
||||
Reentrancy property(ies) for model_checker_invariants_all/input.sol:test:
|
||||
(!(x <= 0) || (x' <= 0))
|
||||
((!(x <= 0) || !(<errorCode> >= 3)) && (!(x <= 0) || (x' <= 0)))
|
||||
((!(x <= 0) || (x' <= 0)) && (!(x <= 0) || (<errorCode> <= 0)))
|
||||
<errorCode> = 0 -> no errors
|
||||
<errorCode> = 1 -> Assertion failed at assert(x < 10)
|
||||
<errorCode> = 3 -> Assertion failed at assert(x < 10)
|
||||
@@ -0,0 +1,12 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
pragma solidity >=0.0;
|
||||
contract test {
|
||||
uint x;
|
||||
function f(address _a) public {
|
||||
_a.call("");
|
||||
assert(x < 10);
|
||||
}
|
||||
function g() public view {
|
||||
assert(x < 10);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
--model-checker-engine chc --model-checker-invariants contract
|
||||
@@ -0,0 +1,2 @@
|
||||
Info: Contract invariant(s) for model_checker_invariants_contract/input.sol:test:
|
||||
(x <= 0)
|
||||
@@ -0,0 +1,8 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
pragma solidity >=0.0;
|
||||
contract test {
|
||||
uint x;
|
||||
function f() public view {
|
||||
assert(x < 10);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
--model-checker-engine chc --model-checker-invariants contract,reentrancy
|
||||
@@ -0,0 +1,15 @@
|
||||
Warning: Return value of low-level calls not used.
|
||||
--> model_checker_invariants_contract_reentrancy/input.sol:6:3:
|
||||
|
|
||||
6 | _a.call("");
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
Info: Contract invariant(s) for model_checker_invariants_contract_reentrancy/input.sol:test:
|
||||
(x <= 0)
|
||||
Reentrancy property(ies) for model_checker_invariants_contract_reentrancy/input.sol:test:
|
||||
(!(x <= 0) || (x' <= 0))
|
||||
((!(x <= 0) || !(<errorCode> >= 3)) && (!(x <= 0) || (x' <= 0)))
|
||||
((!(x <= 0) || (x' <= 0)) && (!(x <= 0) || (<errorCode> <= 0)))
|
||||
<errorCode> = 0 -> no errors
|
||||
<errorCode> = 1 -> Assertion failed at assert(x < 10)
|
||||
<errorCode> = 3 -> Assertion failed at assert(x < 10)
|
||||
@@ -0,0 +1,12 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
pragma solidity >=0.0;
|
||||
contract test {
|
||||
uint x;
|
||||
function f(address _a) public {
|
||||
_a.call("");
|
||||
assert(x < 10);
|
||||
}
|
||||
function g() public view {
|
||||
assert(x < 10);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
--model-checker-engine chc --model-checker-invariants reentrancy
|
||||
@@ -0,0 +1,10 @@
|
||||
Warning: Return value of low-level calls not used.
|
||||
--> model_checker_invariants_reentrancy/input.sol:6:3:
|
||||
|
|
||||
6 | _a.call("");
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
Info: Reentrancy property(ies) for model_checker_invariants_reentrancy/input.sol:test:
|
||||
((!(x <= 0) || (x' <= 0)) && (!(x <= 0) || (<errorCode> <= 0)))
|
||||
<errorCode> = 0 -> no errors
|
||||
<errorCode> = 1 -> Assertion failed at assert(x < 10)
|
||||
@@ -0,0 +1,9 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
pragma solidity >=0.0;
|
||||
contract test {
|
||||
uint x;
|
||||
function f(address _a) public {
|
||||
_a.call("");
|
||||
assert(x < 10);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
--model-checker-engine chc --model-checker-invariants what
|
||||
@@ -0,0 +1 @@
|
||||
Invalid option for --model-checker-invariants: what
|
||||
@@ -0,0 +1 @@
|
||||
1
|
||||
@@ -0,0 +1,8 @@
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
pragma solidity >=0.0;
|
||||
contract test {
|
||||
uint x;
|
||||
function g() public view {
|
||||
assert(x < 10);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"language": "Solidity",
|
||||
"sources":
|
||||
{
|
||||
"A":
|
||||
{
|
||||
"content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.0;\n\ncontract test {
|
||||
uint x;
|
||||
function f() public view {
|
||||
assert(x < 10);
|
||||
}
|
||||
}"
|
||||
}
|
||||
},
|
||||
"settings":
|
||||
{
|
||||
"modelChecker":
|
||||
{
|
||||
"engine": "chc",
|
||||
"invariants": ["contract"]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{"errors":[{"component":"general","errorCode":"1180","formattedMessage":"Info: Contract invariant(s) for A:test:
|
||||
(x <= 0)
|
||||
|
||||
|
||||
","message":"Contract invariant(s) for A:test:
|
||||
(x <= 0)
|
||||
","severity":"info","type":"Info"}],"sources":{"A":{"id":0}}}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"language": "Solidity",
|
||||
"sources":
|
||||
{
|
||||
"A":
|
||||
{
|
||||
"content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.0;\n\ncontract test {
|
||||
uint x;
|
||||
function f(address _a) public {
|
||||
_a.call(\"\");
|
||||
assert(x < 10);
|
||||
}
|
||||
function g() public view {
|
||||
assert(x < 10);
|
||||
}
|
||||
}"
|
||||
}
|
||||
},
|
||||
"settings":
|
||||
{
|
||||
"modelChecker":
|
||||
{
|
||||
"engine": "chc",
|
||||
"invariants": ["contract", "reentrancy"]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{"errors":[{"component":"general","errorCode":"9302","formattedMessage":"Warning: Return value of low-level calls not used.
|
||||
--> A:7:7:
|
||||
|
|
||||
7 | \t\t\t\t\t\t_a.call(\"\");
|
||||
| \t\t\t\t\t\t^^^^^^^^^^^
|
||||
|
||||
","message":"Return value of low-level calls not used.","severity":"warning","sourceLocation":{"end":143,"file":"A","start":132},"type":"Warning"},{"component":"general","errorCode":"1180","formattedMessage":"Info: Contract invariant(s) for A:test:
|
||||
(x <= 0)
|
||||
Reentrancy property(ies) for A:test:
|
||||
(!(x <= 0) || (x' <= 0))
|
||||
((!(x <= 0) || !(<errorCode> >= 3)) && (!(x <= 0) || (x' <= 0)))
|
||||
((!(x <= 0) || (x' <= 0)) && (!(x <= 0) || (<errorCode> <= 0)))
|
||||
<errorCode> = 0 -> no errors
|
||||
<errorCode> = 1 -> Assertion failed at assert(x < 10)
|
||||
<errorCode> = 3 -> Assertion failed at assert(x < 10)
|
||||
|
||||
|
||||
","message":"Contract invariant(s) for A:test:
|
||||
(x <= 0)
|
||||
Reentrancy property(ies) for A:test:
|
||||
(!(x <= 0) || (x' <= 0))
|
||||
((!(x <= 0) || !(<errorCode> >= 3)) && (!(x <= 0) || (x' <= 0)))
|
||||
((!(x <= 0) || (x' <= 0)) && (!(x <= 0) || (<errorCode> <= 0)))
|
||||
<errorCode> = 0 -> no errors
|
||||
<errorCode> = 1 -> Assertion failed at assert(x < 10)
|
||||
<errorCode> = 3 -> Assertion failed at assert(x < 10)
|
||||
","severity":"info","type":"Info"}],"sources":{"A":{"id":0}}}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"language": "Solidity",
|
||||
"sources":
|
||||
{
|
||||
"A":
|
||||
{
|
||||
"content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.0;\n\ncontract test {
|
||||
uint x;
|
||||
function f(address _a) public {
|
||||
_a.call(\"\");
|
||||
assert(x < 10);
|
||||
}
|
||||
}"
|
||||
}
|
||||
},
|
||||
"settings":
|
||||
{
|
||||
"modelChecker":
|
||||
{
|
||||
"engine": "chc",
|
||||
"invariants": ["reentrancy"]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{"errors":[{"component":"general","errorCode":"9302","formattedMessage":"Warning: Return value of low-level calls not used.
|
||||
--> A:7:7:
|
||||
|
|
||||
7 | \t\t\t\t\t\t_a.call(\"\");
|
||||
| \t\t\t\t\t\t^^^^^^^^^^^
|
||||
|
||||
","message":"Return value of low-level calls not used.","severity":"warning","sourceLocation":{"end":143,"file":"A","start":132},"type":"Warning"},{"component":"general","errorCode":"1180","formattedMessage":"Info: Reentrancy property(ies) for A:test:
|
||||
((!(x <= 0) || (x' <= 0)) && (!(x <= 0) || (<errorCode> <= 0)))
|
||||
<errorCode> = 0 -> no errors
|
||||
<errorCode> = 1 -> Assertion failed at assert(x < 10)
|
||||
|
||||
|
||||
","message":"Reentrancy property(ies) for A:test:
|
||||
((!(x <= 0) || (x' <= 0)) && (!(x <= 0) || (<errorCode> <= 0)))
|
||||
<errorCode> = 0 -> no errors
|
||||
<errorCode> = 1 -> Assertion failed at assert(x < 10)
|
||||
","severity":"info","type":"Info"}],"sources":{"A":{"id":0}}}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"language": "Solidity",
|
||||
"sources":
|
||||
{
|
||||
"A":
|
||||
{
|
||||
"content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.0;\n\ncontract test {
|
||||
uint x;
|
||||
function f() public view {
|
||||
assert(x < 10);
|
||||
}
|
||||
}"
|
||||
}
|
||||
},
|
||||
"settings":
|
||||
{
|
||||
"modelChecker":
|
||||
{
|
||||
"engine": "chc",
|
||||
"invariants": ["what"]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"errors":[{"component":"general","formattedMessage":"Invalid model checker invariants requested.","message":"Invalid model checker invariants requested.","severity":"error","type":"JSONError"}]}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"language": "Solidity",
|
||||
"sources":
|
||||
{
|
||||
"A":
|
||||
{
|
||||
"content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.0;\n\ncontract test {
|
||||
uint x;
|
||||
function f() public view {
|
||||
assert(x < 10);
|
||||
}
|
||||
}"
|
||||
}
|
||||
},
|
||||
"settings":
|
||||
{
|
||||
"modelChecker":
|
||||
{
|
||||
"engine": "chc",
|
||||
"invariants": [2]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"errors":[{"component":"general","formattedMessage":"Every invariant type in settings.modelChecker.invariants must be a string.","message":"Every invariant type in settings.modelChecker.invariants must be a string.","severity":"error","type":"JSONError"}]}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"language": "Solidity",
|
||||
"sources":
|
||||
{
|
||||
"A":
|
||||
{
|
||||
"content": "// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.0;\n\ncontract test {
|
||||
uint x;
|
||||
function f() public view {
|
||||
assert(x < 10);
|
||||
}
|
||||
}"
|
||||
}
|
||||
},
|
||||
"settings":
|
||||
{
|
||||
"modelChecker":
|
||||
{
|
||||
"engine": "chc",
|
||||
"invariants": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"errors":[{"component":"general","formattedMessage":"settings.modelChecker.invariants must be an array.","message":"settings.modelChecker.invariants must be an array.","severity":"error","type":"JSONError"}]}
|
||||
@@ -0,0 +1 @@
|
||||
--strict-assembly --debug-info none
|
||||
@@ -0,0 +1 @@
|
||||
Warning: Yul is still experimental. Please use the output with care.
|
||||
@@ -0,0 +1,17 @@
|
||||
object "object" {
|
||||
code {
|
||||
let a
|
||||
let b
|
||||
{
|
||||
function z() -> y
|
||||
{ y := calldataload(0) }
|
||||
a := z()
|
||||
}
|
||||
{
|
||||
function z() -> y
|
||||
{ y := calldataload(0x20) }
|
||||
b := z()
|
||||
}
|
||||
sstore(a, b)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
|
||||
======= yul_function_name_clashes/input.yul (EVM) =======
|
||||
|
||||
Pretty printed source:
|
||||
object "object" {
|
||||
code {
|
||||
let a
|
||||
let b
|
||||
{
|
||||
function z() -> y
|
||||
{ y := calldataload(0) }
|
||||
a := z()
|
||||
}
|
||||
{
|
||||
function z() -> y
|
||||
{ y := calldataload(0x20) }
|
||||
b := z()
|
||||
}
|
||||
sstore(a, b)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Binary representation:
|
||||
600080600f565b60008035905090565b60156006565b91506025565b6000602035905090565b602b601b565b90508082555050
|
||||
|
||||
Text representation:
|
||||
0x00
|
||||
dup1
|
||||
jump(tag_2)
|
||||
tag_1:
|
||||
0x00
|
||||
dup1
|
||||
calldataload
|
||||
swap1
|
||||
pop
|
||||
swap1
|
||||
jump // out
|
||||
tag_2:
|
||||
tag_4
|
||||
tag_1
|
||||
jump // in
|
||||
tag_4:
|
||||
swap2
|
||||
pop
|
||||
jump(tag_6)
|
||||
tag_5:
|
||||
0x00
|
||||
0x20
|
||||
calldataload
|
||||
swap1
|
||||
pop
|
||||
swap1
|
||||
jump // out
|
||||
tag_6:
|
||||
tag_8
|
||||
tag_5
|
||||
jump // in
|
||||
tag_8:
|
||||
swap1
|
||||
pop
|
||||
dup1
|
||||
dup3
|
||||
sstore
|
||||
pop
|
||||
pop
|
||||
@@ -0,0 +1 @@
|
||||
--strict-assembly
|
||||
@@ -0,0 +1 @@
|
||||
Warning: Yul is still experimental. Please use the output with care.
|
||||
@@ -0,0 +1,17 @@
|
||||
object "object" {
|
||||
code {
|
||||
let a
|
||||
let b
|
||||
{
|
||||
function z() -> y
|
||||
{ y := calldataload(0) }
|
||||
a := z()
|
||||
}
|
||||
{
|
||||
function z(r) -> y
|
||||
{ y := calldataload(r) }
|
||||
b := z(0x70)
|
||||
}
|
||||
sstore(a, b)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
|
||||
======= yul_function_name_clashes_different_params/input.yul (EVM) =======
|
||||
|
||||
Pretty printed source:
|
||||
object "object" {
|
||||
code {
|
||||
let a
|
||||
let b
|
||||
{
|
||||
function z() -> y
|
||||
{ y := calldataload(0) }
|
||||
a := z()
|
||||
}
|
||||
{
|
||||
function z(r) -> y
|
||||
{ y := calldataload(r) }
|
||||
b := z(0x70)
|
||||
}
|
||||
sstore(a, b)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Binary representation:
|
||||
600080600f565b60008035905090565b60156006565b91506026565b600081359050919050565b602e6070601b565b90508082555050
|
||||
|
||||
Text representation:
|
||||
/* "yul_function_name_clashes_different_params/input.yul":37:42 */
|
||||
0x00
|
||||
/* "yul_function_name_clashes_different_params/input.yul":51:56 */
|
||||
dup1
|
||||
/* "yul_function_name_clashes_different_params/input.yul":79:133 */
|
||||
jump(tag_2)
|
||||
tag_1:
|
||||
/* "yul_function_name_clashes_different_params/input.yul":95:96 */
|
||||
0x00
|
||||
/* "yul_function_name_clashes_different_params/input.yul":129:130 */
|
||||
dup1
|
||||
/* "yul_function_name_clashes_different_params/input.yul":116:131 */
|
||||
calldataload
|
||||
/* "yul_function_name_clashes_different_params/input.yul":111:131 */
|
||||
swap1
|
||||
pop
|
||||
/* "yul_function_name_clashes_different_params/input.yul":79:133 */
|
||||
swap1
|
||||
jump // out
|
||||
tag_2:
|
||||
/* "yul_function_name_clashes_different_params/input.yul":151:154 */
|
||||
tag_4
|
||||
tag_1
|
||||
jump // in
|
||||
tag_4:
|
||||
/* "yul_function_name_clashes_different_params/input.yul":146:154 */
|
||||
swap2
|
||||
pop
|
||||
/* "yul_function_name_clashes_different_params/input.yul":187:242 */
|
||||
jump(tag_6)
|
||||
tag_5:
|
||||
/* "yul_function_name_clashes_different_params/input.yul":204:205 */
|
||||
0x00
|
||||
/* "yul_function_name_clashes_different_params/input.yul":238:239 */
|
||||
dup2
|
||||
/* "yul_function_name_clashes_different_params/input.yul":225:240 */
|
||||
calldataload
|
||||
/* "yul_function_name_clashes_different_params/input.yul":220:240 */
|
||||
swap1
|
||||
pop
|
||||
/* "yul_function_name_clashes_different_params/input.yul":187:242 */
|
||||
swap2
|
||||
swap1
|
||||
pop
|
||||
jump // out
|
||||
tag_6:
|
||||
/* "yul_function_name_clashes_different_params/input.yul":260:267 */
|
||||
tag_8
|
||||
/* "yul_function_name_clashes_different_params/input.yul":262:266 */
|
||||
0x70
|
||||
/* "yul_function_name_clashes_different_params/input.yul":260:267 */
|
||||
tag_5
|
||||
jump // in
|
||||
tag_8:
|
||||
/* "yul_function_name_clashes_different_params/input.yul":255:267 */
|
||||
swap1
|
||||
pop
|
||||
/* "yul_function_name_clashes_different_params/input.yul":296:297 */
|
||||
dup1
|
||||
/* "yul_function_name_clashes_different_params/input.yul":293:294 */
|
||||
dup3
|
||||
/* "yul_function_name_clashes_different_params/input.yul":286:298 */
|
||||
sstore
|
||||
/* "yul_function_name_clashes_different_params/input.yul":27:304 */
|
||||
pop
|
||||
pop
|
||||
@@ -19,6 +19,8 @@
|
||||
#include <test/libsolidity/SMTCheckerTest.h>
|
||||
#include <test/Common.h>
|
||||
|
||||
#include <range/v3/action/remove_if.hpp>
|
||||
|
||||
using namespace std;
|
||||
using namespace solidity;
|
||||
using namespace solidity::langutil;
|
||||
@@ -67,6 +69,14 @@ SMTCheckerTest::SMTCheckerTest(string const& _filename): SyntaxTest(_filename, E
|
||||
else
|
||||
BOOST_THROW_EXCEPTION(runtime_error("Invalid SMT counterexample choice."));
|
||||
|
||||
auto const& ignoreInv = m_reader.stringSetting("SMTIgnoreInv", "no");
|
||||
if (ignoreInv == "no")
|
||||
m_modelCheckerSettings.invariants = ModelCheckerInvariants::All();
|
||||
else if (ignoreInv == "yes")
|
||||
m_modelCheckerSettings.invariants = ModelCheckerInvariants::None();
|
||||
else
|
||||
BOOST_THROW_EXCEPTION(runtime_error("Invalid SMT invariant choice."));
|
||||
|
||||
auto const& ignoreOSSetting = m_reader.stringSetting("SMTIgnoreOS", "none");
|
||||
for (string const& os: ignoreOSSetting | ranges::views::split(',') | ranges::to<vector<string>>())
|
||||
{
|
||||
|
||||
@@ -49,6 +49,8 @@ protected:
|
||||
Set in m_modelCheckerSettings.
|
||||
SMTIgnoreCex: `yes`, `no`, where the default is `no`.
|
||||
Set in m_ignoreCex.
|
||||
SMTIgnoreInv: `yes`, `no`, where the default is `no`.
|
||||
Set in m_modelCheckerSettings.
|
||||
SMTShowUnproved: `yes`, `no`, where the default is `yes`.
|
||||
Set in m_modelCheckerSettings.
|
||||
SMTSolvers: `all`, `cvc4`, `z3`, `none`, where the default is `all`.
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
using namespace std;
|
||||
@@ -383,7 +384,13 @@ TestCase::TestResult SemanticTest::runTest(
|
||||
soltestAssert(
|
||||
deploy(test.call().signature, 0, {}, libraries) && m_transactionSuccessful,
|
||||
"Failed to deploy library " + test.call().signature);
|
||||
libraries[test.call().signature] = m_contractAddress;
|
||||
// For convenience, in semantic tests we assume that an unqualified name like `L` is equivalent to one
|
||||
// with an empty source unit name (`:L`). This is fine because the compiler never uses unqualified
|
||||
// names in the Yul code it produces and does not allow `linkersymbol()` at all in inline assembly.
|
||||
if (test.call().signature.find(':') == string::npos)
|
||||
libraries[":" + test.call().signature] = m_contractAddress;
|
||||
else
|
||||
libraries[test.call().signature] = m_contractAddress;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -1565,7 +1565,7 @@ BOOST_AUTO_TEST_CASE(library_call_in_homestead)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "Lib");
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{":Lib", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f()"), encodeArgs());
|
||||
ABI_CHECK(callContractFunction("sender()"), encodeArgs(m_sender));
|
||||
)
|
||||
@@ -1598,7 +1598,7 @@ BOOST_AUTO_TEST_CASE(library_call_protection)
|
||||
ABI_CHECK(callContractFunction("np(Lib.S storage)", 0), encodeArgs());
|
||||
ABI_CHECK(callContractFunction("v(Lib.S storage)", 0), encodeArgs(m_sender));
|
||||
ABI_CHECK(callContractFunction("pu()"), encodeArgs(2));
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{":Lib", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("s()"), encodeArgs(0));
|
||||
ABI_CHECK(callContractFunction("np()"), encodeArgs(m_sender));
|
||||
ABI_CHECK(callContractFunction("s()"), encodeArgs(3));
|
||||
@@ -1627,7 +1627,7 @@ BOOST_AUTO_TEST_CASE(library_staticcall_delegatecall)
|
||||
}
|
||||
)";
|
||||
compileAndRun(sourceCode, 0, "Lib");
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{":Lib", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f()"), encodeArgs(1));
|
||||
}
|
||||
|
||||
@@ -1883,7 +1883,7 @@ BOOST_AUTO_TEST_CASE(struct_referencing)
|
||||
compileAndRun(sourceCode, 0, "L");
|
||||
ABI_CHECK(callContractFunction("f()"), encodeArgs(0, 3));
|
||||
ABI_CHECK(callContractFunction("g()"), encodeArgs(4));
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{ {"L", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{ {":L", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f()"), encodeArgs(1));
|
||||
ABI_CHECK(callContractFunction("g()"), encodeArgs(2));
|
||||
ABI_CHECK(callContractFunction("h()"), encodeArgs(0, 5));
|
||||
@@ -1932,7 +1932,7 @@ BOOST_AUTO_TEST_CASE(enum_referencing)
|
||||
compileAndRun(sourceCode, 0, "L");
|
||||
ABI_CHECK(callContractFunction("f()"), encodeArgs(1));
|
||||
ABI_CHECK(callContractFunction("g()"), encodeArgs(3));
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"L", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{":L", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f()"), encodeArgs(3));
|
||||
ABI_CHECK(callContractFunction("g()"), encodeArgs(3));
|
||||
ABI_CHECK(callContractFunction("h()"), encodeArgs(1));
|
||||
@@ -2763,7 +2763,7 @@ BOOST_AUTO_TEST_CASE(library_call)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "Lib");
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{":Lib", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f(uint256)", u256(33)), encodeArgs(u256(33) * 9));
|
||||
)
|
||||
}
|
||||
@@ -2781,7 +2781,7 @@ BOOST_AUTO_TEST_CASE(library_function_external)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "Lib");
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{":Lib", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f(bytes)", u256(0x20), u256(5), "abcde"), encodeArgs("c"));
|
||||
)
|
||||
}
|
||||
@@ -2801,7 +2801,7 @@ BOOST_AUTO_TEST_CASE(library_stray_values)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "Lib");
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{":Lib", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f(uint256)", u256(33)), encodeArgs(u256(42)));
|
||||
)
|
||||
}
|
||||
@@ -2834,7 +2834,7 @@ BOOST_AUTO_TEST_CASE(internal_types_in_library)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "Lib");
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{":Lib", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(4), u256(17)));
|
||||
)
|
||||
}
|
||||
@@ -2868,7 +2868,7 @@ BOOST_AUTO_TEST_CASE(mapping_arguments_in_library)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "Lib");
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{":Lib", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("set(uint256,uint256)", u256(1), u256(42)), encodeArgs(u256(0)));
|
||||
ABI_CHECK(callContractFunction("set(uint256,uint256)", u256(2), u256(84)), encodeArgs(u256(0)));
|
||||
ABI_CHECK(callContractFunction("set(uint256,uint256)", u256(21), u256(7)), encodeArgs(u256(0)));
|
||||
@@ -2919,7 +2919,7 @@ BOOST_AUTO_TEST_CASE(mapping_returns_in_library)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "Lib");
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{":Lib", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("set(bool,uint256,uint256)", true, u256(1), u256(42)), encodeArgs(u256(0)));
|
||||
ABI_CHECK(callContractFunction("set(bool,uint256,uint256)", true, u256(2), u256(84)), encodeArgs(u256(0)));
|
||||
ABI_CHECK(callContractFunction("set(bool,uint256,uint256)", true, u256(21), u256(7)), encodeArgs(u256(0)));
|
||||
@@ -2998,7 +2998,7 @@ BOOST_AUTO_TEST_CASE(mapping_returns_in_library_named)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "Lib");
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{":Lib", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0), u256(42), u256(0), u256(0), u256(21), u256(84)));
|
||||
ABI_CHECK(callContractFunction("g()"), encodeArgs(u256(0), u256(42), u256(0), u256(0), u256(21), u256(17)));
|
||||
)
|
||||
@@ -3029,7 +3029,7 @@ BOOST_AUTO_TEST_CASE(using_library_mappings_public)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "Lib");
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{":Lib", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(1), u256(0), u256(42), u256(23), u256(0), u256(99)));
|
||||
)
|
||||
}
|
||||
@@ -3065,7 +3065,7 @@ BOOST_AUTO_TEST_CASE(using_library_mappings_external)
|
||||
{
|
||||
string prefix = "pragma abicoder " + string(v2 ? "v2" : "v1") + ";\n";
|
||||
compileAndRun(prefix + libSourceCode, 0, "Lib");
|
||||
compileAndRun(prefix + sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
||||
compileAndRun(prefix + sourceCode, 0, "Test", bytes(), map<string, h160>{{":Lib", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(2), u256(0), u256(84), u256(46), u256(0), u256(198)));
|
||||
}
|
||||
}
|
||||
@@ -3093,7 +3093,7 @@ BOOST_AUTO_TEST_CASE(using_library_mappings_return)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "Lib");
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{":Lib", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(1), u256(0), u256(42), u256(23), u256(0), u256(99)));
|
||||
)
|
||||
}
|
||||
@@ -3124,7 +3124,7 @@ BOOST_AUTO_TEST_CASE(using_library_structs)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "Lib");
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{":Lib", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(7), u256(8)));
|
||||
)
|
||||
}
|
||||
@@ -3340,7 +3340,7 @@ BOOST_AUTO_TEST_CASE(using_for_function_on_struct)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "D");
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"D", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{":D", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f(uint256)", u256(7)), encodeArgs(u256(3 * 7)));
|
||||
ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(3 * 7)));
|
||||
)
|
||||
@@ -3366,7 +3366,7 @@ BOOST_AUTO_TEST_CASE(using_for_overload)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "D");
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"D", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{":D", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f(uint256)", u256(7)), encodeArgs(u256(6 * 7)));
|
||||
ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(6 * 7)));
|
||||
)
|
||||
@@ -3388,7 +3388,7 @@ BOOST_AUTO_TEST_CASE(using_for_by_name)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "D");
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"D", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{":D", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f(uint256)", u256(7)), encodeArgs(u256(6 * 7)));
|
||||
ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(6 * 7)));
|
||||
)
|
||||
@@ -3411,7 +3411,7 @@ BOOST_AUTO_TEST_CASE(bound_function_in_function)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "L");
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"L", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{":L", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(7)));
|
||||
)
|
||||
}
|
||||
@@ -3432,7 +3432,7 @@ BOOST_AUTO_TEST_CASE(bound_function_in_var)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "D");
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"D", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{":D", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f(uint256)", u256(7)), encodeArgs(u256(6 * 7)));
|
||||
ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(6 * 7)));
|
||||
)
|
||||
@@ -3458,7 +3458,7 @@ BOOST_AUTO_TEST_CASE(bound_function_to_string)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "D");
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"D", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{":D", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(3)));
|
||||
ABI_CHECK(callContractFunction("g()"), encodeArgs(u256(3)));
|
||||
)
|
||||
@@ -3631,7 +3631,7 @@ BOOST_AUTO_TEST_CASE(payable_function_calls_library)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "L");
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"L", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{":L", m_contractAddress}});
|
||||
ABI_CHECK(callContractFunctionWithValue("f()", 27), encodeArgs(u256(7)));
|
||||
)
|
||||
}
|
||||
@@ -4720,7 +4720,7 @@ BOOST_AUTO_TEST_CASE(event_wrong_abi_name)
|
||||
ALSO_VIA_YUL(
|
||||
DISABLE_EWASM_TESTRUN()
|
||||
compileAndRun(sourceCode, 0, "ClientReceipt", bytes());
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"ClientReceipt", m_contractAddress}});
|
||||
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{":ClientReceipt", m_contractAddress}});
|
||||
|
||||
callContractFunction("f()");
|
||||
BOOST_REQUIRE_EQUAL(numLogs(), 1);
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
contract C {
|
||||
function f() public pure returns (uint r) {
|
||||
assembly { function f() -> x { x := 1 } r := f() }
|
||||
}
|
||||
function g() public pure returns (uint r) {
|
||||
assembly { function f() -> x { x := 2 } r := f() }
|
||||
}
|
||||
}
|
||||
// ====
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// f() -> 1
|
||||
// g() -> 2
|
||||
@@ -42,7 +42,7 @@ contract C {
|
||||
// EVMVersion: >=byzantium
|
||||
// compileViaYul: also
|
||||
// ----
|
||||
// library: L
|
||||
// library: "a.sol":L
|
||||
// addr() -> false
|
||||
// g(uint256): 1 -> 1
|
||||
// g(uint256): 2 -> 4
|
||||
|
||||
@@ -13,6 +13,7 @@ contract C {
|
||||
}
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// SMTIgnoreOS: macos
|
||||
// ----
|
||||
// Warning 6328: (139-161): CHC: Assertion violation happens here.
|
||||
// Warning 6328: (139-161): CHC: Assertion violation happens here.\nCounterexample:\ndata = [0x62]\n\nTransaction trace:\nC.constructor()\nState: data = []\nC.g()
|
||||
// Warning 6328: (263-290): CHC: Assertion violation happens here.\nCounterexample:\ndata = [0x01]\n\nTransaction trace:\nC.constructor()\nState: data = []\nC.g()
|
||||
|
||||
+2
@@ -16,4 +16,6 @@ contract C {
|
||||
}
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// SMTIgnoreOS: macos
|
||||
// ----
|
||||
// Info 1180: Contract invariant(s) for :C:\n!(arr.length <= 0)\n!(arr2.length <= 0)\n(((arr.length + ((- 1) * arr2.length)) <= 0) && ((arr2.length + ((- 1) * arr.length)) <= 0))\n(((arr2[0].length + ((- 1) * arr[0].length)) >= 0) && ((arr2[0].length + ((- 1) * arr[0].length)) <= 0))\n
|
||||
|
||||
@@ -17,3 +17,4 @@ contract C {
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// ----
|
||||
// Info 1180: Contract invariant(s) for :C:\n!(arr.length <= 1)\n
|
||||
|
||||
@@ -7,3 +7,4 @@ contract C {
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// ----
|
||||
// Info 1180: Contract invariant(s) for :C:\n(true && (map[1].length <= 0))\n
|
||||
|
||||
@@ -11,3 +11,4 @@ contract C {
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// ----
|
||||
// Info 1180: Contract invariant(s) for :C:\n(((s1.arr.length + ((- 1) * s2.arr.length)) >= 0) && ((s1.arr.length + ((- 1) * s2.arr.length)) <= 0))\n
|
||||
|
||||
@@ -21,3 +21,4 @@ contract C {
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// ----
|
||||
// Info 1180: Contract invariant(s) for :C:\n!(s1.arr.length <= 0)\n!(s2.arr.length <= 0)\n(((s2.arr[0].length + ((- 1) * s1.arr[0].length)) <= 0) && ((s1.arr[0].length + ((- 1) * s2.arr[0].length)) <= 0))\n
|
||||
|
||||
@@ -9,3 +9,4 @@ contract C {
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// ----
|
||||
// Info 1180: Contract invariant(s) for :C:\n(arr.length <= 0)\n
|
||||
|
||||
@@ -15,3 +15,4 @@ contract C {
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// ----
|
||||
// Info 1180: Contract invariant(s) for :C:\n!(arr.length <= 2)\n
|
||||
|
||||
@@ -23,3 +23,4 @@ contract C {
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// ----
|
||||
// Info 1180: Contract invariant(s) for :C:\n!(arr.length <= 2)\n!(arr.length <= 3)\n!(arr[2].length <= 3)\n
|
||||
|
||||
@@ -27,3 +27,4 @@ contract C {
|
||||
// Warning 6328: (291-317): CHC: Assertion violation happens here.
|
||||
// Warning 6328: (321-347): CHC: Assertion violation happens here.
|
||||
// Warning 6328: (351-374): CHC: Assertion violation happens here.
|
||||
// Info 1180: Contract invariant(s) for :C:\n!(arr.length <= 2)\n!(arr.length <= 3)\n!(arr[2].length <= 3)\n
|
||||
|
||||
@@ -28,3 +28,4 @@ contract C {
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// ----
|
||||
// Info 1180: Contract invariant(s) for :C:\n!(arr.length <= 7)\n!(arr.length <= 8)\n((arr[5].length <= 0) && (arr[8].length <= 0))\n
|
||||
|
||||
@@ -25,8 +25,10 @@ contract C {
|
||||
}
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// SMTIgnoreOS: macos
|
||||
// ----
|
||||
// Warning 6328: (319-345): CHC: Assertion violation happens here.\nCounterexample:\narr = [[], [], [], [], [], [], [], [], []]\nx = 0\ny = 0\nz = 9\nt = 0\n\nTransaction trace:\nC.constructor()\nState: arr = [[], [], [], [], [], [], [], [], []]\nC.f()
|
||||
// Warning 6328: (349-375): CHC: Assertion violation happens here.\nCounterexample:\narr = [[], [], [], [], [], [], [], [], []]\nx = 0\ny = 0\nz = 9\nt = 0\n\nTransaction trace:\nC.constructor()\nState: arr = [[], [], [], [], [], [], [], [], []]\nC.f()
|
||||
// Warning 6328: (379-402): CHC: Assertion violation happens here.\nCounterexample:\narr = [[], [], [], [], [], [], [], [], []]\nx = 0\ny = 0\nz = 9\nt = 0\n\nTransaction trace:\nC.constructor()\nState: arr = [[], [], [], [], [], [], [], [], []]\nC.f()
|
||||
// Warning 6328: (406-432): CHC: Assertion violation happens here.\nCounterexample:\narr = [[], [], [], [], [], [], [], [], []]\nx = 0\ny = 0\nz = 9\nt = 0\n\nTransaction trace:\nC.constructor()\nState: arr = [[], [], [], [], [], [], [], [], []]\nC.f()
|
||||
// Info 1180: Contract invariant(s) for :C:\n!(arr.length <= 3)\n!(arr.length <= 5)\n!(arr.length <= 7)\n!(arr.length <= 8)\n
|
||||
|
||||
@@ -18,4 +18,4 @@ contract C {
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// ----
|
||||
// Warning 6328: (199-229): CHC: Assertion violation happens here.\nCounterexample:\nb = [1]\n\nTransaction trace:\nC.constructor()\nState: b = []\nC.g()
|
||||
// Warning 6328: (199-229): CHC: Assertion violation happens here.
|
||||
|
||||
@@ -12,5 +12,6 @@ contract C {
|
||||
}
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// SMTIgnoreOS: macos
|
||||
// ----
|
||||
// Warning 6328: (204-230): CHC: Assertion violation happens here.
|
||||
// Warning 6328: (204-230): CHC: Assertion violation happens here.\nCounterexample:\nb = [0, 0]\nlength = 2\n\nTransaction trace:\nC.constructor()\nState: b = []\nC.f()
|
||||
|
||||
@@ -8,4 +8,5 @@ contract C {
|
||||
}
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// SMTIgnoreInv: yes
|
||||
// ----
|
||||
|
||||
+1
@@ -9,3 +9,4 @@ contract C {
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// ----
|
||||
// Info 1180: Contract invariant(s) for :C:\n(!((x[x.length] := 23)[0] >= 43) && !((x[x.length] := 23)[0] <= 41))\n
|
||||
|
||||
+2
@@ -11,4 +11,6 @@ contract C {
|
||||
}
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// SMTIgnoreOS: macos
|
||||
// ----
|
||||
// Info 1180: Contract invariant(s) for :C:\n(x.length >= 0)\n
|
||||
|
||||
@@ -10,6 +10,7 @@ contract C {
|
||||
}
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// SMTIgnoreOS: macos
|
||||
// ----
|
||||
// Warning 6328: (90-116): CHC: Assertion violation happens here.\nCounterexample:\narray2d = [[[0]]]\nlast = 0\n\nTransaction trace:\nC.constructor()\nState: array2d = []\nC.l()
|
||||
// Warning 6328: (170-186): CHC: Assertion violation happens here.
|
||||
|
||||
@@ -12,6 +12,7 @@ contract C {
|
||||
}
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// SMTIgnoreOS: macos
|
||||
// ----
|
||||
// Warning 6368: (188-192): CHC: Out of bounds access happens here.\nCounterexample:\na = []\nb = [32]\n\nTransaction trace:\nC.constructor()\nState: a = []\nC.f()
|
||||
// Warning 6368: (188-195): CHC: Out of bounds access happens here.\nCounterexample:\n\nb = [32]\n\nTransaction trace:\nC.constructor()\nState: a = []\nC.f()
|
||||
|
||||
@@ -11,3 +11,4 @@ contract C {
|
||||
// SMTEngine: all
|
||||
// ----
|
||||
// Warning 6328: (153-188): CHC: Assertion violation happens here.\nCounterexample:\n\n\nTransaction trace:\nC.constructor(){ msg.value: 101 }\nC.f()
|
||||
// Info 1180: Contract invariant(s) for :C:\n!((:var 0).balances[address(this)] <= 100)\n
|
||||
|
||||
@@ -16,3 +16,4 @@ contract C {
|
||||
// ----
|
||||
// Warning 6328: (132-188): CHC: Assertion violation happens here.
|
||||
// Warning 6328: (269-324): CHC: Assertion violation happens here.
|
||||
// Info 1180: Contract invariant(s) for :C:\n((prevBalance + ((- 1) * (:var 1).balances[address(this)])) <= 0)\n
|
||||
|
||||
@@ -17,3 +17,4 @@ contract C {
|
||||
// ----
|
||||
// Warning 4984: (266-272): CHC: Overflow (resulting value larger than 2**256 - 1) happens here.\nCounterexample:\nx = 115792089237316195423570985008687907853269984665640564039457584007913129639926, once = true\n\nTransaction trace:\nC.constructor(){ msg.value: 28100 }\nState: x = 115792089237316195423570985008687907853269984665640564039457584007913129639926, once = false\nC.f(){ msg.value: 8 }
|
||||
// Warning 6328: (235-273): CHC: Assertion violation happens here.\nCounterexample:\nx = 0, once = true\n\nTransaction trace:\nC.constructor(){ msg.value: 0 }\nState: x = 0, once = false\nC.f(){ msg.value: 8 }
|
||||
// Info 1180: Contract invariant(s) for :C:\nonce\n
|
||||
|
||||
@@ -15,7 +15,8 @@ contract C {
|
||||
// Warning 4984: (82-85): CHC: Overflow (resulting value larger than 2**256 - 1) might happen here.
|
||||
// Warning 4984: (154-160): CHC: Overflow (resulting value larger than 2**256 - 1) might happen here.
|
||||
// Warning 4984: (212-218): CHC: Overflow (resulting value larger than 2**256 - 1) might happen here.
|
||||
// Warning 6328: (180-219): CHC: Assertion violation happens here.\nCounterexample:\nc = 1\n\nTransaction trace:\nC.constructor()\nState: c = 0\nC.f(){ msg.value: 11 }\nState: c = 1\nC.inv()
|
||||
// Warning 6328: (180-219): CHC: Assertion violation happens here.
|
||||
// Info 1180: Contract invariant(s) for :C:\n(((11 * c) + ((- 1) * (:var 1).balances[address(this)])) <= 0)\n
|
||||
// Warning 2661: (82-85): BMC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 2661: (154-160): BMC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
// Warning 2661: (212-218): BMC: Overflow (resulting value larger than 2**256 - 1) happens here.
|
||||
|
||||
@@ -12,3 +12,4 @@ contract C {
|
||||
// SMTEngine: all
|
||||
// ----
|
||||
// Warning 6328: (122-158): CHC: Assertion violation happens here.\nCounterexample:\nsum = 0\n\nTransaction trace:\nC.constructor()\nState: sum = 0\nC.inv()
|
||||
// Info 1180: Contract invariant(s) for :C:\n((sum + ((- 1) * (:var 1).balances[address(this)])) <= 0)\n
|
||||
|
||||
@@ -20,7 +20,9 @@ contract C {
|
||||
}
|
||||
// ====
|
||||
// SMTEngine: all
|
||||
// SMTIgnoreOS: macos
|
||||
// ----
|
||||
// Warning 6328: (173-208): CHC: Assertion violation happens here.\nCounterexample:\nonce = true\n\nTransaction trace:\nC.constructor()\nState: once = false\nC.f(){ msg.value: 10 }
|
||||
// Warning 6328: (321-356): CHC: Assertion violation happens here.\nCounterexample:\nonce = true\n\nTransaction trace:\nC.constructor()\nState: once = false\nC.f(){ msg.value: 10 }\n C.g() -- internal call
|
||||
// Warning 6328: (469-504): CHC: Assertion violation happens here.\nCounterexample:\nonce = true\n\nTransaction trace:\nC.constructor()\nState: once = false\nC.f(){ msg.value: 10 }\n C.g() -- internal call\n C.h() -- internal call
|
||||
// Info 1180: Contract invariant(s) for :C:\n((:var 1).balances[address(this)] >= 0)\nonce\n
|
||||
|
||||
@@ -15,4 +15,5 @@ contract C {
|
||||
// ----
|
||||
// Warning 1218: (131-165): CHC: Error trying to invoke SMT solver.
|
||||
// Warning 6328: (131-165): CHC: Assertion violation might happen here.
|
||||
// Info 1180: Reentrancy property(ies) for :C:\n(!(<errorCode> >= 2) && (((:var 0).balances[address(this)] + ((- 1) * (:var 1).balances[address(this)])) >= 0))\n<errorCode> = 0 -> no errors\n<errorCode> = 1 -> Assertion failed at assert(address(this).balance == x)\n<errorCode> = 2 -> Assertion failed at assert(address(this).balance >= x)\n
|
||||
// Warning 4661: (131-165): BMC: Assertion violation happens here.
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user