mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			44 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
set -euo pipefail
 | 
						|
 | 
						|
# shellcheck source=scripts/common.sh
 | 
						|
source "${REPO_ROOT}/scripts/common.sh"
 | 
						|
 | 
						|
function test_solc_assembly_output
 | 
						|
{
 | 
						|
    local input="${1}"
 | 
						|
    local expected="${2}"
 | 
						|
    IFS=" " read -r -a solc_args <<< "${3}"
 | 
						|
 | 
						|
    local expected_object="object \"object\" { code ${expected} }"
 | 
						|
 | 
						|
    output=$(echo "${input}" | msg_on_error --no-stderr "$SOLC" - "${solc_args[@]}")
 | 
						|
    empty=$(echo "$output" | tr '\n' ' ' | tr -s ' ' | sed -ne "/${expected_object}/p")
 | 
						|
    if [ -z "$empty" ]
 | 
						|
    then
 | 
						|
        printError "Incorrect assembly output. Expected: "
 | 
						|
        >&2 echo -e "${expected}"
 | 
						|
        printError "with arguments ${solc_args[*]}, but got:"
 | 
						|
        >&2 echo "${output}"
 | 
						|
        fail
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
echo '{}' | msg_on_error --silent "$SOLC" - --assemble
 | 
						|
echo '{}' | msg_on_error --silent "$SOLC" - --yul
 | 
						|
echo '{}' | msg_on_error --silent "$SOLC" - --strict-assembly
 | 
						|
 | 
						|
# Test options above in conjunction with --optimize.
 | 
						|
# Using both, --assemble and --optimize should fail.
 | 
						|
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,
 | 
						|
# while it results in empty binary representation with optimizations turned on.
 | 
						|
test_solc_assembly_output "{ let x:u256 := 0:u256 mstore(0, x) }" "{ { let x := 0 mstore(0, x) } }" "--yul"
 | 
						|
test_solc_assembly_output "{ let x:u256 := bitnot(7:u256) mstore(0, x) }" "{ { let x := bitnot(7) mstore(0, x) } }" "--yul"
 | 
						|
test_solc_assembly_output "{ let t:bool := not(true) if t { mstore(0, 1) } }" "{ { let t:bool := not(true) if t { mstore(0, 1) } } }" "--yul"
 | 
						|
test_solc_assembly_output "{ let x := 0 mstore(0, x) }" "{ { let x := 0 mstore(0, x) } }" "--strict-assembly"
 | 
						|
test_solc_assembly_output "{ let x := 0 mstore(0, x) }" "{ { } }" "--strict-assembly --optimize"
 |