aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-06-05 01:54:14 +0800
committerGitHub <noreply@github.com>2018-06-05 01:54:14 +0800
commit4073c02cf34254dce2710f48acb95e9d39b11f0a (patch)
tree1b023f448d7c29ccbd62d14e9d33c2a199d80eaf /test
parentc2e4c4651a725a55f9ab0995fdebd25165a656f3 (diff)
parent1ce40f4089bc2662430dbc66f71702c7e380e2b0 (diff)
downloaddexon-solidity-4073c02cf34254dce2710f48acb95e9d39b11f0a.tar
dexon-solidity-4073c02cf34254dce2710f48acb95e9d39b11f0a.tar.gz
dexon-solidity-4073c02cf34254dce2710f48acb95e9d39b11f0a.tar.bz2
dexon-solidity-4073c02cf34254dce2710f48acb95e9d39b11f0a.tar.lz
dexon-solidity-4073c02cf34254dce2710f48acb95e9d39b11f0a.tar.xz
dexon-solidity-4073c02cf34254dce2710f48acb95e9d39b11f0a.tar.zst
dexon-solidity-4073c02cf34254dce2710f48acb95e9d39b11f0a.zip
Merge pull request #4208 from ethereum/extract-name-and-type-tests
Extract name and type tests
Diffstat (limited to 'test')
-rw-r--r--test/libsolidity/SolidityNameAndTypeResolution.cpp7042
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/001_name_references.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/002_undeclared_name.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/003_undeclared_name_is_not_fatal.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/004_reference_to_later_declaration.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/005_type_inference_smoke_test.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/006_type_checking_return.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/007_type_checking_return_wrong_number.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/008_type_checking_return_wrong_type.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/009_type_checking_function_call.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/010_type_conversion_for_comparison.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/011_type_conversion_for_comparison_invalid.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/012_type_inference_explicit_conversion.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/013_large_string_literal.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/014_balance.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/015_balance_invalid.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/016_assignment_to_mapping.sol13
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/017_assignment_to_struct.sol12
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/018_forward_function_reference.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/019_comparison_bitop_precedence.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/020_comparison_of_function_types_lt_1.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/021_comparison_of_function_types_lt_2.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/022_comparison_of_function_types_gt_1.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/023_comparison_of_function_types_gt_2.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/024_comparison_of_function_types_eq.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/025_comparison_of_mapping_types.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/029_create_abstract_contract.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/030_redeclare_implemented_abstract_function_as_abstract.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/039_functions_with_identical_structs_in_interface.sol13
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/040_functions_with_different_structs_in_interface.sol12
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/041_functions_with_stucts_of_non_external_types_in_interface.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/042_functions_with_stucts_of_non_external_types_in_interface_2.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/043_functions_with_stucts_of_non_external_types_in_interface_nested.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/044_returning_multi_dimensional_arrays_new_abi.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/045_returning_multi_dimensional_arrays.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/046_returning_multi_dimensional_static_arrays.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/047_returning_arrays_in_structs_new_abi.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/048_returning_arrays_in_structs_arrays.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/049_function_external_call_allowed_conversion.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/050_function_external_call_not_allowed_conversion.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/051_function_internal_allowed_conversion.sol13
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/052_function_internal_not_allowed_conversion.sol12
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/053_hash_collision_in_interface.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/054_inheritance_basic.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/055_inheritance_diamond_basic.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/056_cyclic_inheritance.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/057_legal_override_direct.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/058_legal_override_indirect.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/059_illegal_override_visibility.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/060_complex_inheritance.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/061_missing_base_constructor_arguments.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/062_base_constructor_arguments_override.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/063_implicit_derived_to_base_conversion.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/064_implicit_base_to_derived_conversion.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/065_super_excludes_current_contract.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/067_function_clash_with_state_variable_accessor.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/069_base_class_state_variable_accessor.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/070_struct_accessor_one_array_only.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/071_base_class_state_variable_internal_member.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/072_state_variable_member_of_wrong_class1.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/073_state_variable_member_of_wrong_class2.sol12
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/074_fallback_function.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/075_fallback_function_with_arguments.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/076_fallback_function_in_library.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/077_fallback_function_with_return_parameters.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/078_fallback_function_twice.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/079_fallback_function_inheritance.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/080_event.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/081_event_too_many_indexed.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/082_anonymous_event_four_indexed.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/083_anonymous_event_too_many_indexed.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/084_events_with_same_name.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/085_events_with_same_name_unnamed_arguments.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/086_events_with_same_name_different_types.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/087_double_event_declaration.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/088_double_event_declaration_ignores_anonymous.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/089_double_event_declaration_ignores_indexed.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/090_event_call.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/091_event_function_inheritance_clash.sol12
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/092_function_event_inheritance_clash.sol12
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/093_function_event_in_contract_clash.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/094_event_inheritance.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/095_multiple_events_argument_clash.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/096_access_to_default_function_visibility.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/097_access_to_internal_function.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/098_access_to_default_state_variable_visibility.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/099_access_to_internal_state_variable.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/100_error_count_in_named_args.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/101_empty_in_named_args.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/102_duplicate_parameter_names_in_named_args.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/103_invalid_parameter_names_in_named_args.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/104_empty_name_input_parameter.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/105_constant_input_parameter.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/106_empty_name_return_parameter.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/107_empty_name_input_parameter_with_named_one.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/108_empty_name_return_parameter_with_named_one.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/109_disallow_declaration_of_void_type.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/110_no_overflow_with_large_literal.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/111_overflow_caused_by_ether_units.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/112_exp_operator_exponent_too_big.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/113_exp_warn_literal_base_1.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/114_exp_warn_literal_base_2.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/115_exp_warn_literal_base_3.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/116_shift_warn_literal_base_1.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/117_shift_warn_literal_base_2.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/118_shift_warn_literal_base_3.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/119_shift_warn_literal_base_4.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/120_warn_var_from_uint8.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/121_warn_var_from_uint256.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/122_warn_var_from_int8.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/123_warn_var_from_zero.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/124_enum_member_access.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/125_enum_member_access_accross_contracts.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/126_enum_invalid_member_access.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/127_enum_invalid_direct_member_access.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/128_enum_explicit_conversion_is_okay.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/129_int_to_enum_explicit_conversion_is_okay.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/130_enum_implicit_conversion_is_not_okay_256.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/131_enum_implicit_conversion_is_not_okay_64.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/132_enum_to_enum_conversion_is_not_okay.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/133_enum_duplicate_values.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/134_enum_name_resolution_under_current_contract_name.sol12
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/135_private_visibility.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/136_private_visibility_via_explicit_base_access.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/137_external_visibility.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/138_similar_name_suggestions_expected.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/139_no_name_suggestion.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/140_multiple_similar_suggestions.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/141_multiple_scopes_suggestions.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/142_inheritence_suggestions.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/143_no_spurious_identifier_suggestions_with_submatch.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/144_no_spurious_identifier_suggestions.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/145_external_base_visibility.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/146_external_argument_assign.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/147_external_argument_increment.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/148_external_argument_delete.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/149_test_for_bug_override_function_with_bytearray_type.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/150_array_with_nonconstant_length.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/151_array_with_negative_length.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/152_array_copy_with_different_types1.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/153_array_copy_with_different_types2.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/154_array_copy_with_different_types_conversion_possible.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/155_array_copy_with_different_types_static_dynamic.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/156_array_copy_with_different_types_dynamic_static.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/157_array_of_undeclared_type.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/158_storage_variable_initialization_with_incorrect_type_int.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/159_storage_variable_initialization_with_incorrect_type_string.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/160_test_byte_is_alias_of_byte1.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/161_warns_assigning_decimal_to_bytesxx.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/162_does_not_warn_assigning_hex_number_to_bytesxx.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/163_explicit_conversion_from_decimal_to_bytesxx.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/164_assigning_value_to_const_variable.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/165_assigning_state_to_const_variable.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/166_assigning_state_to_const_variable_050.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/167_constant_string_literal_disallows_assignment.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/168_assignment_to_const_var_involving_conversion.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/169_assignment_to_const_var_involving_expression.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/170_assignment_to_const_var_involving_keccak.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/171_assignment_to_const_array_vars.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/172_assignment_to_const_string_bytes.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/173_constant_struct.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/174_address_is_constant.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/175_uninitialized_const_variable.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/176_overloaded_function_cannot_resolve.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/177_ambiguous_overloaded_function.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/178_assignment_of_nonoverloaded_function.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/179_assignment_of_overloaded_function.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/180_external_types_clash.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/181_override_changes_return_types.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/182_equal_overload.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/183_uninitialized_var.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/185_invalid_utf8_implicit.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/186_invalid_utf8_explicit.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/187_large_utf8_codepoint.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/188_string_index.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/189_string_length.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/190_negative_integers_to_signed_out_of_bound.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/191_negative_integers_to_signed_min.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/192_positive_integers_to_signed_out_of_bound.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/193_positive_integers_to_signed_out_of_bound_max.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/194_negative_integers_to_unsigned.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/195_positive_integers_to_unsigned_out_of_bound.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/196_integer_boolean_or.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/197_integer_boolean_and.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/198_integer_boolean_not.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/199_integer_unsigned_exp_signed.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/200_integer_signed_exp_unsigned.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/201_integer_signed_exp_signed.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/202_bytes_reference_compare_operators.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/203_struct_reference_compare_operators.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/204_overwrite_memory_location_external.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/205_overwrite_storage_location_external.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/206_storage_location_local_variables.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/207_no_mappings_in_memory_array.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/208_assignment_mem_to_local_storage_variable.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/209_storage_assign_to_different_local_variable.sol12
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/210_uninitialized_mapping_variable.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/211_uninitialized_mapping_array_variable.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/212_uninitialized_mapping_array_variable_050.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/213_no_delete_on_storage_pointers.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/214_assignment_mem_storage_variable_directly.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/215_function_argument_mem_to_storage.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/216_function_argument_storage_to_mem.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/217_mem_array_assignment_changes_base_type.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/219_memory_arrays_not_resizeable.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/220_struct_constructor.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/221_struct_constructor_nested.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/222_struct_named_constructor.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/223_literal_strings.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/224_string_bytes_conversion.sol17
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/225_inheriting_from_library.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/226_inheriting_library.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/227_library_having_variables.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/228_valid_library.sol1
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/229_call_to_library_function.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/230_creating_contract_within_the_contract.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/231_array_out_of_bound_access.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/232_literal_string_to_storage_pointer.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/233_non_initialized_references.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/234_non_initialized_references_050.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/235_keccak256_with_large_integer_constant.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/236_cyclic_binary_dependency.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/237_cyclic_binary_dependency_via_inheritance.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/238_multi_variable_declaration_fail.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/239_multi_variable_declaration_wildcards_fine.sol26
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/240_multi_variable_declaration_wildcards_fail_1.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/241_multi_variable_declaration_wildcards_fail_2.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/242_multi_variable_declaration_wildcards_fail_3.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/243_multi_variable_declaration_wildcards_fail_4.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/244_tuples.sol17
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/245_tuples_empty_components.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/246_multi_variable_declaration_wildcards_fail_5.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/247_multi_variable_declaration_wildcards_fail_6.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/248_tuple_assignment_from_void_function.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/249_tuple_compound_assignment.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/250_member_access_parser_ambiguity.sol17
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/251_using_for_library.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/252_using_for_not_library.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/253_using_for_function_exists.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/254_using_for_function_on_int.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/255_using_for_function_on_struct.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/256_using_for_overload.sol14
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/257_using_for_by_name.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/258_using_for_mismatch.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/259_using_for_not_used.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/260_library_memory_struct.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/261_using_for_arbitrary_mismatch.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/262_bound_function_in_var.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/263_create_memory_arrays.sol16
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/264_mapping_in_memory_array.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/265_new_for_non_array.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/266_invalid_args_creating_memory_array.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/267_invalid_args_creating_struct.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/268_function_overload_array_type.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/269_inline_array_declaration_and_passing_implicit_conversion.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/270_inline_array_declaration_and_passing_implicit_conversion_strings.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/271_inline_array_declaration_const_int_conversion.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/272_inline_array_declaration_const_string_conversion.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/273_inline_array_declaration_no_type.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/274_inline_array_declaration_no_type_strings.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/275_inline_struct_declaration_arrays.sol13
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/276_invalid_types_in_inline_array.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/277_dynamic_inline_array.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/278_lvalues_as_inline_array.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/279_break_not_in_loop.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/280_continue_not_in_loop.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/281_continue_not_in_loop_2.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/282_invalid_different_types_for_conditional_expression.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/283_left_value_in_conditional_expression_not_supported_yet.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/284_conditional_expression_with_different_struct.sol15
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/285_conditional_expression_with_different_function_type.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/286_conditional_expression_with_different_enum.sol13
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/287_conditional_expression_with_different_mapping.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/288_conditional_with_all_types.sol100
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/289_uint7_and_uintM_as_identifier.sol12
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/290_varM_disqualified_as_keyword.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/291_modifier_is_not_a_valid_typename.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/292_modifier_is_not_a_valid_typename_is_not_fatal.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/293_function_is_not_a_valid_typename.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/294_long_uint_variable_fails.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/295_bytes10abc_is_identifier.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/296_int10abc_is_identifier.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/297_library_functions_do_not_have_value.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/298_invalid_fixed_types_0x7_mxn.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/299_invalid_fixed_types_long_invalid_identifier.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/300_invalid_fixed_types_7x8_mxn.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/301_library_instances_cannot_be_used.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/302_invalid_fixed_type_long.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/303_fixed_type_int_conversion.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/304_fixed_type_rational_int_conversion.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/305_fixed_type_rational_fraction_conversion.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/306_invalid_int_implicit_conversion_from_fixed.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/307_rational_unary_minus_operation.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/308_rational_unary_plus_operation.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/309_rational_unary_plus_assignment.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/310_rational_unary_plus_operation_v050.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/311_rational_unary_plus_assignment_v050.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/312_leading_zero_rationals_convert.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/313_fixed_type_size_capabilities.sol13
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/314_fixed_type_zero_handling.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/315_fixed_type_invalid_implicit_conversion_size.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/316_fixed_type_invalid_implicit_conversion_lost_data.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/317_fixed_type_valid_explicit_conversions.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/318_invalid_array_declaration_with_rational.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/319_invalid_array_declaration_with_signed_fixed_type.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/320_invalid_array_declaration_with_unsigned_fixed_type.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/321_rational_to_bytes_implicit_conversion.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/322_fixed_to_bytes_implicit_conversion.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/323_mapping_with_fixed_literal.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/324_fixed_points_inside_structs.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/325_inline_array_fixed_types.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/326_inline_array_rationals.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/327_rational_index_access.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/328_rational_to_fixed_literal_expression.sol15
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/329_rational_as_exponent_value_signed.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/330_rational_as_exponent_value_unsigned.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/331_rational_as_exponent_half.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/332_rational_as_exponent_value_neg_quarter.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/333_fixed_point_casting_exponents_15.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/334_fixed_point_casting_exponents_neg.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/335_var_capable_of_holding_constant_rationals.sol16
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/336_var_and_rational_with_tuple.sol12
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/337_var_handle_divided_integers.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/338_rational_bitnot_unary_operation.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/339_rational_bitor_binary_operation.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/340_rational_bitxor_binary_operation.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/341_rational_bitand_binary_operation.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/342_missing_bool_conversion.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/343_integer_and_fixed_interaction.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/344_one_divided_by_three_integer_conversion.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/345_unused_return_value.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/346_unused_return_value_send.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/347_unused_return_value_call.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/348_unused_return_value_call_value.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/349_unused_return_value_callcode.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/350_unused_return_value_delegatecall.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/351_callcode_deprecated.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/352_callcode_deprecated_v050.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/353_callcode_not_deprecated_as_function.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/354_payable_in_library.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/355_payable_external.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/356_payable_internal.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/357_payable_private.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/358_illegal_override_payable.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/359_illegal_override_payable_nonpayable.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/360_function_variable_mixin.sol12
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/361_calling_payable.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/362_calling_nonpayable.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/363_non_payable_constructor.sol12
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/366_invalid_array_as_statement.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/367_using_directive_for_missing_selftype.sol14
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/368_shift_constant_left_negative_rvalue.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/369_shift_constant_right_negative_rvalue.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/370_shift_constant_left_excessive_rvalue.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/371_shift_constant_right_excessive_rvalue.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/372_shift_constant_right_fractional.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/373_inline_assembly_unbalanced_positive_stack.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/374_inline_assembly_unbalanced_negative_stack.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/375_inline_assembly_unbalanced_two_stack_load.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/376_inline_assembly_in_modifier.sol14
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/377_inline_assembly_storage.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/378_inline_assembly_storage_in_modifiers.sol14
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/379_inline_assembly_constant_assign.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/380_inline_assembly_constant_access.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/381_inline_assembly_local_variable_access_out_of_functions.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/382_inline_assembly_local_variable_access_out_of_functions_storage_ptr.sol12
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/383_inline_assembly_storage_variable_access_out_of_functions.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/384_inline_assembly_constant_variable_via_offset.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/385_inline_assembly_calldata_variables.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/386_inline_assembly_050_literals_on_stack.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/387_inline_assembly_literals_on_stack.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/388_inline_assembly_050_bare_instructions.sol12
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/389_inline_assembly_bare_instructions.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/390_inline_assembly_050_labels.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/391_inline_assembly_labels.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/392_inline_assembly_050_jump.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/393_inline_assembly_jump.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/394_inline_assembly_050_leave_items_on_stack.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/395_inline_assembly_leave_items_on_stack.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/396_invalid_mobile_type.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/397_warns_msg_value_in_non_payable_public_function.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/398_does_not_warn_msg_value_in_payable_function.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/399_does_not_warn_msg_value_in_internal_function.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/400_does_not_warn_msg_value_in_library.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/401_does_not_warn_msg_value_in_modifier_following_non_payable_public_function.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/402_assignment_to_constant.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/403_return_structs.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/404_read_returned_struct.sol12
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/405_address_checksum_type_deduction.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/406_invalid_address_checksum.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/407_invalid_address_no_checksum.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/408_invalid_address_length_short.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/409_invalid_address_length_long.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/410_string_literal_not_convertible_to_address_as_assignment.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/411_string_literal_not_convertible_to_address_as_return_value.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/412_early_exit_on_fatal_errors.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/413_address_methods.sol15
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/414_interface.sol2
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/415_interface_functions.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/416_interface_function_bodies.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/417_interface_events.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/418_interface_inheritance.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/419_interface_structs.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/420_interface_variables.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/421_interface_function_parameters.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/422_interface_enums.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/423_using_interface.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/424_using_interface_complex.sol17
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/425_interface_implement_public_contract.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/426_throw_is_deprecated.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/427_throw_is_deprecated_v050.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/428_bare_revert.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/429_revert_with_reason.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/430_bare_selfdestruct.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/431_bare_assert.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/432_bare_require.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/433_pure_statement_in_for_loop.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/434_pure_statement_check_for_regular_for_loop.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/435_warn_unused_local.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/436_warn_unused_local_assigned.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/437_warn_unused_function_parameter.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/438_unused_unnamed_function_parameter.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/439_warn_unused_return_parameter.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/440_warn_unused_return_parameter_with_explicit_return.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/441_unused_unnamed_return_parameter.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/442_named_return_parameter.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/443_named_return_parameter_with_explicit_return.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/444_unnamed_return_parameter_with_explicit_return.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/445_no_unused_warning_interface_arguments.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/446_no_unused_warning_abstract_arguments.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/447_no_unused_warnings.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/448_no_unused_dec_after_use.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/449_no_unused_inline_asm.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/450_shadowing_builtins_with_functions.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/451_shadowing_builtins_with_variables.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/452_shadowing_builtins_with_storage_variables.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/453_shadowing_builtin_at_global_scope.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/454_shadowing_builtins_with_parameters.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/455_shadowing_builtins_with_return_parameters.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/456_shadowing_builtins_with_events.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/457_shadowing_builtins_ignores_struct.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/458_shadowing_builtins_ignores_constructor.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/459_function_overload_is_not_shadowing.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/460_function_override_is_not_shadowing.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/461_event_parameter_cannot_shadow_state_variable.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/462_callable_crash.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/463_error_transfer_non_payable_fallback.sol17
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/464_error_transfer_no_fallback.sol15
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/465_error_send_non_payable_fallback.sol17
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/466_does_not_error_transfer_payable_fallback.sol16
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/467_does_not_error_transfer_regular_function.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/470_specified_storage_no_warn.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/471_unspecified_storage_warn.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/472_unspecified_storage_v050.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/473_storage_location_non_array_or_struct_disallowed.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/474_storage_location_non_array_or_struct_disallowed_is_not_fatal.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/475_implicit_conversion_disallowed.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/476_too_large_arrays_for_calldata_external.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/477_too_large_arrays_for_calldata_internal.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/478_too_large_arrays_for_calldata_public.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/479_explicit_literal_to_memory_string_assignment.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/480_explicit_literal_to_storage_string_assignment.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/481_explicit_literal_to_unspecified_string_assignment.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/482_explicit_literal_to_unspecified_string.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/483_modifiers_access_storage_pointer.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/484_function_types_selector_1.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/485_function_types_selector_2.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/486_function_types_selector_3.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/487_function_types_selector_4.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/488_function_types_selector_5.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/489_function_types_selector_6.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/490_function_types_selector_7.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/491_using_this_in_constructor.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/492_do_not_crash_on_not_lvalue.sol11
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/493_builtin_keccak256_reject_gas.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/494_builtin_sha256_reject_gas.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/495_builtin_ripemd160_reject_gas.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/496_builtin_ecrecover_reject_gas.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/497_gasleft.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/498_msg_gas_deprecated.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/499_msg_gas_deprecated_v050.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/500_gasleft_shadowing_1.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/501_gasleft_shadowing_2.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/502_builtin_keccak256_reject_value.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/503_builtin_sha256_reject_value.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/504_builtin_ripemd160_reject_value.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/505_builtin_ecrecover_reject_value.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/506_large_storage_array_fine.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/507_large_storage_array_simple.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/508_large_storage_arrays_combined.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/509_large_storage_arrays_struct.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/510_large_storage_array_mapping.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/511_library_function_without_implementation_public.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/512_library_function_without_implementation_internal.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/513_library_function_without_implementation_private.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/514_using_for_with_non_library.sol10
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/515_experimental_pragma_empty.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/516_experimental_pragma_unknown_number_literal.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/517_experimental_pragma_unknown_string_literal.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/518_experimental_pragma_unknown_quoted_string_literal.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/519_experimental_pragma_empy_string_literal.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/520_experimental_pragma_multiple_same_line.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/521_experimental_pragma_test_warning.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/522_experimental_pragma_duplicate.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/523_reject_interface_creation.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/524_accept_library_creation.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/525_reject_interface_constructors.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/526_fallback_marked_external_v050.sol4
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/527_fallback_marked_internal_v050.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/528_fallback_marked_private_v050.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/529_fallback_marked_public_v050.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/530_tuple_invalid_literal_too_large_for_uint.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/531_tuple_invalid_literal_too_large_unassigned.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/532_tuple_invalid_literal_too_large_for_uint_multi.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/533_tuple_invalid_literal_too_large_exp.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/534_tuple_invalid_literal_too_large_expression.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/535_address_overload_resolution.sol22
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/536_array_length_invalid_expression_negative_bool.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/537_array_length_invalid_expression_int_divides_bool.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/538_array_length_invalid_expression_bool_divides_int.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/539_array_length_invalid_expression_scientific_literal.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/540_array_length_invalid_expression_division_by_zero.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/541_warn_about_address_members_on_contract_balance.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/542_warn_about_address_members_on_contract_transfer.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/543_warn_about_address_members_on_contract_send.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/544_warn_about_address_members_on_contract_call.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/545_warn_about_address_members_on_contract_callcode.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/546_warn_about_address_members_on_contract_delegatecall.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/547_warn_about_address_members_on_non_this_contract_balance.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/548_warn_about_address_members_on_non_this_contract_transfer.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/549_warn_about_address_members_on_non_this_contract_send.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/550_warn_about_address_members_on_non_this_contract_call.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/551_warn_about_address_members_on_non_this_contract_callcode.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/552_warn_about_address_members_on_non_this_contract_delegatecall.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/553_no_address_members_on_contract_balance_v050.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/554_no_address_members_on_contract_transfer_v050.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/555_no_address_members_on_contract_send_v050.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/556_no_address_members_on_contract_call_v050.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/557_no_address_members_on_contract_callcode_v050.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/558_no_address_members_on_contract_delegatecall_v050.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/559_no_warning_for_using_members_that_look_like_address_members.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/560_event_emit_simple.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/561_event_emit_complex.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/562_event_emit_foreign_class.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/563_event_without_emit_deprecated.sol8
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/564_events_without_emit_deprecated_v050.sol9
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/566_require_visibility_specifiers.sol5
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/567_require_visibility_specifiers_v050.sol6
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/568_blockhash.sol3
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/569_block_blockhash_deprecated.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/570_block_blockhash_deprecated_v050.sol6
551 files changed, 4242 insertions, 7038 deletions
diff --git a/test/libsolidity/SolidityNameAndTypeResolution.cpp b/test/libsolidity/SolidityNameAndTypeResolution.cpp
index 38d7124c..e1516f84 100644
--- a/test/libsolidity/SolidityNameAndTypeResolution.cpp
+++ b/test/libsolidity/SolidityNameAndTypeResolution.cpp
@@ -43,312 +43,6 @@ namespace test
BOOST_FIXTURE_TEST_SUITE(SolidityNameAndTypeResolution, AnalysisFramework)
-BOOST_AUTO_TEST_CASE(name_references)
-{
- char const* text = R"(
- contract test {
- uint256 variable;
- function f(uint256) public returns (uint out) { f(variable); test; out; }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(undeclared_name)
-{
- char const* text = R"(
- contract test {
- uint256 variable;
- function f(uint256 arg) public {
- f(notfound);
- }
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Undeclared identifier.");
-}
-
-BOOST_AUTO_TEST_CASE(undeclared_name_is_not_fatal)
-{
- char const* text = R"(
- contract test {
- uint256 variable;
- function f(uint256 arg) public {
- f(notfound);
- f(notfound);
- }
- }
- )";
- CHECK_ERROR_ALLOW_MULTI(text, DeclarationError, (vector<string>{"Undeclared identifier", "Undeclared identifier"}));
-}
-
-BOOST_AUTO_TEST_CASE(reference_to_later_declaration)
-{
- char const* text = R"(
- contract test {
- function g() public { f(); }
- function f() public {}
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(type_inference_smoke_test)
-{
- char const* text = R"(
- contract test {
- function f(uint256 arg1, uint32 arg2) public returns (bool ret) {
- var x = arg1 + arg2 == 8; ret = x;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(type_checking_return)
-{
- char const* text = R"(
- contract test {
- function f() public returns (bool r) { return 1 >= 2; }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(type_checking_return_wrong_number)
-{
- char const* text = R"(
- contract test {
- function f() public returns (bool r1, bool r2) { return 1 >= 2; }
- }
- )";
- CHECK_ERROR(text, TypeError, "Different number of arguments in return statement than in returns declaration.");
-}
-
-BOOST_AUTO_TEST_CASE(type_checking_return_wrong_type)
-{
- char const* text = R"(
- contract test {
- function f() public returns (uint256 r) { return 1 >= 2; }
- }
- )";
- CHECK_ERROR(text, TypeError, "Return argument type bool is not implicitly convertible to expected type (type of first return variable) uint256.");
-}
-
-BOOST_AUTO_TEST_CASE(type_checking_function_call)
-{
- char const* text = R"(
- contract test {
- function f() public returns (bool) { return g(12, true) == 3; }
- function g(uint256, bool) public returns (uint256) { }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(type_conversion_for_comparison)
-{
- char const* text = R"(
- contract test {
- function f() public { uint32(2) == int64(2); }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(type_conversion_for_comparison_invalid)
-{
- char const* text = R"(
- contract test {
- function f() public { int32(2) == uint64(2); }
- }
- )";
- CHECK_ERROR(text, TypeError, "Operator == not compatible with types int32 and uint64");
-}
-
-BOOST_AUTO_TEST_CASE(type_inference_explicit_conversion)
-{
- char const* text = R"(
- contract test {
- function f() public returns (int256 r) { var x = int256(uint32(2)); return x; }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(large_string_literal)
-{
- char const* text = R"(
- contract test {
- function f() public { var x = "123456789012345678901234567890123"; }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(balance)
-{
- char const* text = R"(
- contract test {
- function fun() public {
- uint256 x = address(0).balance;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(balance_invalid)
-{
- char const* text = R"(
- contract test {
- function fun() public {
- address(0).balance = 7;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Expression has to be an lvalue.");
-}
-
-BOOST_AUTO_TEST_CASE(assignment_to_mapping)
-{
- char const* text = R"(
- contract test {
- struct str {
- mapping(uint=>uint) map;
- }
- str data;
- function fun() public {
- var a = data.map;
- data.map = a;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Mappings cannot be assigned to.");
-}
-
-BOOST_AUTO_TEST_CASE(assignment_to_struct)
-{
- char const* text = R"(
- contract test {
- struct str {
- mapping(uint=>uint) map;
- }
- str data;
- function fun() public {
- var a = data;
- data = a;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(forward_function_reference)
-{
- char const* text = R"(
- contract First {
- function fun() public returns (bool) {
- return Second(1).fun(1, true, 3) > 0;
- }
- }
- contract Second {
- function fun(uint, bool, uint) public returns (uint) {
- if (First(2).fun() == true) return 1;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(comparison_bitop_precedence)
-{
- char const* text = R"(
- contract First {
- function fun() public returns (bool ret) {
- return 1 & 2 == 8 & 9 && 1 ^ 2 < 4 | 6;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(comparison_of_function_types_lt_1)
-{
- char const* text = R"(
- contract C {
- function f() public returns (bool ret) {
- return this.f < this.f;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Operator < not compatible");
-}
-
-BOOST_AUTO_TEST_CASE(comparison_of_function_types_lt_2)
-{
- char const* text = R"(
- contract C {
- function f() public returns (bool ret) {
- return f < f;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Operator < not compatible");
-}
-
-BOOST_AUTO_TEST_CASE(comparison_of_function_types_gt_1)
-{
- char const* text = R"(
- contract C {
- function f() public returns (bool ret) {
- return this.f > this.f;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Operator > not compatible");
-}
-
-BOOST_AUTO_TEST_CASE(comparison_of_function_types_gt_2)
-{
- char const* text = R"(
- contract C {
- function f() public returns (bool ret) {
- return f > f;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Operator > not compatible");
-}
-
-BOOST_AUTO_TEST_CASE(comparison_of_function_types_eq)
-{
- char const* text = R"(
- contract C {
- function f() public returns (bool ret) {
- return f == f;
- }
- function g() public returns (bool ret) {
- return f != f;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(comparison_of_mapping_types)
-{
- char const* text = R"(
- contract C {
- mapping(uint => uint) x;
- function f() public returns (bool ret) {
- var y = x;
- return x == y;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Operator == not compatible");
-}
-
BOOST_AUTO_TEST_CASE(function_no_implementation)
{
SourceUnit const* sourceUnit = nullptr;
@@ -401,28 +95,6 @@ BOOST_AUTO_TEST_CASE(abstract_contract_with_overload)
BOOST_CHECK(!derived->annotation().unimplementedFunctions.empty());
}
-BOOST_AUTO_TEST_CASE(create_abstract_contract)
-{
- char const* text = R"(
- contract base { function foo(); }
- contract derived {
- base b;
- function foo() public { b = new base(); }
- }
- )";
- CHECK_ERROR(text, TypeError, "Trying to create an instance of an abstract contract.");
-}
-
-BOOST_AUTO_TEST_CASE(redeclare_implemented_abstract_function_as_abstract)
-{
- char const* text = R"(
- contract base { function foo(); }
- contract derived is base { function foo() public {} }
- contract wrong is derived { function foo(); }
- )";
- CHECK_ERROR(text, TypeError, "Redeclaring an already implemented function as abstract");
-}
-
BOOST_AUTO_TEST_CASE(implement_abstract_via_constructor)
{
SourceUnit const* sourceUnit = nullptr;
@@ -600,336 +272,6 @@ BOOST_AUTO_TEST_CASE(struct_with_mapping_in_library)
}
}
-BOOST_AUTO_TEST_CASE(functions_with_identical_structs_in_interface)
-{
- char const* text = R"(
- pragma experimental ABIEncoderV2;
-
- contract C {
- struct S1 { }
- struct S2 { }
- function f(S1) pure {}
- function f(S2) pure {}
- }
- )";
- CHECK_ERROR(text, TypeError, "Function overload clash during conversion to external types for arguments");
-}
-
-BOOST_AUTO_TEST_CASE(functions_with_different_structs_in_interface)
-{
- char const* text = R"(
- pragma experimental ABIEncoderV2;
-
- contract C {
- struct S1 { function() external a; }
- struct S2 { bytes24 a; }
- function f(S1) pure {}
- function f(S2) pure {}
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(functions_with_stucts_of_non_external_types_in_interface)
-{
- char const* text = R"(
- pragma experimental ABIEncoderV2;
-
- contract C {
- struct S { function() internal a; }
- function f(S) {}
- }
- )";
- CHECK_ERROR(text, TypeError, "Internal or recursive type is not allowed for public or external functions.");
-}
-
-BOOST_AUTO_TEST_CASE(functions_with_stucts_of_non_external_types_in_interface_2)
-{
- char const* text = R"(
- pragma experimental ABIEncoderV2;
-
- contract C {
- struct S { mapping(uint => uint) a; }
- function f(S) {}
- }
- )";
- CHECK_ERROR(text, TypeError, "Internal or recursive type is not allowed for public or external functions.");
-}
-
-BOOST_AUTO_TEST_CASE(functions_with_stucts_of_non_external_types_in_interface_nested)
-{
- char const* text = R"(
- pragma experimental ABIEncoderV2;
-
- contract C {
- struct T { mapping(uint => uint) a; }
- struct S { T[][2] b; }
- function f(S) {}
- }
- )";
- CHECK_ERROR(text, TypeError, "Internal or recursive type is not allowed for public or external functions.");
-}
-
-BOOST_AUTO_TEST_CASE(returning_multi_dimensional_arrays_new_abi)
-{
- char const* text = R"(
- pragma experimental ABIEncoderV2;
-
- contract C {
- function f() public pure returns (string[][]) {}
- }
- )";
- CHECK_WARNING(text, "Experimental features");
-}
-
-BOOST_AUTO_TEST_CASE(returning_multi_dimensional_arrays)
-{
- char const* text = R"(
- contract C {
- function f() public pure returns (string[][]) {}
- }
- )";
- CHECK_ERROR(text, TypeError, "only supported in the new experimental ABI encoder");
-}
-
-BOOST_AUTO_TEST_CASE(returning_multi_dimensional_static_arrays)
-{
- char const* text = R"(
- contract C {
- function f() public pure returns (uint[][2]) {}
- }
- )";
- CHECK_ERROR(text, TypeError, "only supported in the new experimental ABI encoder");
-}
-
-BOOST_AUTO_TEST_CASE(returning_arrays_in_structs_new_abi)
-{
- char const* text = R"(
- pragma experimental ABIEncoderV2;
-
- contract C {
- struct S { string[] s; }
- function f() public pure returns (S) {}
- }
- )";
- CHECK_WARNING(text, "Experimental features");
-}
-
-BOOST_AUTO_TEST_CASE(returning_arrays_in_structs_arrays)
-{
- char const* text = R"(
- contract C {
- struct S { string[] s; }
- function f() public pure returns (S x) {}
- }
- )";
- CHECK_ERROR(text, TypeError, "only supported in the new experimental ABI encoder");
-}
-
-BOOST_AUTO_TEST_CASE(function_external_call_allowed_conversion)
-{
- char const* text = R"(
- contract C {}
- contract Test {
- function externalCall() public {
- C arg;
- this.g(arg);
- }
- function g (C c) external {}
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(function_external_call_not_allowed_conversion)
-{
- char const* text = R"(
- contract C {}
- contract Test {
- function externalCall() public {
- address arg;
- this.g(arg);
- }
- function g (C c) external {}
- }
- )";
- CHECK_ERROR(text, TypeError, "Invalid type for argument in function call. Invalid implicit conversion from address to contract C requested.");
-}
-
-BOOST_AUTO_TEST_CASE(function_internal_allowed_conversion)
-{
- char const* text = R"(
- contract C {
- uint a;
- }
- contract Test {
- C a;
- function g (C c) public {}
- function internalCall() public {
- g(a);
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(function_internal_not_allowed_conversion)
-{
- char const* text = R"(
- contract C {
- uint a;
- }
- contract Test {
- address a;
- function g (C c) public {}
- function internalCall() public {
- g(a);
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Invalid type for argument in function call. Invalid implicit conversion from address to contract C requested.");
-}
-
-BOOST_AUTO_TEST_CASE(hash_collision_in_interface)
-{
- char const* text = R"(
- contract test {
- function gsf() public { }
- function tgeo() public { }
- }
- )";
- CHECK_ERROR(text, TypeError, "Function signature hash collision for tgeo()");
-}
-
-BOOST_AUTO_TEST_CASE(inheritance_basic)
-{
- char const* text = R"(
- contract base { uint baseMember; struct BaseType { uint element; } }
- contract derived is base {
- BaseType data;
- function f() public { baseMember = 7; }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(inheritance_diamond_basic)
-{
- char const* text = R"(
- contract root { function rootFunction() public {} }
- contract inter1 is root { function f() public {} }
- contract inter2 is root { function f() public {} }
- contract derived is root, inter2, inter1 {
- function g() public { f(); rootFunction(); }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(cyclic_inheritance)
-{
- char const* text = R"(
- contract A is B { }
- contract B is A { }
- )";
- CHECK_ERROR_ALLOW_MULTI(text, TypeError, (vector<string>{"Definition of base has to precede definition of derived contract"}));
-}
-
-BOOST_AUTO_TEST_CASE(legal_override_direct)
-{
- char const* text = R"(
- contract B { function f() public {} }
- contract C is B { function f(uint i) public {} }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(legal_override_indirect)
-{
- char const* text = R"(
- contract A { function f(uint a) public {} }
- contract B { function f() public {} }
- contract C is A, B { }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(illegal_override_visibility)
-{
- char const* text = R"(
- contract B { function f() internal {} }
- contract C is B { function f() public {} }
- )";
- CHECK_ERROR(text, TypeError, "Overriding function visibility differs");
-}
-
-BOOST_AUTO_TEST_CASE(complex_inheritance)
-{
- char const* text = R"(
- contract A { function f() public { uint8 x = C(0).g(); } }
- contract B { function f() public {} function g() public returns (uint8) {} }
- contract C is A, B { }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(missing_base_constructor_arguments)
-{
- char const* text = R"(
- contract A { function A(uint a) public { } }
- contract B is A { }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(base_constructor_arguments_override)
-{
- char const* text = R"(
- contract A { function A(uint a) public { } }
- contract B is A { }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(implicit_derived_to_base_conversion)
-{
- char const* text = R"(
- contract A { }
- contract B is A {
- function f() public { A a = B(1); }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(implicit_base_to_derived_conversion)
-{
- char const* text = R"(
- contract A { }
- contract B is A {
- function f() public { B b = A(1); }
- }
- )";
- CHECK_ERROR(text, TypeError, "Type contract A is not implicitly convertible to expected type contract B.");
-}
-
-BOOST_AUTO_TEST_CASE(super_excludes_current_contract)
-{
- char const* text = R"(
- contract A {
- function b() public {}
- }
-
- contract B is A {
- function f() public {
- super.f();
- }
- }
- )";
-
- CHECK_ERROR(text, TypeError, "Member \"f\" not found or not visible after argument-dependent lookup in contract super B");
-}
-
BOOST_AUTO_TEST_CASE(state_variable_accessors)
{
char const* text = R"(
@@ -971,20 +313,6 @@ BOOST_AUTO_TEST_CASE(state_variable_accessors)
BOOST_CHECK(function->stateMutability() == StateMutability::View);
}
-BOOST_AUTO_TEST_CASE(function_clash_with_state_variable_accessor)
-{
- char const* text = R"(
- contract test {
- function fun() public {
- uint64(2);
- }
- uint256 foo;
- function foo() public {}
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Identifier already declared.");
-}
-
BOOST_AUTO_TEST_CASE(private_state_variable)
{
char const* text = R"(
@@ -1007,1427 +335,6 @@ BOOST_AUTO_TEST_CASE(private_state_variable)
BOOST_CHECK_MESSAGE(function == nullptr, "Accessor function of an internal variable should not exist");
}
-BOOST_AUTO_TEST_CASE(base_class_state_variable_accessor)
-{
- char const* text = R"(
- // test for issue #1126 https://github.com/ethereum/cpp-ethereum/issues/1126
- contract Parent {
- uint256 public m_aMember;
- }
- contract Child is Parent {
- function foo() public returns (uint256) { return Parent.m_aMember; }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(struct_accessor_one_array_only)
-{
- char const* sourceCode = R"(
- contract test {
- struct Data { uint[15] m_array; }
- Data public data;
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Internal or recursive type is not allowed for public state variables.");
-}
-
-BOOST_AUTO_TEST_CASE(base_class_state_variable_internal_member)
-{
- char const* text = R"(
- contract Parent {
- uint256 internal m_aMember;
- }
- contract Child is Parent {
- function foo() public returns (uint256) { return Parent.m_aMember; }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(state_variable_member_of_wrong_class1)
-{
- char const* text = R"(
- contract Parent1 {
- uint256 internal m_aMember1;
- }
- contract Parent2 is Parent1 {
- uint256 internal m_aMember2;
- }
- contract Child is Parent2 {
- function foo() public returns (uint256) { return Parent2.m_aMember1; }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"m_aMember1\" not found or not visible after argument-dependent lookup in type(contract Parent2)");
-}
-
-BOOST_AUTO_TEST_CASE(state_variable_member_of_wrong_class2)
-{
- char const* text = R"(
- contract Parent1 {
- uint256 internal m_aMember1;
- }
- contract Parent2 is Parent1 {
- uint256 internal m_aMember2;
- }
- contract Child is Parent2 {
- function foo() public returns (uint256) { return Child.m_aMember2; }
- uint256 public m_aMember3;
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"m_aMember2\" not found or not visible after argument-dependent lookup in type(contract Child)");
-}
-
-BOOST_AUTO_TEST_CASE(fallback_function)
-{
- char const* text = R"(
- contract C {
- uint x;
- function() public { x = 2; }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(fallback_function_with_arguments)
-{
- char const* text = R"(
- contract C {
- uint x;
- function(uint a) public { x = 2; }
- }
- )";
- CHECK_ERROR(text, TypeError, "Fallback function cannot take parameters.");
-}
-
-BOOST_AUTO_TEST_CASE(fallback_function_in_library)
-{
- char const* text = R"(
- library C {
- function() public {}
- }
- )";
- CHECK_ERROR(text, TypeError, "Libraries cannot have fallback functions.");
-}
-
-BOOST_AUTO_TEST_CASE(fallback_function_with_return_parameters)
-{
- char const* text = R"(
- contract C {
- function() public returns (uint) { }
- }
- )";
- CHECK_ERROR(text, TypeError, "Fallback function cannot return values.");
-}
-
-BOOST_AUTO_TEST_CASE(fallback_function_twice)
-{
- char const* text = R"(
- contract C {
- uint x;
- function() public { x = 2; }
- function() public { x = 3; }
- }
- )";
- CHECK_ERROR_ALLOW_MULTI(text, DeclarationError, (vector<string>{
- "Only one fallback function is"
- }));
-}
-
-BOOST_AUTO_TEST_CASE(fallback_function_inheritance)
-{
- char const* text = R"(
- contract A {
- uint x;
- function() public { x = 1; }
- }
- contract C is A {
- function() public { x = 2; }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(event)
-{
- char const* text = R"(
- contract c {
- event e(uint indexed a, bytes3 indexed s, bool indexed b);
- function f() public { e(2, "abc", true); }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(event_too_many_indexed)
-{
- char const* text = R"(
- contract c {
- event e(uint indexed a, bytes3 indexed b, bool indexed c, uint indexed d);
- }
- )";
- CHECK_ERROR(text, TypeError, "More than 3 indexed arguments for event.");
-}
-
-BOOST_AUTO_TEST_CASE(anonymous_event_four_indexed)
-{
- char const* text = R"(
- contract c {
- event e(uint indexed a, bytes3 indexed b, bool indexed c, uint indexed d) anonymous;
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(anonymous_event_too_many_indexed)
-{
- char const* text = R"(
- contract c {
- event e(uint indexed a, bytes3 indexed b, bool indexed c, uint indexed d, uint indexed e) anonymous;
- }
- )";
- CHECK_ERROR(text, TypeError, "More than 4 indexed arguments for anonymous event.");
-}
-
-BOOST_AUTO_TEST_CASE(events_with_same_name)
-{
- char const* text = R"(
- contract TestIt {
- event A();
- event A(uint i);
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(events_with_same_name_unnamed_arguments)
-{
- char const* text = R"(
- contract test {
- event A(uint);
- event A(uint, uint);
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(events_with_same_name_different_types)
-{
- char const* text = R"(
- contract test {
- event A(uint);
- event A(bytes);
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(double_event_declaration)
-{
- char const* text = R"(
- contract test {
- event A(uint i);
- event A(uint i);
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Event with same name and arguments defined twice.");
-}
-
-BOOST_AUTO_TEST_CASE(double_event_declaration_ignores_anonymous)
-{
- char const* text = R"(
- contract test {
- event A(uint i);
- event A(uint i) anonymous;
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Event with same name and arguments defined twice.");
-}
-
-BOOST_AUTO_TEST_CASE(double_event_declaration_ignores_indexed)
-{
- char const* text = R"(
- contract test {
- event A(uint i);
- event A(uint indexed i);
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Event with same name and arguments defined twice.");
-}
-
-BOOST_AUTO_TEST_CASE(event_call)
-{
- char const* text = R"(
- contract c {
- event e(uint a, bytes3 indexed s, bool indexed b);
- function f() public { e(2, "abc", true); }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(event_function_inheritance_clash)
-{
- char const* text = R"(
- contract A {
- function dup() public returns (uint) {
- return 1;
- }
- }
- contract B {
- event dup();
- }
- contract C is A, B {
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Identifier already declared.");
-}
-
-BOOST_AUTO_TEST_CASE(function_event_inheritance_clash)
-{
- char const* text = R"(
- contract B {
- event dup();
- }
- contract A {
- function dup() public returns (uint) {
- return 1;
- }
- }
- contract C is B, A {
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Identifier already declared.");
-}
-
-BOOST_AUTO_TEST_CASE(function_event_in_contract_clash)
-{
- char const* text = R"(
- contract A {
- event dup();
- function dup() public returns (uint) {
- return 1;
- }
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Identifier already declared.");
-}
-
-BOOST_AUTO_TEST_CASE(event_inheritance)
-{
- char const* text = R"(
- contract base {
- event e(uint a, bytes3 indexed s, bool indexed b);
- }
- contract c is base {
- function f() public { e(2, "abc", true); }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(multiple_events_argument_clash)
-{
- char const* text = R"(
- contract c {
- event e1(uint a, uint e1, uint e2);
- event e2(uint a, uint e1, uint e2);
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(access_to_default_function_visibility)
-{
- char const* text = R"(
- contract c {
- function f() public {}
- }
- contract d {
- function g() public { c(0).f(); }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(access_to_internal_function)
-{
- char const* text = R"(
- contract c {
- function f() internal {}
- }
- contract d {
- function g() public { c(0).f(); }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"f\" not found or not visible after argument-dependent lookup in contract c");
-}
-
-BOOST_AUTO_TEST_CASE(access_to_default_state_variable_visibility)
-{
- char const* text = R"(
- contract c {
- uint a;
- }
- contract d {
- function g() public { c(0).a(); }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"a\" not found or not visible after argument-dependent lookup in contract c");
-}
-
-BOOST_AUTO_TEST_CASE(access_to_internal_state_variable)
-{
- char const* text = R"(
- contract c {
- uint public a;
- }
- contract d {
- function g() public { c(0).a(); }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(error_count_in_named_args)
-{
- char const* sourceCode = R"(
- contract test {
- function a(uint a, uint b) public returns (uint r) {
- r = a + b;
- }
- function b() public returns (uint r) {
- r = a({a: 1});
- }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Wrong argument count for function call: 1 arguments given but expected 2.");
-}
-
-BOOST_AUTO_TEST_CASE(empty_in_named_args)
-{
- char const* sourceCode = R"(
- contract test {
- function a(uint a, uint b) public returns (uint r) {
- r = a + b;
- }
- function b() public returns (uint r) {
- r = a({});
- }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Wrong argument count for function call: 0 arguments given but expected 2.");
-}
-
-BOOST_AUTO_TEST_CASE(duplicate_parameter_names_in_named_args)
-{
- char const* sourceCode = R"(
- contract test {
- function a(uint a, uint b) public returns (uint r) {
- r = a + b;
- }
- function b() public returns (uint r) {
- r = a({a: 1, a: 2});
- }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Duplicate named argument.");
-}
-
-BOOST_AUTO_TEST_CASE(invalid_parameter_names_in_named_args)
-{
- char const* sourceCode = R"(
- contract test {
- function a(uint a, uint b) public returns (uint r) {
- r = a + b;
- }
- function b() public returns (uint r) {
- r = a({a: 1, c: 2});
- }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Named argument does not match function declaration.");
-}
-
-BOOST_AUTO_TEST_CASE(empty_name_input_parameter)
-{
- char const* text = R"(
- contract test {
- function f(uint) public { }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(constant_input_parameter)
-{
- char const* text = R"(
- contract test {
- function f(uint[] constant a) public { }
- }
- )";
- CHECK_ERROR_ALLOW_MULTI(text, TypeError, (vector<string>{
- "Illegal use of \"constant\" specifier",
- "Constants of non-value type not yet implemented",
- "Uninitialized \"constant\" variable"
- }));
-}
-
-BOOST_AUTO_TEST_CASE(empty_name_return_parameter)
-{
- char const* text = R"(
- contract test {
- function f() public returns (bool) { }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(empty_name_input_parameter_with_named_one)
-{
- char const* text = R"(
- contract test {
- function f(uint, uint k) public returns (uint ret_k) {
- return k;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(empty_name_return_parameter_with_named_one)
-{
- char const* text = R"(
- contract test {
- function f() public returns (uint ret_k, uint) {
- return 5;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Different number of arguments in return statement than in returns declaration.");
-}
-
-BOOST_AUTO_TEST_CASE(disallow_declaration_of_void_type)
-{
- char const* sourceCode = R"(
- contract c {
- function f() public { var (x) = f(); }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Not enough components (0) in value to assign all variables (1).");
-}
-
-BOOST_AUTO_TEST_CASE(no_overflow_with_large_literal)
-{
- char const* text = R"(
- contract c {
- function c () public {
- a = 115792089237316195423570985008687907853269984665640564039458;
- }
- uint256 a;
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(overflow_caused_by_ether_units)
-{
- char const* text = R"(
- contract c {
- function c () public {
- a = 115792089237316195423570985008687907853269984665640564039458 ether;
- }
- uint256 a;
- }
- )";
- CHECK_ERROR(text, TypeError, "Type int_const 1157...(70 digits omitted)...0000 is not implicitly convertible to expected type uint256.");
-}
-
-BOOST_AUTO_TEST_CASE(exp_operator_exponent_too_big)
-{
- char const* sourceCode = R"(
- contract test {
- function f() public returns (uint d) { return 2 ** 10000000000; }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Operator ** not compatible with types int_const 2 and int_const 10000000000");
-}
-
-BOOST_AUTO_TEST_CASE(exp_warn_literal_base_1)
-{
- char const* sourceCode = R"(
- contract test {
- function f() pure public returns(uint) {
- uint8 x = 100;
- return 10**x;
- }
- }
- )";
- CHECK_WARNING(sourceCode, "might overflow");
-}
-
-BOOST_AUTO_TEST_CASE(exp_warn_literal_base_2)
-{
- char const* sourceCode = R"(
- contract test {
- function f() pure public returns(uint) {
- uint8 x = 100;
- return uint8(10)**x;
- }
- }
- )";
- CHECK_SUCCESS(sourceCode);
-}
-
-BOOST_AUTO_TEST_CASE(exp_warn_literal_base_3)
-{
- char const* sourceCode = R"(
- contract test {
- function f() pure public returns(uint) {
- return 2**80;
- }
- }
- )";
- CHECK_SUCCESS(sourceCode);
-}
-
-BOOST_AUTO_TEST_CASE(shift_warn_literal_base_1)
-{
- char const* sourceCode = R"(
- contract test {
- function f() pure public returns(uint) {
- uint8 x = 100;
- return 10 << x;
- }
- }
- )";
- CHECK_WARNING(sourceCode, "might overflow");
-}
-
-BOOST_AUTO_TEST_CASE(shift_warn_literal_base_2)
-{
- const char* sourceCode = R"(
- contract test {
- function f() pure public returns(uint) {
- uint8 x = 100;
- return uint8(10) << x;
- }
- }
- )";
- CHECK_SUCCESS(sourceCode);
-}
-
-BOOST_AUTO_TEST_CASE(shift_warn_literal_base_3)
-{
- const char* sourceCode = R"(
- contract test {
- function f() pure public returns(uint) {
- return 2 << 80;
- }
- }
- )";
- CHECK_SUCCESS(sourceCode);
-}
-
-BOOST_AUTO_TEST_CASE(shift_warn_literal_base_4)
-{
- const char* sourceCode = R"(
- contract test {
- function f() pure public returns(uint) {
- uint8 x = 100;
- return 10 >> x;
- }
- }
- )";
- CHECK_SUCCESS(sourceCode);
-}
-
-BOOST_AUTO_TEST_CASE(warn_var_from_uint8)
-{
- char const* sourceCode = R"(
- contract test {
- function f() pure public returns (uint) {
- var i = 1;
- return i;
- }
- }
- )";
- CHECK_WARNING_ALLOW_MULTI(sourceCode, (std::vector<std::string>{
- "uint8, which can hold values between 0 and 255",
- "Use of the \"var\" keyword is deprecated."
- }));
-}
-
-BOOST_AUTO_TEST_CASE(warn_var_from_uint256)
-{
- char const* sourceCode = R"(
- contract test {
- function f() pure public {
- var i = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
- i;
- }
- }
- )";
- CHECK_WARNING_ALLOW_MULTI(sourceCode, (std::vector<std::string>{
- "uint256, which can hold values between 0 and 115792089237316195423570985008687907853269984665640564039457584007913129639935",
- "Use of the \"var\" keyword is deprecated."
- }));
-}
-
-BOOST_AUTO_TEST_CASE(warn_var_from_int8)
-{
- char const* sourceCode = R"(
- contract test {
- function f() pure public {
- var i = -2;
- i;
- }
- }
- )";
- CHECK_WARNING_ALLOW_MULTI(sourceCode, (std::vector<std::string>{
- "int8, which can hold values between -128 and 127",
- "Use of the \"var\" keyword is deprecated."
- }));
-}
-
-BOOST_AUTO_TEST_CASE(warn_var_from_zero)
-{
- char const* sourceCode = R"(
- contract test {
- function f() pure public {
- for (var i = 0; i < msg.data.length; i++) { }
- }
- }
- )";
- CHECK_WARNING_ALLOW_MULTI(sourceCode, (std::vector<std::string>{
- "uint8, which can hold",
- "Use of the \"var\" keyword is deprecated."
- }));
-}
-
-BOOST_AUTO_TEST_CASE(enum_member_access)
-{
- char const* text = R"(
- contract test {
- enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
- function test()
- {
- choices = ActionChoices.GoStraight;
- }
- ActionChoices choices;
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(enum_member_access_accross_contracts)
-{
- char const* text = R"(
- contract Interface {
- enum MyEnum { One, Two }
- }
- contract Impl {
- function test() public returns (Interface.MyEnum) {
- return Interface.MyEnum.One;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(enum_invalid_member_access)
-{
- char const* text = R"(
- contract test {
- enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
- function test() public {
- choices = ActionChoices.RunAroundWavingYourHands;
- }
- ActionChoices choices;
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"RunAroundWavingYourHands\" not found or not visible after argument-dependent lookup in type(enum test.ActionChoices)");
-}
-
-BOOST_AUTO_TEST_CASE(enum_invalid_direct_member_access)
-{
- char const* text = R"(
- contract test {
- enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
- function test() public {
- choices = Sit;
- }
- ActionChoices choices;
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Undeclared identifier.");
-}
-
-BOOST_AUTO_TEST_CASE(enum_explicit_conversion_is_okay)
-{
- char const* text = R"(
- contract test {
- enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
- function test() public {
- a = uint256(ActionChoices.GoStraight);
- b = uint64(ActionChoices.Sit);
- }
- uint256 a;
- uint64 b;
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(int_to_enum_explicit_conversion_is_okay)
-{
- char const* text = R"(
- contract test {
- enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
- function test() public {
- a = 2;
- b = ActionChoices(a);
- }
- uint256 a;
- ActionChoices b;
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(enum_implicit_conversion_is_not_okay_256)
-{
- char const* text = R"(
- contract test {
- enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
- function test() public {
- a = ActionChoices.GoStraight;
- }
- uint256 a;
- }
- )";
- CHECK_ERROR(text, TypeError, "Type enum test.ActionChoices is not implicitly convertible to expected type uint256.");
-}
-
-BOOST_AUTO_TEST_CASE(enum_implicit_conversion_is_not_okay_64)
-{
- char const* text = R"(
- contract test {
- enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
- function test() public {
- b = ActionChoices.Sit;
- }
- uint64 b;
- }
- )";
- CHECK_ERROR(text, TypeError, "Type enum test.ActionChoices is not implicitly convertible to expected type uint64.");
-}
-
-BOOST_AUTO_TEST_CASE(enum_to_enum_conversion_is_not_okay)
-{
- char const* text = R"(
- contract test {
- enum Paper { Up, Down, Left, Right }
- enum Ground { North, South, West, East }
- function test() public {
- Ground(Paper.Up);
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Explicit type conversion not allowed from \"enum test.Paper\" to \"enum test.Ground\".");
-}
-
-BOOST_AUTO_TEST_CASE(enum_duplicate_values)
-{
- char const* text = R"(
- contract test {
- enum ActionChoices { GoLeft, GoRight, GoLeft, Sit }
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Identifier already declared.");
-}
-
-BOOST_AUTO_TEST_CASE(enum_name_resolution_under_current_contract_name)
-{
- char const* text = R"(
- contract A {
- enum Foo {
- First,
- Second
- }
-
- function a() public {
- A.Foo;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(private_visibility)
-{
- char const* sourceCode = R"(
- contract base {
- function f() private {}
- }
- contract derived is base {
- function g() public { f(); }
- }
- )";
- CHECK_ERROR(sourceCode, DeclarationError, "Undeclared identifier.");
-}
-
-BOOST_AUTO_TEST_CASE(private_visibility_via_explicit_base_access)
-{
- char const* sourceCode = R"(
- contract base {
- function f() private {}
- }
- contract derived is base {
- function g() public { base.f(); }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Member \"f\" not found or not visible after argument-dependent lookup in type(contract base)");
-}
-
-BOOST_AUTO_TEST_CASE(external_visibility)
-{
- char const* sourceCode = R"(
- contract c {
- function f() external {}
- function g() public { f(); }
- }
- )";
- CHECK_ERROR(sourceCode, DeclarationError, "Undeclared identifier.");
-}
-
-BOOST_AUTO_TEST_CASE(similar_name_suggestions_expected)
-{
- char const* sourceCode = R"(
- contract c {
- function func() {}
- function g() public { fun(); }
- }
- )";
- CHECK_ERROR(sourceCode, DeclarationError, "Undeclared identifier. Did you mean \"func\"?");
-}
-
-BOOST_AUTO_TEST_CASE(no_name_suggestion)
-{
- char const* sourceCode = R"(
- contract c {
- function g() public { fun(); }
- }
- )";
- CHECK_ERROR(sourceCode, DeclarationError, "Undeclared identifier.");
-}
-
-BOOST_AUTO_TEST_CASE(multiple_similar_suggestions)
-{
- char const* sourceCode = R"(
- contract c {
- function g() public {
- uint var1 = 1;
- uint var2 = 1;
- uint var3 = 1;
- uint var4 = 1;
- uint var5 = varx;
- }
- }
- )";
- CHECK_ERROR(sourceCode, DeclarationError, "Undeclared identifier. Did you mean \"var1\", \"var2\", \"var3\", \"var4\" or \"var5\"?");
-}
-
-BOOST_AUTO_TEST_CASE(multiple_scopes_suggestions)
-{
- char const* sourceCode = R"(
- contract c {
- uint log9 = 2;
- function g() public {
- uint log8 = 3;
- uint var1 = lgox;
- }
- }
- )";
- CHECK_ERROR(sourceCode, DeclarationError, "Undeclared identifier. Did you mean \"log8\", \"log9\", \"log0\", \"log1\", \"log2\", \"log3\" or \"log4\"?");
-}
-
-BOOST_AUTO_TEST_CASE(inheritence_suggestions)
-{
- char const* sourceCode = R"(
- contract a { function func() public {} }
- contract c is a {
- function g() public {
- uint var1 = fun();
- }
- }
- )";
- CHECK_ERROR(sourceCode, DeclarationError, "Undeclared identifier. Did you mean \"func\"?");
-}
-
-BOOST_AUTO_TEST_CASE(no_spurious_identifier_suggestions_with_submatch)
-{
- char const* sourceCode = R"(
- contract c {
- function g() public {
- uint va = 1;
- uint vb = vaxyz;
- }
- }
- )";
- CHECK_ERROR(sourceCode, DeclarationError, "Undeclared identifier.");
-}
-
-BOOST_AUTO_TEST_CASE(no_spurious_identifier_suggestions)
-{
- char const* sourceCode = R"(
- contract c {
- function g() public {
- uint va = 1;
- uint vb = x;
- }
- }
- )";
- CHECK_ERROR(sourceCode, DeclarationError, "Undeclared identifier.");
-}
-
-BOOST_AUTO_TEST_CASE(external_base_visibility)
-{
- char const* sourceCode = R"(
- contract base {
- function f() external {}
- }
- contract derived is base {
- function g() public { base.f(); }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Member \"f\" not found or not visible after argument-dependent lookup in type(contract base)");
-}
-
-BOOST_AUTO_TEST_CASE(external_argument_assign)
-{
- char const* sourceCode = R"(
- contract c {
- function f(uint a) external { a = 1; }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Expression has to be an lvalue.");
-}
-
-BOOST_AUTO_TEST_CASE(external_argument_increment)
-{
- char const* sourceCode = R"(
- contract c {
- function f(uint a) external { a++; }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Expression has to be an lvalue.");
-}
-
-BOOST_AUTO_TEST_CASE(external_argument_delete)
-{
- char const* sourceCode = R"(
- contract c {
- function f(uint a) external { delete a; }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Expression has to be an lvalue.");
-}
-
-BOOST_AUTO_TEST_CASE(test_for_bug_override_function_with_bytearray_type)
-{
- char const* sourceCode = R"(
- contract Vehicle {
- function f(bytes) external returns (uint256 r) {r = 1;}
- }
- contract Bike is Vehicle {
- function f(bytes) external returns (uint256 r) {r = 42;}
- }
- )";
- CHECK_SUCCESS(sourceCode);
-}
-
-BOOST_AUTO_TEST_CASE(array_with_nonconstant_length)
-{
- char const* text = R"(
- contract c {
- function f(uint a) public { uint8[a] x; }
- }
- )";
- CHECK_ERROR(text, TypeError, "Invalid array length, expected integer literal or constant expression.");
-}
-
-BOOST_AUTO_TEST_CASE(array_with_negative_length)
-{
- char const* text = R"(
- contract c {
- function f(uint a) public { uint8[-1] x; }
- }
- )";
- CHECK_ERROR(text, TypeError, "Array with negative length specified");
-}
-
-BOOST_AUTO_TEST_CASE(array_copy_with_different_types1)
-{
- char const* text = R"(
- contract c {
- bytes a;
- uint[] b;
- function f() public { b = a; }
- }
- )";
- CHECK_ERROR(text, TypeError, "Type bytes storage ref is not implicitly convertible to expected type uint256[] storage ref.");
-}
-
-BOOST_AUTO_TEST_CASE(array_copy_with_different_types2)
-{
- char const* text = R"(
- contract c {
- uint32[] a;
- uint8[] b;
- function f() public { b = a; }
- }
- )";
- CHECK_ERROR(text, TypeError, "Type uint32[] storage ref is not implicitly convertible to expected type uint8[] storage ref.");
-}
-
-BOOST_AUTO_TEST_CASE(array_copy_with_different_types_conversion_possible)
-{
- char const* text = R"(
- contract c {
- uint32[] a;
- uint8[] b;
- function f() public { a = b; }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(array_copy_with_different_types_static_dynamic)
-{
- char const* text = R"(
- contract c {
- uint32[] a;
- uint8[80] b;
- function f() public { a = b; }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(array_copy_with_different_types_dynamic_static)
-{
- char const* text = R"(
- contract c {
- uint[] a;
- uint[80] b;
- function f() public { b = a; }
- }
- )";
- CHECK_ERROR(text, TypeError, "Type uint256[] storage ref is not implicitly convertible to expected type uint256[80] storage ref.");
-}
-
-BOOST_AUTO_TEST_CASE(array_of_undeclared_type)
-{
- char const* text = R"(
- contract c {
- a[] public foo;
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Identifier not found or not unique.");
-}
-
-BOOST_AUTO_TEST_CASE(storage_variable_initialization_with_incorrect_type_int)
-{
- char const* text = R"(
- contract c {
- uint8 a = 1000;
- }
- )";
- CHECK_ERROR(text, TypeError, "Type int_const 1000 is not implicitly convertible to expected type uint8.");
-}
-
-BOOST_AUTO_TEST_CASE(storage_variable_initialization_with_incorrect_type_string)
-{
- char const* text = R"(
- contract c {
- uint a = "abc";
- }
- )";
- CHECK_ERROR(text, TypeError, "Type literal_string \"abc\" is not implicitly convertible to expected type uint256.");
-}
-
-BOOST_AUTO_TEST_CASE(test_byte_is_alias_of_byte1)
-{
- char const* text = R"(
- contract c {
- bytes arr;
- function f() public { byte a = arr[0];}
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(warns_assigning_decimal_to_bytesxx)
-{
- char const* text = R"(
- contract Foo {
- bytes32 a = 7;
- }
- )";
- CHECK_WARNING(text, "Decimal literal assigned to bytesXX variable will be left-aligned.");
-}
-
-BOOST_AUTO_TEST_CASE(does_not_warn_assigning_hex_number_to_bytesxx)
-{
- char const* text = R"(
- contract Foo {
- bytes32 a = 0x1234;
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(explicit_conversion_from_decimal_to_bytesxx)
-{
- char const* text = R"(
- contract Foo {
- bytes32 a = bytes32(7);
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(assigning_value_to_const_variable)
-{
- char const* text = R"(
- contract Foo {
- function changeIt() public { x = 9; }
- uint constant x = 56;
- }
- )";
- CHECK_ERROR(text, TypeError, "Cannot assign to a constant variable.");
-}
-
-BOOST_AUTO_TEST_CASE(assigning_state_to_const_variable)
-{
- char const* text = R"(
- contract C {
- address constant x = msg.sender;
- }
- )";
- CHECK_WARNING(text, "Initial value for constant variable has to be compile-time constant.");
-}
-
-BOOST_AUTO_TEST_CASE(assigning_state_to_const_variable_050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
-
- contract C {
- address constant x = msg.sender;
- }
- )";
- CHECK_ERROR(text, TypeError, "Initial value for constant variable has to be compile-time constant.");
-}
-
-BOOST_AUTO_TEST_CASE(constant_string_literal_disallows_assignment)
-{
- char const* text = R"(
- contract Test {
- string constant x = "abefghijklmnopqabcdefghijklmnopqabcdefghijklmnopqabca";
- function f() public {
- // Even if this is made possible in the future, we should not allow assignment
- // to elements of constant arrays.
- x[0] = "f";
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Index access for string is not possible.");
-}
-
-BOOST_AUTO_TEST_CASE(assignment_to_const_var_involving_conversion)
-{
- char const* text = R"(
- contract C {
- C constant x = C(0x123);
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(assignment_to_const_var_involving_expression)
-{
- char const* text = R"(
- contract C {
- uint constant x = 0x123 + 0x456;
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(assignment_to_const_var_involving_keccak)
-{
- char const* text = R"(
- contract C {
- bytes32 constant x = keccak256("abc");
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(assignment_to_const_array_vars)
-{
- char const* text = R"(
- contract C {
- uint[3] constant x = [uint(1), 2, 3];
- }
- )";
- CHECK_ERROR(text, TypeError, "implemented");
-}
-
-BOOST_AUTO_TEST_CASE(assignment_to_const_string_bytes)
-{
- char const* text = R"(
- contract C {
- bytes constant a = "\x00\x01\x02";
- bytes constant b = hex"000102";
- string constant c = "hello";
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(constant_struct)
-{
- char const* text = R"(
- contract C {
- struct S { uint x; uint[] y; }
- S constant x = S(5, new uint[](4));
- }
- )";
- CHECK_ERROR(text, TypeError, "implemented");
-}
-
-BOOST_AUTO_TEST_CASE(address_is_constant)
-{
- char const* text = R"(
- contract C {
- address constant x = 0x1212121212121212121212121212121212121212;
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(uninitialized_const_variable)
-{
- char const* text = R"(
- contract Foo {
- uint constant y;
- }
- )";
- CHECK_ERROR(text, TypeError, "Uninitialized \"constant\" variable.");
-}
-
-BOOST_AUTO_TEST_CASE(overloaded_function_cannot_resolve)
-{
- char const* sourceCode = R"(
- contract test {
- function f() public returns (uint) { return 1; }
- function f(uint a) public returns (uint) { return a; }
- function g() public returns (uint) { return f(3, 5); }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "No matching declaration found after argument-dependent lookup.");
-}
-
-BOOST_AUTO_TEST_CASE(ambiguous_overloaded_function)
-{
- char const* sourceCode = R"(
- contract test {
- function f(uint8 a) public returns (uint) { return a; }
- function f(uint a) public returns (uint) { return 2 * a; }
- // literal 1 can be both converted to uint and uint8, so the call is ambiguous.
- function g() public returns (uint) { return f(1); }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "No unique declaration found after argument-dependent lookup.");
-}
-
-BOOST_AUTO_TEST_CASE(assignment_of_nonoverloaded_function)
-{
- char const* sourceCode = R"(
- contract test {
- function f(uint a) public returns (uint) { return 2 * a; }
- function g() public returns (uint) { var x = f; return x(7); }
- }
- )";
- CHECK_SUCCESS(sourceCode);
-}
-
-BOOST_AUTO_TEST_CASE(assignment_of_overloaded_function)
-{
- char const* sourceCode = R"(
- contract test {
- function f() public returns (uint) { return 1; }
- function f(uint a) public returns (uint) { return 2 * a; }
- function g() public returns (uint) { var x = f; return x(7); }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "No matching declaration found after variable lookup.");
-}
-
-BOOST_AUTO_TEST_CASE(external_types_clash)
-{
- char const* sourceCode = R"(
- contract base {
- enum a { X }
- function f(a) public { }
- }
- contract test is base {
- function f(uint8 a) public { }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Function overload clash during conversion to external types for arguments.");
-}
-
-BOOST_AUTO_TEST_CASE(override_changes_return_types)
-{
- char const* sourceCode = R"(
- contract base {
- function f(uint a) public returns (uint) { }
- }
- contract test is base {
- function f(uint a) public returns (uint8) { }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Overriding function return types differ");
-}
-
-BOOST_AUTO_TEST_CASE(equal_overload)
-{
- char const* sourceCode = R"(
- contract C {
- function test(uint a) public returns (uint b) { }
- function test(uint a) external {}
- }
- )";
- CHECK_ALLOW_MULTI(sourceCode, (vector<pair<Error::Type, string>>{
- {Error::Type::DeclarationError, "Function with same name and arguments defined twice."},
- {Error::Type::TypeError, "Overriding function visibility differs"}
- }));
-}
-
-BOOST_AUTO_TEST_CASE(uninitialized_var)
-{
- char const* sourceCode = R"(
- contract C {
- function f() public returns (uint) { var x; return 2; }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Assignment necessary for type detection.");
-}
-
BOOST_AUTO_TEST_CASE(string)
{
char const* sourceCode = R"(
@@ -2439,370 +346,6 @@ BOOST_AUTO_TEST_CASE(string)
BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
}
-BOOST_AUTO_TEST_CASE(invalid_utf8_implicit)
-{
- char const* sourceCode = R"(
- contract C {
- string s = "\xa0\x00";
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "invalid UTF-8");
-}
-
-BOOST_AUTO_TEST_CASE(invalid_utf8_explicit)
-{
- char const* sourceCode = R"(
- contract C {
- string s = string("\xa0\x00");
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Explicit type conversion not allowed");
-}
-
-BOOST_AUTO_TEST_CASE(large_utf8_codepoint)
-{
- char const* sourceCode = R"(
- contract C {
- string s = "\xf0\x9f\xa6\x84";
- }
- )";
- CHECK_SUCCESS(sourceCode);
-}
-
-BOOST_AUTO_TEST_CASE(string_index)
-{
- char const* sourceCode = R"(
- contract C {
- string s;
- function f() public { var a = s[2]; }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Index access for string is not possible.");
-}
-
-BOOST_AUTO_TEST_CASE(string_length)
-{
- char const* sourceCode = R"(
- contract C {
- string s;
- function f() public { var a = s.length; }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Member \"length\" not found or not visible after argument-dependent lookup in string storage ref");
-}
-
-BOOST_AUTO_TEST_CASE(negative_integers_to_signed_out_of_bound)
-{
- char const* sourceCode = R"(
- contract test {
- int8 public i = -129;
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Type int_const -129 is not implicitly convertible to expected type int8.");
-}
-
-BOOST_AUTO_TEST_CASE(negative_integers_to_signed_min)
-{
- char const* sourceCode = R"(
- contract test {
- int8 public i = -128;
- }
- )";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
-}
-
-BOOST_AUTO_TEST_CASE(positive_integers_to_signed_out_of_bound)
-{
- char const* sourceCode = R"(
- contract test {
- int8 public j = 128;
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Type int_const 128 is not implicitly convertible to expected type int8.");
-}
-
-BOOST_AUTO_TEST_CASE(positive_integers_to_signed_out_of_bound_max)
-{
- char const* sourceCode = R"(
- contract test {
- int8 public j = 127;
- }
- )";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
-}
-
-BOOST_AUTO_TEST_CASE(negative_integers_to_unsigned)
-{
- char const* sourceCode = R"(
- contract test {
- uint8 public x = -1;
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Type int_const -1 is not implicitly convertible to expected type uint8.");
-}
-
-BOOST_AUTO_TEST_CASE(positive_integers_to_unsigned_out_of_bound)
-{
- char const* sourceCode = R"(
- contract test {
- uint8 public x = 700;
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Type int_const 700 is not implicitly convertible to expected type uint8.");
-}
-
-BOOST_AUTO_TEST_CASE(integer_boolean_or)
-{
- char const* sourceCode = R"(
- contract test { function() public { uint x = 1; uint y = 2; x || y; } }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Operator || not compatible with types uint256 and uint256");
-}
-
-BOOST_AUTO_TEST_CASE(integer_boolean_and)
-{
- char const* sourceCode = R"(
- contract test { function() public { uint x = 1; uint y = 2; x && y; } }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Operator && not compatible with types uint256 and uint256");
-}
-
-BOOST_AUTO_TEST_CASE(integer_boolean_not)
-{
- char const* sourceCode = R"(
- contract test { function() public { uint x = 1; !x; } }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Unary operator ! cannot be applied to type uint256");
-}
-
-BOOST_AUTO_TEST_CASE(integer_unsigned_exp_signed)
-{
- char const* sourceCode = R"(
- contract test { function() public { uint x = 3; int y = -4; x ** y; } }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Operator ** not compatible with types uint256 and int256");
-}
-
-BOOST_AUTO_TEST_CASE(integer_signed_exp_unsigned)
-{
- char const* sourceCode = R"(
- contract test { function() public { uint x = 3; int y = -4; y ** x; } }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Operator ** not compatible with types int256 and uint256");
-}
-
-BOOST_AUTO_TEST_CASE(integer_signed_exp_signed)
-{
- char const* sourceCode = R"(
- contract test { function() public { int x = -3; int y = -4; x ** y; } }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Operator ** not compatible with types int256 and int256");
-}
-
-BOOST_AUTO_TEST_CASE(bytes_reference_compare_operators)
-{
- char const* sourceCode = R"(
- contract test { bytes a; bytes b; function() public { a == b; } }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Operator == not compatible with types bytes storage ref and bytes storage ref");
-}
-
-BOOST_AUTO_TEST_CASE(struct_reference_compare_operators)
-{
- char const* sourceCode = R"(
- contract test { struct s {uint a;} s x; s y; function() public { x == y; } }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Operator == not compatible with types struct test.s storage ref and struct test.s storage ref");
-}
-
-BOOST_AUTO_TEST_CASE(overwrite_memory_location_external)
-{
- char const* sourceCode = R"(
- contract C {
- function f(uint[] memory a) external {}
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Location has to be calldata for external functions (remove the \"memory\" or \"storage\" keyword).");
-}
-
-BOOST_AUTO_TEST_CASE(overwrite_storage_location_external)
-{
- char const* sourceCode = R"(
- contract C {
- function f(uint[] storage a) external {}
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Location has to be calldata for external functions (remove the \"memory\" or \"storage\" keyword).");
-}
-
-BOOST_AUTO_TEST_CASE(storage_location_local_variables)
-{
- char const* sourceCode = R"(
- contract C {
- function f() public {
- uint[] storage x;
- uint[] memory y;
- uint[] memory z;
- x;y;z;
- }
- }
- )";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
-}
-
-BOOST_AUTO_TEST_CASE(no_mappings_in_memory_array)
-{
- char const* sourceCode = R"(
- contract C {
- function f() public {
- mapping(uint=>uint)[] memory x;
- }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Type mapping(uint256 => uint256)[] memory is only valid in storage.");
-}
-
-BOOST_AUTO_TEST_CASE(assignment_mem_to_local_storage_variable)
-{
- char const* sourceCode = R"(
- contract C {
- uint[] data;
- function f(uint[] x) public {
- var dataRef = data;
- dataRef = x;
- }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Type uint256[] memory is not implicitly convertible to expected type uint256[] storage pointer.");
-}
-
-BOOST_AUTO_TEST_CASE(storage_assign_to_different_local_variable)
-{
- char const* sourceCode = R"(
- contract C {
- uint[] data;
- uint8[] otherData;
- function f() public {
- uint8[] storage x = otherData;
- uint[] storage y = data;
- y = x;
- // note that data = otherData works
- }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Type uint8[] storage pointer is not implicitly convertible to expected type uint256[] storage pointer.");
-}
-
-BOOST_AUTO_TEST_CASE(uninitialized_mapping_variable)
-{
- char const* sourceCode = R"(
- contract C {
- function f() public {
- mapping(uint => uint) x;
- x;
- }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Uninitialized mapping. Mappings cannot be created dynamically, you have to assign them from a state variable");
-}
-
-BOOST_AUTO_TEST_CASE(uninitialized_mapping_array_variable)
-{
- char const* sourceCode = R"(
- contract C {
- function f() pure public {
- mapping(uint => uint)[] storage x;
- x;
- }
- }
- )";
- CHECK_WARNING(sourceCode, "Uninitialized storage pointer");
-}
-
-BOOST_AUTO_TEST_CASE(uninitialized_mapping_array_variable_050)
-{
- char const* sourceCode = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f() pure public {
- mapping(uint => uint)[] storage x;
- x;
- }
- }
- )";
- CHECK_ERROR(sourceCode, DeclarationError, "Uninitialized storage pointer");
-}
-
-BOOST_AUTO_TEST_CASE(no_delete_on_storage_pointers)
-{
- char const* sourceCode = R"(
- contract C {
- uint[] data;
- function f() public {
- var x = data;
- delete x;
- }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Unary operator delete cannot be applied to type uint256[] storage pointer");
-}
-
-BOOST_AUTO_TEST_CASE(assignment_mem_storage_variable_directly)
-{
- char const* sourceCode = R"(
- contract C {
- uint[] data;
- function f(uint[] x) public {
- data = x;
- }
- }
- )";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
-}
-
-BOOST_AUTO_TEST_CASE(function_argument_mem_to_storage)
-{
- char const* sourceCode = R"(
- contract C {
- function f(uint[] storage x) private {
- }
- function g(uint[] x) public {
- f(x);
- }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Invalid type for argument in function call. Invalid implicit conversion from uint256[] memory to uint256[] storage pointer requested.");
-}
-
-BOOST_AUTO_TEST_CASE(function_argument_storage_to_mem)
-{
- char const* sourceCode = R"(
- contract C {
- function f(uint[] storage x) private {
- g(x);
- }
- function g(uint[] x) public {
- }
- }
- )";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
-}
-
-BOOST_AUTO_TEST_CASE(mem_array_assignment_changes_base_type)
-{
- char const* sourceCode = R"(
- contract C {
- function f(uint8[] memory x) private {
- // Such an assignment is possible in storage, but not in memory
- // (because it would incur an otherwise unnecessary copy).
- // This requirement might be lifted, though.
- uint[] memory y = x;
- }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Type uint8[] memory is not implicitly convertible to expected type uint256[] memory.");
-}
-
BOOST_AUTO_TEST_CASE(dynamic_return_types_not_possible)
{
char const* sourceCode = R"(
@@ -2821,1993 +364,11 @@ BOOST_AUTO_TEST_CASE(dynamic_return_types_not_possible)
CHECK_WARNING(sourceCode, "Use of the \"var\" keyword is deprecated");
}
-BOOST_AUTO_TEST_CASE(memory_arrays_not_resizeable)
-{
- char const* sourceCode = R"(
- contract C {
- function f() public {
- uint[] memory x;
- x.length = 2;
- }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Expression has to be an lvalue.");
-}
-
-BOOST_AUTO_TEST_CASE(struct_constructor)
-{
- char const* sourceCode = R"(
- contract C {
- struct S { uint a; bool x; }
- function f() public {
- S memory s = S(1, true);
- }
- }
- )";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
-}
-
-BOOST_AUTO_TEST_CASE(struct_constructor_nested)
-{
- char const* sourceCode = R"(
- contract C {
- struct X { uint x1; uint x2; }
- struct S { uint s1; uint[3] s2; X s3; }
- function f() public {
- uint[3] memory s2;
- S memory s = S(1, s2, X(4, 5));
- }
- }
- )";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
-}
-
-BOOST_AUTO_TEST_CASE(struct_named_constructor)
-{
- char const* sourceCode = R"(
- contract C {
- struct S { uint a; bool x; }
- function f() public {
- S memory s = S({a: 1, x: true});
- }
- }
- )";
- BOOST_CHECK_NO_THROW(parseAndAnalyse(sourceCode));
-}
-
-BOOST_AUTO_TEST_CASE(literal_strings)
-{
- char const* text = R"(
- contract Foo {
- function f() public {
- string memory long = "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890";
- string memory short = "123";
- long; short;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(string_bytes_conversion)
-{
- char const* text = R"(
- contract Test {
- string s;
- bytes b;
- function h(string _s) external { bytes(_s).length; }
- function i(string _s) internal { bytes(_s).length; }
- function j() internal { bytes(s).length; }
- function k(bytes _b) external { string(_b); }
- function l(bytes _b) internal { string(_b); }
- function m() internal { string(b); }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(inheriting_from_library)
-{
- char const* text = R"(
- library Lib {}
- contract Test is Lib {}
- )";
- CHECK_ERROR(text, TypeError, "Libraries cannot be inherited from.");
-}
-
-BOOST_AUTO_TEST_CASE(inheriting_library)
-{
- char const* text = R"(
- contract Test {}
- library Lib is Test {}
- )";
- CHECK_ERROR(text, TypeError, "Library is not allowed to inherit.");
-}
-
-BOOST_AUTO_TEST_CASE(library_having_variables)
-{
- char const* text = R"(
- library Lib { uint x; }
- )";
- CHECK_ERROR(text, TypeError, "Library cannot have non-constant state variables");
-}
-
-BOOST_AUTO_TEST_CASE(valid_library)
-{
- char const* text = R"(
- library Lib { uint constant x = 9; }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(call_to_library_function)
-{
- char const* text = R"(
- library Lib {
- function min(uint, uint) public returns (uint);
- }
- contract Test {
- function f() public {
- uint t = Lib.min(12, 7);
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(creating_contract_within_the_contract)
-{
- char const* sourceCode = R"(
- contract Test {
- function f() public { var x = new Test(); }
- }
- )";
- CHECK_ERROR(sourceCode, TypeError, "Circular reference for contract creation (cannot create instance of derived or same contract).");
-}
-
-BOOST_AUTO_TEST_CASE(array_out_of_bound_access)
-{
- char const* text = R"(
- contract c {
- uint[2] dataArray;
- function set5th() public returns (bool) {
- dataArray[5] = 2;
- return true;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Out of bounds array access.");
-}
-
-BOOST_AUTO_TEST_CASE(literal_string_to_storage_pointer)
-{
- char const* text = R"(
- contract C {
- function f() public { string x = "abc"; }
- }
- )";
- CHECK_ERROR(text, TypeError, "Type literal_string \"abc\" is not implicitly convertible to expected type string storage pointer.");
-}
-
-BOOST_AUTO_TEST_CASE(non_initialized_references)
-{
- char const* text = R"(
- contract C {
- struct s {
- uint a;
- }
- function f() public {
- s storage x;
- x.a = 2;
- }
- }
- )";
-
- CHECK_WARNING(text, "Uninitialized storage pointer");
-}
-
-BOOST_AUTO_TEST_CASE(non_initialized_references_050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- struct s {
- uint a;
- }
- function f() public {
- s storage x;
- }
- }
- )";
-
- CHECK_ERROR(text, DeclarationError, "Uninitialized storage pointer");
-}
-
-BOOST_AUTO_TEST_CASE(keccak256_with_large_integer_constant)
-{
- char const* text = R"(
- contract C {
- function f() public { keccak256(2**500); }
- }
- )";
- CHECK_ERROR(text, TypeError, "Invalid rational number (too large or division by zero).");
-}
-
-BOOST_AUTO_TEST_CASE(cyclic_binary_dependency)
-{
- char const* text = R"(
- contract A { function f() public { new B(); } }
- contract B { function f() public { new C(); } }
- contract C { function f() public { new A(); } }
- )";
- CHECK_ERROR(text, TypeError, "Circular reference for contract creation (cannot create instance of derived or same contract).");
-}
-
-BOOST_AUTO_TEST_CASE(cyclic_binary_dependency_via_inheritance)
-{
- char const* text = R"(
- contract A is B { }
- contract B { function f() public { new C(); } }
- contract C { function f() public { new A(); } }
- )";
- CHECK_ERROR(text, TypeError, "Definition of base has to precede definition of derived contract");
-}
-
-BOOST_AUTO_TEST_CASE(multi_variable_declaration_fail)
-{
- char const* text = R"(
- contract C { function f() public { var (x,y); x = 1; y = 1;} }
- )";
- CHECK_ERROR(text, TypeError, "Assignment necessary for type detection.");
-}
-
-BOOST_AUTO_TEST_CASE(multi_variable_declaration_wildcards_fine)
-{
- char const* text = R"(
- contract C {
- function three() public returns (uint, uint, uint);
- function two() public returns (uint, uint);
- function none();
- function f() public {
- var (a,) = three();
- var (b,c,) = two();
- var (,d) = three();
- var (,e,g) = two();
- var (,,) = three();
- var () = none();
- a;b;c;d;e;g;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(multi_variable_declaration_wildcards_fail_1)
-{
- char const* text = R"(
- contract C {
- function one() public returns (uint);
- function f() public { var (a, b, ) = one(); }
- }
- )";
- CHECK_ERROR(text, TypeError, "Not enough components (1) in value to assign all variables (2).");
-}
-BOOST_AUTO_TEST_CASE(multi_variable_declaration_wildcards_fail_2)
-{
- char const* text = R"(
- contract C {
- function one() public returns (uint);
- function f() public { var (a, , ) = one(); }
- }
- )";
- CHECK_ERROR(text, TypeError, "Not enough components (1) in value to assign all variables (2).");
-}
-
-BOOST_AUTO_TEST_CASE(multi_variable_declaration_wildcards_fail_3)
-{
- char const* text = R"(
- contract C {
- function one() public returns (uint);
- function f() public { var (, , a) = one(); }
- }
- )";
- CHECK_ERROR(text, TypeError, "Not enough components (1) in value to assign all variables (2).");
-}
-
-BOOST_AUTO_TEST_CASE(multi_variable_declaration_wildcards_fail_4)
-{
- char const* text = R"(
- contract C {
- function one() public returns (uint);
- function f() public { var (, a, b) = one(); }
- }
- )";
- CHECK_ERROR(text, TypeError, "Not enough components (1) in value to assign all variables (2).");
-}
-
-BOOST_AUTO_TEST_CASE(tuples)
-{
- char const* text = R"(
- contract C {
- function f() public {
- uint a = (1);
- var (b,) = (uint8(1),);
- var (c,d) = (uint32(1), 2 + a);
- var (e,) = (uint64(1), 2, b);
- a;b;c;d;e;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(tuples_empty_components)
-{
- char const* text = R"(
- contract C {
- function f() public {
- (1,,2);
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Tuple component cannot be empty.");
-}
-
-BOOST_AUTO_TEST_CASE(multi_variable_declaration_wildcards_fail_5)
-{
- char const* text = R"(
- contract C {
- function one() public returns (uint);
- function f() public { var (,) = one(); }
- }
- )";
- CHECK_ERROR(text, TypeError, "Wildcard both at beginning and end of variable declaration list is only allowed if the number of components is equal.");
-}
-
-BOOST_AUTO_TEST_CASE(multi_variable_declaration_wildcards_fail_6)
-{
- char const* text = R"(
- contract C {
- function two() public returns (uint, uint);
- function f() public { var (a, b, c) = two(); }
- }
- )";
- CHECK_ERROR(text, TypeError, "Not enough components (2) in value to assign all variables (3)");
-}
-
-BOOST_AUTO_TEST_CASE(tuple_assignment_from_void_function)
-{
- char const* text = R"(
- contract C {
- function f() public { }
- function g() public {
- var (x,) = (f(), f());
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Cannot declare variable with void (empty tuple) type.");
-}
-
-BOOST_AUTO_TEST_CASE(tuple_compound_assignment)
-{
- char const* text = R"(
- contract C {
- function f() public returns (uint a, uint b) {
- (a, b) += (1, 1);
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Compound assignment is not allowed for tuple types.");
-}
-
-BOOST_AUTO_TEST_CASE(member_access_parser_ambiguity)
-{
- char const* text = R"(
- contract C {
- struct R { uint[10][10] y; }
- struct S { uint a; uint b; uint[20][20][20] c; R d; }
- S data;
- function f() public {
- C.S x = data;
- C.S memory y;
- C.S[10] memory z;
- C.S[10];
- y.a = 2;
- x.c[1][2][3] = 9;
- x.d.y[2][2] = 3;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(using_for_library)
-{
- char const* text = R"(
- library D { }
- contract C {
- using D for uint;
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(using_for_not_library)
-{
- char const* text = R"(
- contract D { }
- contract C {
- using D for uint;
- }
- )";
- CHECK_ERROR(text, TypeError, "Library name expected.");
-}
-
-BOOST_AUTO_TEST_CASE(using_for_function_exists)
-{
- char const* text = R"(
- library D { function double(uint self) public returns (uint) { return 2*self; } }
- contract C {
- using D for uint;
- function f(uint a) public {
- a.double;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(using_for_function_on_int)
-{
- char const* text = R"(
- library D { function double(uint self) public returns (uint) { return 2*self; } }
- contract C {
- using D for uint;
- function f(uint a) public returns (uint) {
- return a.double();
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(using_for_function_on_struct)
-{
- char const* text = R"(
- library D { struct s { uint a; } function mul(s storage self, uint x) public returns (uint) { return self.a *= x; } }
- contract C {
- using D for D.s;
- D.s x;
- function f(uint a) public returns (uint) {
- return x.mul(a);
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(using_for_overload)
-{
- char const* text = R"(
- library D {
- struct s { uint a; }
- function mul(s storage self, uint x) public returns (uint) { return self.a *= x; }
- function mul(s storage, bytes32) public returns (bytes32) { }
- }
- contract C {
- using D for D.s;
- D.s x;
- function f(uint a) public returns (uint) {
- return x.mul(a);
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(using_for_by_name)
-{
- char const* text = R"(
- library D { struct s { uint a; } function mul(s storage self, uint x) public returns (uint) { return self.a *= x; } }
- contract C {
- using D for D.s;
- D.s x;
- function f(uint a) public returns (uint) {
- return x.mul({x: a});
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(using_for_mismatch)
-{
- char const* text = R"(
- library D { function double(bytes32 self) public returns (uint) { return 2; } }
- contract C {
- using D for uint;
- function f(uint a) public returns (uint) {
- return a.double();
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"double\" not found or not visible after argument-dependent lookup in uint256");
-}
-
-BOOST_AUTO_TEST_CASE(using_for_not_used)
-{
- char const* text = R"(
- library D { function double(uint self) public returns (uint) { return 2; } }
- contract C {
- using D for uint;
- function f(uint16 a) public returns (uint) {
- // This is an error because the function is only bound to uint.
- // Had it been bound to *, it would have worked.
- return a.double();
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"double\" not found or not visible after argument-dependent lookup in uint16");
-}
-
-BOOST_AUTO_TEST_CASE(library_memory_struct)
-{
- char const* text = R"(
- pragma experimental ABIEncoderV2;
- library c {
- struct S { uint x; }
- function f() public returns (S ) {}
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(using_for_arbitrary_mismatch)
-{
- char const* text = R"(
- library D { function double(bytes32 self) public returns (uint) { return 2; } }
- contract C {
- using D for *;
- function f(uint a) public returns (uint) {
- // Bound to a, but self type does not match.
- return a.double();
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"double\" not found or not visible after argument-dependent lookup in uint256");
-}
-
-BOOST_AUTO_TEST_CASE(bound_function_in_var)
-{
- char const* text = R"(
- library D { struct s { uint a; } function mul(s storage self, uint x) public returns (uint) { return self.a *= x; } }
- contract C {
- using D for D.s;
- D.s x;
- function f(uint a) public returns (uint) {
- var g = x.mul;
- return g({x: a});
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(create_memory_arrays)
-{
- char const* text = R"(
- library L {
- struct R { uint[10][10] y; }
- struct S { uint a; uint b; uint[20][20][20] c; R d; }
- }
- contract C {
- function f(uint size) public {
- L.S[][] memory x = new L.S[][](10);
- var y = new uint[](20);
- var z = new bytes(size);
- x;y;z;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(mapping_in_memory_array)
-{
- char const* text = R"(
- contract C {
- function f(uint size) public {
- var x = new mapping(uint => uint)[](4);
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Type cannot live outside storage.");
-}
-
-BOOST_AUTO_TEST_CASE(new_for_non_array)
-{
- char const* text = R"(
- contract C {
- function f(uint size) public {
- var x = new uint(7);
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Contract or array type expected.");
-}
-
-BOOST_AUTO_TEST_CASE(invalid_args_creating_memory_array)
-{
- char const* text = R"(
- contract C {
- function f(uint size) public {
- var x = new uint[]();
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Wrong argument count for function call: 0 arguments given but expected 1.");
-}
-
-BOOST_AUTO_TEST_CASE(invalid_args_creating_struct)
-{
- char const* text = R"(
- contract C {
- struct S { uint a; uint b; }
-
- function f() public {
- var s = S({a: 1});
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Wrong argument count for struct constructor: 1 arguments given but expected 2.");
-}
-
-BOOST_AUTO_TEST_CASE(function_overload_array_type)
-{
- char const* text = R"(
- contract M {
- function f(uint[]);
- function f(int[]);
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(inline_array_declaration_and_passing_implicit_conversion)
-{
- char const* text = R"(
- contract C {
- function f() public returns (uint) {
- uint8 x = 7;
- uint16 y = 8;
- uint32 z = 9;
- uint32[3] memory ending = [x, y, z];
- return (ending[1]);
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(inline_array_declaration_and_passing_implicit_conversion_strings)
-{
- char const* text = R"(
- contract C {
- function f() public returns (string) {
- string memory x = "Hello";
- string memory y = "World";
- string[2] memory z = [x, y];
- return (z[0]);
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(inline_array_declaration_const_int_conversion)
-{
- char const* text = R"(
- contract C {
- function f() public returns (uint) {
- uint8[4] memory z = [1,2,3,5];
- return (z[0]);
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(inline_array_declaration_const_string_conversion)
-{
- char const* text = R"(
- contract C {
- function f() public returns (string) {
- string[2] memory z = ["Hello", "World"];
- return (z[0]);
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(inline_array_declaration_no_type)
-{
- char const* text = R"(
- contract C {
- function f() public returns (uint) {
- return ([4,5,6][1]);
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(inline_array_declaration_no_type_strings)
-{
- char const* text = R"(
- contract C {
- function f() public returns (string) {
- return (["foo", "man", "choo"][1]);
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(inline_struct_declaration_arrays)
-{
- char const* text = R"(
- contract C {
- struct S {
- uint a;
- string b;
- }
- function f() {
- S[2] memory x = [S({a: 1, b: "fish"}), S({a: 2, b: "fish"})];
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(invalid_types_in_inline_array)
-{
- char const* text = R"(
- contract C {
- function f() public {
- uint[3] x = [45, 'foo', true];
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Unable to deduce common type for array elements.");
-}
-
-BOOST_AUTO_TEST_CASE(dynamic_inline_array)
-{
- char const* text = R"(
- contract C {
- function f() public {
- uint8[4][4] memory dyn = [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7]];
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(lvalues_as_inline_array)
-{
- char const* text = R"(
- contract C {
- function f() public {
- [1, 2, 3]++;
- [1, 2, 3] = [4, 5, 6];
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Inline array type cannot be declared as LValue.");
-}
-
-BOOST_AUTO_TEST_CASE(break_not_in_loop)
-{
- char const* text = R"(
- contract C {
- function f() public {
- if (true)
- break;
- }
- }
- )";
- CHECK_ERROR(text, SyntaxError, "\"break\" has to be in a \"for\" or \"while\" loop.");
-}
-
-BOOST_AUTO_TEST_CASE(continue_not_in_loop)
-{
- char const* text = R"(
- contract C {
- function f() public {
- if (true)
- continue;
- }
- }
- )";
- CHECK_ERROR(text, SyntaxError, "\"continue\" has to be in a \"for\" or \"while\" loop.");
-}
-
-BOOST_AUTO_TEST_CASE(continue_not_in_loop_2)
-{
- char const* text = R"(
- contract C {
- function f() public {
- while (true)
- {
- }
- continue;
- }
- }
- )";
- CHECK_ERROR(text, SyntaxError, "\"continue\" has to be in a \"for\" or \"while\" loop.");
-}
-
-BOOST_AUTO_TEST_CASE(invalid_different_types_for_conditional_expression)
-{
- char const* text = R"(
- contract C {
- function f() public {
- true ? true : 2;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "True expression's type bool doesn't match false expression's type uint8.");
-}
-
-BOOST_AUTO_TEST_CASE(left_value_in_conditional_expression_not_supported_yet)
-{
- char const* text = R"(
- contract C {
- function f() public {
- uint x;
- uint y;
- (true ? x : y) = 1;
- }
- }
- )";
- CHECK_ERROR_ALLOW_MULTI(text, TypeError, (std::vector<std::string>{
- "Conditional expression as left value is not supported yet.",
- "Expression has to be an lvalue"
- }));
-}
-
-BOOST_AUTO_TEST_CASE(conditional_expression_with_different_struct)
-{
- char const* text = R"(
- contract C {
- struct s1 {
- uint x;
- }
- struct s2 {
- uint x;
- }
- function f() public {
- s1 memory x;
- s2 memory y;
- true ? x : y;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "True expression's type struct C.s1 memory doesn't match false expression's type struct C.s2 memory.");
-}
-
-BOOST_AUTO_TEST_CASE(conditional_expression_with_different_function_type)
-{
- char const* text = R"(
- contract C {
- function x(bool) public {}
- function y() public {}
-
- function f() public {
- true ? x : y;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "True expression's type function (bool) doesn't match false expression's type function ().");
-}
-
-BOOST_AUTO_TEST_CASE(conditional_expression_with_different_enum)
-{
- char const* text = R"(
- contract C {
- enum small { A, B, C, D }
- enum big { A, B, C, D }
-
- function f() public {
- small x;
- big y;
-
- true ? x : y;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "True expression's type enum C.small doesn't match false expression's type enum C.big.");
-}
-
-BOOST_AUTO_TEST_CASE(conditional_expression_with_different_mapping)
-{
- char const* text = R"(
- contract C {
- mapping(uint8 => uint8) table1;
- mapping(uint32 => uint8) table2;
-
- function f() public {
- true ? table1 : table2;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "True expression's type mapping(uint8 => uint8) doesn't match false expression's type mapping(uint32 => uint8).");
-}
-
-BOOST_AUTO_TEST_CASE(conditional_with_all_types)
-{
- char const* text = R"(
- contract C {
- struct s1 {
- uint x;
- }
- s1 struct_x;
- s1 struct_y;
-
- function fun_x() public {}
- function fun_y() public {}
-
- enum small { A, B, C, D }
-
- mapping(uint8 => uint8) table1;
- mapping(uint8 => uint8) table2;
-
- function f() public {
- // integers
- uint x;
- uint y;
- uint g = true ? x : y;
- g += 1; // Avoid unused var warning
-
- // integer constants
- uint h = true ? 1 : 3;
- h += 1; // Avoid unused var warning
-
- // string literal
- var i = true ? "hello" : "world";
- i = "used"; //Avoid unused var warning
- }
- function f2() public {
- // bool
- bool j = true ? true : false;
- j = j && true; // Avoid unused var warning
-
- // real is not there yet.
-
- // array
- byte[2] memory a;
- byte[2] memory b;
- var k = true ? a : b;
- k[0] = byte(0); //Avoid unused var warning
-
- bytes memory e;
- bytes memory f;
- var l = true ? e : f;
- l[0] = byte(0); // Avoid unused var warning
-
- // fixed bytes
- bytes2 c;
- bytes2 d;
- var m = true ? c : d;
- m &= m;
-
- }
- function f3() public {
- // contract doesn't fit in here
-
- // struct
- struct_x = true ? struct_x : struct_y;
-
- // function
- var r = true ? fun_x : fun_y;
- r(); // Avoid unused var warning
- // enum
- small enum_x;
- small enum_y;
- enum_x = true ? enum_x : enum_y;
-
- // tuple
- var (n, o) = true ? (1, 2) : (3, 4);
- (n, o) = (o, n); // Avoid unused var warning
- // mapping
- var p = true ? table1 : table2;
- p[0] = 0; // Avoid unused var warning
- // typetype
- var q = true ? uint32(1) : uint32(2);
- q += 1; // Avoid unused var warning
- // modifier doesn't fit in here
-
- // magic doesn't fit in here
-
- // module doesn't fit in here
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(uint7_and_uintM_as_identifier)
-{
- char const* text = R"(
- contract test {
- string uintM = "Hello 4 you";
- function f() public {
- uint8 uint7 = 3;
- uint7 = 5;
- string memory intM;
- uint bytesM = 21;
- intM; bytesM;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(varM_disqualified_as_keyword)
-{
- char const* text = R"(
- contract test {
- function f() public {
- uintM something = 3;
- intM should = 4;
- bytesM fail = "now";
- }
- }
- )";
- CHECK_ERROR_ALLOW_MULTI(text, DeclarationError, (std::vector<std::string>{
- "Identifier not found or not unique.",
- "Identifier not found or not unique.",
- "Identifier not found or not unique."
- }));
-}
-
-BOOST_AUTO_TEST_CASE(modifier_is_not_a_valid_typename)
-{
- char const* text = R"(
- contract test {
- modifier mod() { _; }
-
- function f() public {
- mod g;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Name has to refer to a struct, enum or contract.");
-}
-
-BOOST_AUTO_TEST_CASE(modifier_is_not_a_valid_typename_is_not_fatal)
-{
- char const* text = R"(
- contract test {
- modifier mod() { _; }
-
- function f() public {
- mod g;
- g = f;
- }
- }
- )";
- CHECK_ERROR_ALLOW_MULTI(text, TypeError, (std::vector<std::string>{"Name has to refer to a struct, enum or contract."}));
-}
-
-BOOST_AUTO_TEST_CASE(function_is_not_a_valid_typename)
-{
- char const* text = R"(
- contract test {
- function foo() public {
- }
-
- function f() public {
- foo g;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Name has to refer to a struct, enum or contract.");
-}
-
-BOOST_AUTO_TEST_CASE(long_uint_variable_fails)
-{
- char const* text = R"(
- contract test {
- function f() public {
- uint99999999999999999999999999 something = 3;
- }
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Identifier not found or not unique.");
-}
-
-BOOST_AUTO_TEST_CASE(bytes10abc_is_identifier)
-{
- char const* text = R"(
- contract test {
- function f() public {
- bytes32 bytes10abc = "abc";
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(int10abc_is_identifier)
-{
- char const* text = R"(
- contract test {
- function f() public {
- uint uint10abc = 3;
- int int10abc = 4;
- uint10abc; int10abc;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(library_functions_do_not_have_value)
-{
- char const* text = R"(
- library L { function l() public {} }
- contract test {
- function f() public {
- L.l.value;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"value\" not found or not visible after argument-dependent lookup in function ()");
-}
-
-BOOST_AUTO_TEST_CASE(invalid_fixed_types_0x7_mxn)
-{
- char const* text = R"(
- contract test {
- fixed0x7 a = .3;
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Identifier not found");
-}
-
-BOOST_AUTO_TEST_CASE(invalid_fixed_types_long_invalid_identifier)
-{
- char const* text = R"(
- contract test {
- fixed99999999999999999999999999999999999999x7 b = 9.5;
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Identifier not found");
-}
-
-BOOST_AUTO_TEST_CASE(invalid_fixed_types_7x8_mxn)
-{
- char const* text = R"(
- contract test {
- fixed7x8 c = 3.12345678;
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Identifier not found");
-}
-
-BOOST_AUTO_TEST_CASE(library_instances_cannot_be_used)
-{
- char const* text = R"(
- library L { function l() public {} }
- contract test {
- function f() public {
- L x;
- x.l();
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"l\" not found or not visible after argument-dependent lookup in library L");
-}
-
-BOOST_AUTO_TEST_CASE(invalid_fixed_type_long)
-{
- char const* text = R"(
- contract test {
- function f() public {
- fixed8x888888888888888888888888888888888888888888888888888 b;
- }
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Identifier not found");
-}
-
-BOOST_AUTO_TEST_CASE(fixed_type_int_conversion)
-{
- char const* text = R"(
- contract test {
- function f() public {
- uint64 a = 3;
- int64 b = 4;
- fixed c = b;
- ufixed d = a;
- c; d;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(fixed_type_rational_int_conversion)
-{
- char const* text = R"(
- contract test {
- function f() public {
- fixed c = 3;
- ufixed d = 4;
- c; d;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(fixed_type_rational_fraction_conversion)
-{
- char const* text = R"(
- contract test {
- function f() public {
- fixed a = 4.5;
- ufixed d = 2.5;
- a; d;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(invalid_int_implicit_conversion_from_fixed)
-{
- char const* text = R"(
- contract test {
- function f() public {
- fixed a = 4.5;
- int b = a;
- a; b;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Type fixed128x18 is not implicitly convertible to expected type int256");
-}
-
-BOOST_AUTO_TEST_CASE(rational_unary_minus_operation)
-{
- char const* text = R"(
- contract test {
- function f() pure public {
- ufixed16x2 a = 3.25;
- fixed16x2 b = -3.25;
- a; b;
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(rational_unary_plus_operation)
-{
- char const* text = R"(
- contract test {
- function f() pure public {
- ufixed16x2 a = +3.25;
- fixed16x2 b = -3.25;
- a; b;
- }
- }
- )";
- CHECK_WARNING(text, "Use of unary + is deprecated");
-}
-
-BOOST_AUTO_TEST_CASE(rational_unary_plus_assignment)
-{
- char const* text = R"(
- contract test {
- function f(uint x) pure public {
- uint y = +x;
- y;
- }
- }
- )";
- CHECK_WARNING(text, "Use of unary + is deprecated");
-}
-
-BOOST_AUTO_TEST_CASE(rational_unary_plus_operation_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract test {
- function f() pure public {
- ufixed16x2 a = +3.25;
- fixed16x2 b = -3.25;
- a; b;
- }
- }
- )";
- CHECK_ERROR(text, SyntaxError, "Use of unary + is deprecated");
-}
-
-BOOST_AUTO_TEST_CASE(rational_unary_plus_assignment_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract test {
- function f(uint x) pure public {
- uint y = +x;
- y;
- }
- }
- )";
- CHECK_ERROR(text, SyntaxError, "Use of unary + is deprecated");
-}
-
-BOOST_AUTO_TEST_CASE(leading_zero_rationals_convert)
-{
- char const* text = R"(
- contract A {
- function f() pure public {
- ufixed16x2 a = 0.5;
- ufixed256x52 b = 0.0000000000000006661338147750939242541790008544921875;
- fixed16x2 c = -0.5;
- fixed256x52 d = -0.0000000000000006661338147750939242541790008544921875;
- a; b; c; d;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(fixed_type_size_capabilities)
-{
- char const* text = R"(
- contract test {
- function f() public {
- ufixed256x1 a = 123456781234567979695948382928485849359686494864095409282048094275023098123.5;
- ufixed256x77 b = 0.920890746623327805482905058466021565416131529487595827354393978494366605267637;
- ufixed224x78 c = 0.000000000001519884736399797998492268541131529487595827354393978494366605267646;
- fixed256x1 d = -123456781234567979695948382928485849359686494864095409282048094275023098123.5;
- fixed256x76 e = -0.93322335481643744342575580035176794825198893968114429702091846411734101080123;
- fixed256x79 g = -0.0001178860664374434257558003517679482519889396811442970209184641173410108012309;
- a; b; c; d; e; g;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(fixed_type_zero_handling)
-{
- char const* text = R"(
- contract test {
- function f() public {
- fixed16x2 a = 0; a;
- ufixed32x1 b = 0; b;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(fixed_type_invalid_implicit_conversion_size)
-{
- char const* text = R"(
- contract test {
- function f() public {
- ufixed a = 11/4;
- ufixed248x8 b = a; b;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Type ufixed128x18 is not implicitly convertible to expected type ufixed248x8");
-}
-
-BOOST_AUTO_TEST_CASE(fixed_type_invalid_implicit_conversion_lost_data)
-{
- char const* text = R"(
- contract test {
- function f() public {
- ufixed256x1 a = 1/3; a;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "is not implicitly convertible to expected type ufixed256x1");
-}
-
-BOOST_AUTO_TEST_CASE(fixed_type_valid_explicit_conversions)
-{
- char const* text = R"(
- contract test {
- function f() public {
- ufixed256x80 a = ufixed256x80(1/3); a;
- ufixed248x80 b = ufixed248x80(1/3); b;
- ufixed8x1 c = ufixed8x1(1/3); c;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(invalid_array_declaration_with_rational)
-{
- char const* text = R"(
- contract test {
- function f() public {
- uint[3.5] a; a;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Array with fractional length specified.");
-}
-
-BOOST_AUTO_TEST_CASE(invalid_array_declaration_with_signed_fixed_type)
-{
- char const* text = R"(
- contract test {
- function f() public {
- uint[fixed(3.5)] a; a;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Invalid array length, expected integer literal or constant expression.");
-}
-
-BOOST_AUTO_TEST_CASE(invalid_array_declaration_with_unsigned_fixed_type)
-{
- char const* text = R"(
- contract test {
- function f() public {
- uint[ufixed(3.5)] a; a;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Invalid array length, expected integer literal or constant expression.");
-}
-
-BOOST_AUTO_TEST_CASE(rational_to_bytes_implicit_conversion)
-{
- char const* text = R"(
- contract test {
- function f() public {
- bytes32 c = 3.2; c;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "is not implicitly convertible to expected type bytes32");
-}
-
-BOOST_AUTO_TEST_CASE(fixed_to_bytes_implicit_conversion)
-{
- char const* text = R"(
- contract test {
- function f() public {
- fixed a = 3.25;
- bytes32 c = a; c;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "fixed128x18 is not implicitly convertible to expected type bytes32");
-}
-
-BOOST_AUTO_TEST_CASE(mapping_with_fixed_literal)
-{
- char const* text = R"(
- contract test {
- mapping(ufixed8x1 => string) fixedString;
- function f() public {
- fixedString[0.5] = "Half";
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(fixed_points_inside_structs)
-{
- char const* text = R"(
- contract test {
- struct myStruct {
- ufixed a;
- int b;
- }
- myStruct a = myStruct(3.125, 3);
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(inline_array_fixed_types)
-{
- char const* text = R"(
- contract test {
- function f() public {
- fixed[3] memory a = [fixed(3.5), fixed(-4.25), fixed(967.125)];
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(inline_array_rationals)
-{
- char const* text = R"(
- contract test {
- function f() public {
- ufixed128x3[4] memory a = [ufixed128x3(3.5), 4.125, 2.5, 4.0];
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(rational_index_access)
-{
- char const* text = R"(
- contract test {
- function f() public {
- uint[] memory a;
- a[.5];
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "rational_const 1 / 2 is not implicitly convertible to expected type uint256");
-}
-
-BOOST_AUTO_TEST_CASE(rational_to_fixed_literal_expression)
-{
- char const* text = R"(
- contract test {
- function f() public {
- ufixed64x8 a = 3.5 * 3;
- ufixed64x8 b = 4 - 2.5;
- ufixed64x8 c = 11 / 4;
- ufixed240x5 d = 599 + 0.21875;
- ufixed256x80 e = ufixed256x80(35.245 % 12.9);
- ufixed256x80 f = ufixed256x80(1.2 % 2);
- fixed g = 2 ** -2;
- a; b; c; d; e; f; g;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(rational_as_exponent_value_signed)
-{
- char const* text = R"(
- contract test {
- function f() public {
- fixed g = 2 ** -2.2;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "not compatible with types");
-}
-
-BOOST_AUTO_TEST_CASE(rational_as_exponent_value_unsigned)
-{
- char const* text = R"(
- contract test {
- function f() public {
- ufixed b = 3 ** 2.5;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "not compatible with types");
-}
-
-BOOST_AUTO_TEST_CASE(rational_as_exponent_half)
-{
- char const* text = R"(
- contract test {
- function f() public {
- 2 ** (1/2);
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "not compatible with types");
-}
-
-BOOST_AUTO_TEST_CASE(rational_as_exponent_value_neg_quarter)
-{
- char const* text = R"(
- contract test {
- function f() public {
- 42 ** (-1/4);
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "not compatible with types");
-}
-
-BOOST_AUTO_TEST_CASE(fixed_point_casting_exponents_15)
-{
- char const* text = R"(
- contract test {
- function f() public {
- var a = 3 ** ufixed(1.5);
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "not compatible with types");
-}
-
-BOOST_AUTO_TEST_CASE(fixed_point_casting_exponents_neg)
-{
- char const* text = R"(
- contract test {
- function f() public {
- var c = 42 ** fixed(-1/4);
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "not compatible with types");
-}
-
-BOOST_AUTO_TEST_CASE(var_capable_of_holding_constant_rationals)
-{
- char const* text = R"(
- contract test {
- function f() public {
- var a = 0.12345678;
- var b = 12345678.352;
- var c = 0.00000009;
- a; b; c;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(var_and_rational_with_tuple)
-{
- char const* text = R"(
- contract test {
- function f() public {
- var (a, b) = (.5, 1/3);
- a; b;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(var_handle_divided_integers)
-{
- char const* text = R"(
- contract test {
- function f() public {
- var x = 1/3;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(rational_bitnot_unary_operation)
-{
- char const* text = R"(
- contract test {
- function f() public {
- ~fixed(3.5);
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "cannot be applied");
-}
-
-BOOST_AUTO_TEST_CASE(rational_bitor_binary_operation)
-{
- char const* text = R"(
- contract test {
- function f() public {
- fixed(1.5) | 3;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "not compatible with types");
-}
-
-BOOST_AUTO_TEST_CASE(rational_bitxor_binary_operation)
-{
- char const* text = R"(
- contract test {
- function f() public {
- fixed(1.75) ^ 3;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "not compatible with types");
-}
-
-BOOST_AUTO_TEST_CASE(rational_bitand_binary_operation)
-{
- char const* text = R"(
- contract test {
- function f() public {
- fixed(1.75) & 3;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "not compatible with types");
-}
-
-BOOST_AUTO_TEST_CASE(missing_bool_conversion)
-{
- char const* text = R"(
- contract test {
- function b(uint a) public {
- bool(a == 1);
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(integer_and_fixed_interaction)
-{
- char const* text = R"(
- contract test {
- function f() public {
- ufixed a = uint64(1) + ufixed(2);
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(one_divided_by_three_integer_conversion)
-{
- char const* text = R"(
- contract test {
- function f() public {
- uint a = 1/3;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "is not implicitly convertible to expected type uint256. Try converting to type ufixed256x77");
-}
-
-BOOST_AUTO_TEST_CASE(unused_return_value)
-{
- char const* text = R"(
- contract test {
- function g() public returns (uint) {}
- function f() public {
- g();
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(unused_return_value_send)
-{
- char const* text = R"(
- contract test {
- function f() public {
- address(0x12).send(1);
- }
- }
- )";
- CHECK_WARNING(text, "Failure condition of 'send' ignored. Consider using 'transfer' instead.");
-}
-
-BOOST_AUTO_TEST_CASE(unused_return_value_call)
-{
- char const* text = R"(
- contract test {
- function f() public {
- address(0x12).call("abc");
- }
- }
- )";
- CHECK_WARNING(text, "Return value of low-level calls not used");
-}
-
-BOOST_AUTO_TEST_CASE(unused_return_value_call_value)
-{
- char const* text = R"(
- contract test {
- function f() public {
- address(0x12).call.value(2)("abc");
- }
- }
- )";
- CHECK_WARNING(text, "Return value of low-level calls not used");
-}
-
-BOOST_AUTO_TEST_CASE(unused_return_value_callcode)
-{
- char const* text = R"(
- contract test {
- function f() public {
- address(0x12).callcode("abc");
- }
- }
- )";
- CHECK_WARNING_ALLOW_MULTI(text, (std::vector<std::string>{
- "Return value of low-level calls not used",
- "\"callcode\" has been deprecated"
- }));
-}
-
-BOOST_AUTO_TEST_CASE(unused_return_value_delegatecall)
-{
- char const* text = R"(
- contract test {
- function f() public {
- address(0x12).delegatecall("abc");
- }
- }
- )";
- CHECK_WARNING(text, "Return value of low-level calls not used");
-}
-
-BOOST_AUTO_TEST_CASE(callcode_deprecated)
-{
- char const* text = R"(
- contract test {
- function f() pure public {
- address(0x12).callcode;
- }
- }
- )";
- CHECK_WARNING(text, "\"callcode\" has been deprecated in favour of \"delegatecall\"");
-}
-
-BOOST_AUTO_TEST_CASE(callcode_deprecated_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract test {
- function f() pure public {
- address(0x12).callcode;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "\"callcode\" has been deprecated in favour of \"delegatecall\"");
-}
-
-BOOST_AUTO_TEST_CASE(callcode_not_deprecated_as_function)
-{
- char const* text = R"(
- contract test {
- function callcode() pure public {
- test.callcode();
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(payable_in_library)
-{
- char const* text = R"(
- library test {
- function f() payable public {}
- }
- )";
- CHECK_ERROR(text, TypeError, "Library functions cannot be payable.");
-}
-
-BOOST_AUTO_TEST_CASE(payable_external)
-{
- char const* text = R"(
- contract test {
- function f() payable external {}
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(payable_internal)
-{
- char const* text = R"(
- contract test {
- function f() payable internal {}
- }
- )";
- CHECK_ERROR(text, TypeError, "Internal functions cannot be payable.");
-}
-
-BOOST_AUTO_TEST_CASE(payable_private)
-{
- char const* text = R"(
- contract test {
- function f() payable private {}
- }
- )";
- CHECK_ERROR(text, TypeError, "Internal functions cannot be payable.");
-}
-
-BOOST_AUTO_TEST_CASE(illegal_override_payable)
-{
- char const* text = R"(
- contract B { function f() payable public {} }
- contract C is B { function f() public {} }
- )";
- CHECK_ERROR(text, TypeError, "Overriding function changes state mutability from \"payable\" to \"nonpayable\".");
-}
-
-BOOST_AUTO_TEST_CASE(illegal_override_payable_nonpayable)
-{
- char const* text = R"(
- contract B { function f() public {} }
- contract C is B { function f() payable public {} }
- )";
- CHECK_ERROR(text, TypeError, "Overriding function changes state mutability from \"nonpayable\" to \"payable\".");
-}
-
-BOOST_AUTO_TEST_CASE(function_variable_mixin)
-{
- char const* text = R"(
- // bug #1798 (cpp-ethereum), related to #1286 (solidity)
- contract attribute {
- bool ok = false;
- }
- contract func {
- function ok() public returns (bool) { return true; }
- }
- contract attr_func is attribute, func {
- function checkOk() public returns (bool) { return ok(); }
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Identifier already declared.");
-}
-
-BOOST_AUTO_TEST_CASE(calling_payable)
-{
- char const* text = R"(
- contract receiver { function pay() payable public {} }
- contract test {
- function f() public { (new receiver()).pay.value(10)(); }
- receiver r = new receiver();
- function g() public { r.pay.value(10)(); }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(calling_nonpayable)
-{
- char const* text = R"(
- contract receiver { function nopay() public {} }
- contract test {
- function f() public { (new receiver()).nopay.value(10)(); }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"value\" not found or not visible after argument-dependent lookup in function () external - did you forget the \"payable\" modifier?");
-}
-
-BOOST_AUTO_TEST_CASE(non_payable_constructor)
+BOOST_AUTO_TEST_CASE(warn_nonpresent_pragma)
{
char const* text = R"(
- contract C {
- function C() { }
- }
- contract D {
- function f() public returns (uint) {
- (new C).value(2)();
- return 2;
- }
- }
+ contract C {}
)";
- CHECK_ERROR(text, TypeError, "Member \"value\" not found or not visible after argument-dependent lookup in function () returns (contract C) - did you forget the \"payable\" modifier?");
-}
-
-BOOST_AUTO_TEST_CASE(warn_nonpresent_pragma)
-{
- char const* text = "contract C {}";
auto sourceAndError = parseAnalyseAndReturnError(text, true, false);
BOOST_REQUIRE(!sourceAndError.second.empty());
BOOST_REQUIRE(!!sourceAndError.first);
@@ -4826,1389 +387,6 @@ BOOST_AUTO_TEST_CASE(unsatisfied_version)
BOOST_CHECK(searchErrorMessage(*sourceAndError.second.front(), "Source file requires different compiler version"));
}
-BOOST_AUTO_TEST_CASE(invalid_array_as_statement)
-{
- char const* text = R"(
- contract test {
- struct S { uint x; }
- function test(uint k) public { S[k]; }
- }
- )";
- CHECK_ERROR(text, TypeError, "Integer constant expected.");
-}
-
-BOOST_AUTO_TEST_CASE(using_directive_for_missing_selftype)
-{
- char const* text = R"(
- library B {
- function b() public {}
- }
-
- contract A {
- using B for bytes;
-
- function a() public {
- bytes memory x;
- x.b();
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"b\" not found or not visible after argument-dependent lookup in bytes memory");
-}
-
-BOOST_AUTO_TEST_CASE(shift_constant_left_negative_rvalue)
-{
- char const* text = R"(
- contract C {
- uint public a = 0x42 << -8;
- }
- )";
- CHECK_ERROR(text, TypeError, "Operator << not compatible with types int_const 66 and int_const -8");
-}
-
-BOOST_AUTO_TEST_CASE(shift_constant_right_negative_rvalue)
-{
- char const* text = R"(
- contract C {
- uint public a = 0x42 >> -8;
- }
- )";
- CHECK_ERROR(text, TypeError, "Operator >> not compatible with types int_const 66 and int_const -8");
-}
-
-BOOST_AUTO_TEST_CASE(shift_constant_left_excessive_rvalue)
-{
- char const* text = R"(
- contract C {
- uint public a = 0x42 << 0x100000000;
- }
- )";
- CHECK_ERROR(text, TypeError, "Operator << not compatible with types int_const 66 and int_const 4294967296");
-}
-
-BOOST_AUTO_TEST_CASE(shift_constant_right_excessive_rvalue)
-{
- char const* text = R"(
- contract C {
- uint public a = 0x42 >> 0x100000000;
- }
- )";
- CHECK_ERROR(text, TypeError, "Operator >> not compatible with types int_const 66 and int_const 4294967296");
-}
-
-BOOST_AUTO_TEST_CASE(shift_constant_right_fractional)
-{
- char const* text = R"(
- contract C {
- uint public a = 0x42 >> (1 / 2);
- }
- )";
- CHECK_ERROR(text, TypeError, "Operator >> not compatible with types int_const 66 and rational_const 1 / 2");
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_unbalanced_positive_stack)
-{
- char const* text = R"(
- contract test {
- function f() public {
- assembly {
- 1
- }
- }
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Unbalanced stack at the end of a block: 1 surplus item(s).");
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_unbalanced_negative_stack)
-{
- char const* text = R"(
- contract test {
- function f() public {
- assembly {
- pop
- }
- }
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Unbalanced stack at the end of a block: 1 missing item(s).");
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_unbalanced_two_stack_load)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract c {
- uint8 x;
- function f() public {
- assembly { pop(x) }
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Only local variables are supported. To access storage variables,");
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_in_modifier)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract test {
- modifier m {
- uint a = 1;
- assembly {
- a := 2
- }
- _;
- }
- function f() public m {
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_storage)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract test {
- uint x = 1;
- function f() public {
- assembly {
- x := 2
- }
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Only local variables are supported. To access storage variables,");
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_storage_in_modifiers)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract test {
- uint x = 1;
- modifier m {
- assembly {
- x := 2
- }
- _;
- }
- function f() public m {
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Only local variables are supported. To access storage variables,");
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_constant_assign)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract test {
- uint constant x = 1;
- function f() public {
- assembly {
- x := 2
- }
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Constant variables not supported by inline assembly");
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_constant_access)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract test {
- uint constant x = 1;
- function f() public {
- assembly {
- let y := x
- }
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Constant variables not supported by inline assembly");
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_local_variable_access_out_of_functions)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract test {
- function f() public {
- uint a;
- assembly {
- function g() -> x { x := a }
- }
- }
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Cannot access local Solidity variables from inside an inline assembly function.");
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_local_variable_access_out_of_functions_storage_ptr)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract test {
- uint[] r;
- function f() public {
- uint[] storage a = r;
- assembly {
- function g() -> x { x := a_offset }
- }
- }
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Cannot access local Solidity variables from inside an inline assembly function.");
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_storage_variable_access_out_of_functions)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract test {
- uint a;
- function f() pure public {
- assembly {
- function g() -> x { x := a_slot }
- }
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_constant_variable_via_offset)
-{
- char const* text = R"(
- contract test {
- uint constant x = 2;
- function f() pure public {
- assembly {
- let r := x_offset
- }
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Constant variables not supported by inline assembly.");
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_calldata_variables)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f(bytes bytesAsCalldata) external {
- assembly {
- let x := bytesAsCalldata
- }
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Call data elements cannot be accessed directly.");
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_050_literals_on_stack)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f() pure public {
- assembly {
- 1
- }
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (std::vector<std::pair<Error::Type, std::string>>{
- {Error::Type::SyntaxError, "are not supposed to return"},
- {Error::Type::DeclarationError, "Unbalanced stack"},
- }));
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_literals_on_stack)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- assembly {
- 1
- }
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (std::vector<std::pair<Error::Type, std::string>>{
- {Error::Type::Warning, "are not supposed to return"},
- {Error::Type::DeclarationError, "Unbalanced stack"},
- }));
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_050_bare_instructions)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f() view public {
- assembly {
- address
- pop
- }
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (std::vector<std::pair<Error::Type, std::string>>{
- {Error::Type::SyntaxError, "The use of non-functional"},
- {Error::Type::SyntaxError, "The use of non-functional"}
- }));
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_bare_instructions)
-{
- char const* text = R"(
- contract C {
- function f() view public {
- assembly {
- address
- pop
- }
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (std::vector<std::pair<Error::Type, std::string>>{
- {Error::Type::Warning, "The use of non-functional"},
- {Error::Type::Warning, "The use of non-functional"}
- }));
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_050_labels)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f() pure public {
- assembly {
- label:
- }
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (std::vector<std::pair<Error::Type, std::string>>{
- {Error::Type::SyntaxError, "Jump instructions and labels are low-level"},
- {Error::Type::SyntaxError, "The use of labels is deprecated"}
- }));
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_labels)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- assembly {
- label:
- }
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (std::vector<std::pair<Error::Type, std::string>>{
- {Error::Type::Warning, "Jump instructions and labels are low-level"},
- {Error::Type::Warning, "The use of labels is deprecated"}
- }));
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_050_jump)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f() pure public {
- assembly {
- jump(2)
- }
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (std::vector<std::pair<Error::Type, std::string>>{
- {Error::Type::SyntaxError, "Jump instructions and labels are low-level"}
- }));
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_jump)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- assembly {
- jump(2)
- }
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (std::vector<std::pair<Error::Type, std::string>>{
- {Error::Type::TypeError, "Function declared as pure"},
- {Error::Type::Warning, "Jump instructions and labels are low-level"}
- }));
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_050_leave_items_on_stack)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f() pure public {
- assembly {
- mload(0)
- }
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (std::vector<std::pair<Error::Type, std::string>>{
- {Error::Type::SyntaxError, "are not supposed to return"},
- {Error::Type::DeclarationError, "Unbalanced stack"},
- }));
-}
-
-BOOST_AUTO_TEST_CASE(inline_assembly_leave_items_on_stack)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- assembly {
- mload(0)
- }
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (std::vector<std::pair<Error::Type, std::string>>{
- {Error::Type::Warning, "are not supposed to return"},
- {Error::Type::DeclarationError, "Unbalanced stack"},
- }));
-}
-
-BOOST_AUTO_TEST_CASE(invalid_mobile_type)
-{
- char const* text = R"(
- contract C {
- function f() public {
- // Invalid number
- [1, 78901234567890123456789012345678901234567890123456789345678901234567890012345678012345678901234567];
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Invalid rational number.");
-}
-
-BOOST_AUTO_TEST_CASE(warns_msg_value_in_non_payable_public_function)
-{
- char const* text = R"(
- contract C {
- function f() view public {
- msg.value;
- }
- }
- )";
- CHECK_WARNING(text, "\"msg.value\" used in non-payable function. Do you want to add the \"payable\" modifier to this function?");
-}
-
-BOOST_AUTO_TEST_CASE(does_not_warn_msg_value_in_payable_function)
-{
- char const* text = R"(
- contract C {
- function f() payable public {
- msg.value;
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(does_not_warn_msg_value_in_internal_function)
-{
- char const* text = R"(
- contract C {
- function f() view internal {
- msg.value;
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(does_not_warn_msg_value_in_library)
-{
- char const* text = R"(
- library C {
- function f() view public {
- msg.value;
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(does_not_warn_msg_value_in_modifier_following_non_payable_public_function)
-{
- char const* text = R"(
- contract c {
- function f() pure public { }
- modifier m() { msg.value; _; }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(assignment_to_constant)
-{
- char const* text = R"(
- contract c {
- uint constant a = 1;
- function f() public { a = 2; }
- }
- )";
- CHECK_ERROR(text, TypeError, "Cannot assign to a constant variable.");
-}
-
-BOOST_AUTO_TEST_CASE(return_structs)
-{
- char const* text = R"(
- pragma experimental ABIEncoderV2;
- contract C {
- struct S { uint a; T[] sub; }
- struct T { uint[] x; }
- function f() returns (uint, S) {
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(read_returned_struct)
-{
- char const* text = R"(
- pragma experimental ABIEncoderV2;
- contract A {
- struct T {
- int x;
- int y;
- }
- function g() public returns (T) {
- return this.g();
- }
- }
- )";
- CHECK_WARNING(text, "Experimental features");
-}
-BOOST_AUTO_TEST_CASE(address_checksum_type_deduction)
-{
- char const* text = R"(
- contract C {
- function f() public {
- var x = 0xfA0bFc97E48458494Ccd857e1A85DC91F7F0046E;
- x.send(2);
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(invalid_address_checksum)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- address x = 0xFA0bFc97E48458494Ccd857e1A85DC91F7F0046E;
- x;
- }
- }
- )";
- CHECK_WARNING(text, "This looks like an address but has an invalid checksum.");
-}
-
-BOOST_AUTO_TEST_CASE(invalid_address_no_checksum)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- address x = 0xfa0bfc97e48458494ccd857e1a85dc91f7f0046e;
- x;
- }
- }
- )";
- CHECK_WARNING(text, "This looks like an address but has an invalid checksum.");
-}
-
-BOOST_AUTO_TEST_CASE(invalid_address_length_short)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- address x = 0xA0bFc97E48458494Ccd857e1A85DC91F7F0046E;
- x;
- }
- }
- )";
- CHECK_WARNING(text, "This looks like an address but has an invalid checksum.");
-}
-
-BOOST_AUTO_TEST_CASE(invalid_address_length_long)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- address x = 0xFA0bFc97E48458494Ccd857e1A85DC91F7F0046E0;
- x;
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (std::vector<std::pair<Error::Type, std::string>>{
- {Error::Type::Warning, "This looks like an address but has an invalid checksum."},
- {Error::Type::TypeError, "not implicitly convertible"}
- }));
-}
-
-BOOST_AUTO_TEST_CASE(string_literal_not_convertible_to_address_as_assignment)
-{
- char const* text = R"(
- // A previous implementation claimed the string would be an address
- contract AddrString {
- address public test = "0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c";
- }
- )";
- CHECK_ERROR(text, TypeError, "is not implicitly convertible to expected type address");
-}
-
-BOOST_AUTO_TEST_CASE(string_literal_not_convertible_to_address_as_return_value)
-{
- char const* text = R"(
- // A previous implementation claimed the string would be an address
- contract AddrString {
- function f() public returns (address) {
- return "0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c";
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "is not implicitly convertible to expected type");
-}
-
-BOOST_AUTO_TEST_CASE(early_exit_on_fatal_errors)
-{
- char const* text = R"(
- // This tests a crash that occured because we did not stop for fatal errors.
- contract C {
- struct S {
- ftring a;
- }
- S public s;
- function s() s {
- }
- }
- )";
- CHECK_ERROR(text, DeclarationError, "Identifier not found or not unique");
-}
-
-BOOST_AUTO_TEST_CASE(address_methods)
-{
- char const* text = R"(
- contract C {
- function f() public {
- address addr;
- uint balance = addr.balance;
- bool callRet = addr.call();
- bool callcodeRet = addr.callcode();
- bool delegatecallRet = addr.delegatecall();
- bool sendRet = addr.send(1);
- addr.transfer(1);
- callRet; callcodeRet; delegatecallRet; sendRet;
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(interface)
-{
- char const* text = R"(
- interface I {
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(interface_functions)
-{
- char const* text = R"(
- interface I {
- function();
- function f();
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(interface_function_bodies)
-{
- char const* text = R"(
- interface I {
- function f() public {
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Functions in interfaces cannot have an implementation");
-}
-
-BOOST_AUTO_TEST_CASE(interface_events)
-{
- char const* text = R"(
- interface I {
- event E();
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(interface_inheritance)
-{
- char const* text = R"(
- interface A {
- }
- interface I is A {
- }
- )";
- CHECK_ERROR(text, TypeError, "Interfaces cannot inherit");
-}
-
-
-BOOST_AUTO_TEST_CASE(interface_structs)
-{
- char const* text = R"(
- interface I {
- struct A {
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Structs cannot be defined in interfaces");
-}
-
-BOOST_AUTO_TEST_CASE(interface_variables)
-{
- char const* text = R"(
- interface I {
- uint a;
- }
- )";
- CHECK_ERROR(text, TypeError, "Variables cannot be declared in interfaces");
-}
-
-BOOST_AUTO_TEST_CASE(interface_function_parameters)
-{
- char const* text = R"(
- interface I {
- function f(uint a) public returns (bool);
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(interface_enums)
-{
- char const* text = R"(
- interface I {
- enum A { B, C }
- }
- )";
- CHECK_ERROR(text, TypeError, "Enumerable cannot be declared in interfaces");
-}
-
-BOOST_AUTO_TEST_CASE(using_interface)
-{
- char const* text = R"(
- interface I {
- function f();
- }
- contract C is I {
- function f() public {
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(using_interface_complex)
-{
- char const* text = R"(
- interface I {
- event A();
- function f();
- function g();
- function();
- }
- contract C is I {
- function f() public {
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(interface_implement_public_contract)
-{
- char const* text = R"(
- interface I {
- function f() external;
- }
- contract C is I {
- function f() public {
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(throw_is_deprecated)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- throw;
- }
- }
- )";
- CHECK_WARNING(text, "\"throw\" is deprecated in favour of \"revert()\", \"require()\" and \"assert()\"");
-}
-
-BOOST_AUTO_TEST_CASE(throw_is_deprecated_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f() pure public {
- throw;
- }
- }
- )";
- CHECK_ERROR(text, SyntaxError, "\"throw\" is deprecated in favour of \"revert()\", \"require()\" and \"assert()\"");
-}
-
-BOOST_AUTO_TEST_CASE(bare_revert)
-{
- char const* text = R"(
- contract C {
- function f(uint x) pure public {
- if (x > 7)
- revert;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "No matching declaration found");
-}
-
-BOOST_AUTO_TEST_CASE(revert_with_reason)
-{
- char const* text = R"(
- contract C {
- function f(uint x) pure public {
- if (x > 7)
- revert("abc");
- else
- revert();
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(bare_selfdestruct)
-{
- char const* text = R"(
- contract C {
- function f() pure public { selfdestruct; }
- }
- )";
- CHECK_WARNING(text, "Statement has no effect.");
-}
-
-BOOST_AUTO_TEST_CASE(bare_assert)
-{
- char const* text = R"(
- contract C {
- function f() pure public { assert; }
- }
- )";
- CHECK_WARNING(text, "Statement has no effect.");
-}
-
-BOOST_AUTO_TEST_CASE(bare_require)
-{
- char const* text = R"(
- contract C {
- // This is different because it does have overloads.
- function f() pure public { require; }
- }
- )";
- CHECK_ERROR(text, TypeError, "No matching declaration found after variable lookup.");
-}
-
-BOOST_AUTO_TEST_CASE(pure_statement_in_for_loop)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- for (uint x = 0; x < 10; true)
- x++;
- }
- }
- )";
- CHECK_WARNING(text, "Statement has no effect.");
-}
-
-BOOST_AUTO_TEST_CASE(pure_statement_check_for_regular_for_loop)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- for (uint x = 0; true; x++)
- {}
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(warn_unused_local)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- uint a;
- }
- }
- )";
- CHECK_WARNING(text, "Unused local variable.");
-}
-
-BOOST_AUTO_TEST_CASE(warn_unused_local_assigned)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- uint a = 1;
- }
- }
- )";
- CHECK_WARNING(text, "Unused local variable.");
-}
-
-BOOST_AUTO_TEST_CASE(warn_unused_function_parameter)
-{
- char const* text = R"(
- contract C {
- function f(uint a) pure public {
- }
- }
- )";
- CHECK_WARNING(text, "Unused function parameter. Remove or comment out the variable name to silence this warning.");
-}
-
-BOOST_AUTO_TEST_CASE(unused_unnamed_function_parameter)
-{
- char const* text = R"(
- contract C {
- function f(uint) pure public {
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(warn_unused_return_parameter)
-{
- char const* text = R"(
- contract C {
- function f() pure public returns (uint a) {
- }
- }
- )";
- CHECK_WARNING(text, "Unused function parameter. Remove or comment out the variable name to silence this warning.");
-}
-
-BOOST_AUTO_TEST_CASE(warn_unused_return_parameter_with_explicit_return)
-{
- char const* text = R"(
- contract C {
- function f() pure public returns (uint a) {
- return;
- }
- }
- )";
- CHECK_WARNING(text, "Unused function parameter. Remove or comment out the variable name to silence this warning.");
-}
-
-BOOST_AUTO_TEST_CASE(unused_unnamed_return_parameter)
-{
- char const* text = R"(
- contract C {
- function f() pure public returns (uint) {
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(named_return_parameter)
-{
- char const* text = R"(
- contract C {
- function f() pure public returns (uint a) {
- a = 1;
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(named_return_parameter_with_explicit_return)
-{
- char const* text = R"(
- contract C {
- function f() pure public returns (uint a) {
- return 1;
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(unnamed_return_parameter_with_explicit_return)
-{
- char const* text = R"(
- contract C {
- function f() pure public returns (uint) {
- return 1;
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(no_unused_warning_interface_arguments)
-{
- char const* text = R"(
- interface I {
- function f(uint a) pure external returns (uint b);
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(no_unused_warning_abstract_arguments)
-{
- char const* text = R"(
- contract C {
- function f(uint a) pure public returns (uint b);
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(no_unused_warnings)
-{
- char const* text = R"(
- contract C {
- function f(uint a) pure public returns (uint b) {
- uint c = 1;
- b = a + c;
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(no_unused_dec_after_use)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- a = 7;
- uint a;
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(no_unused_inline_asm)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- uint a;
- assembly {
- a := 1
- }
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(shadowing_builtins_with_functions)
-{
- char const* text = R"(
- contract C {
- function keccak256() pure public {}
- }
- )";
- CHECK_WARNING(text, "shadows a builtin symbol");
-}
-
-BOOST_AUTO_TEST_CASE(shadowing_builtins_with_variables)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- uint msg;
- msg;
- }
- }
- )";
- CHECK_WARNING(text, "shadows a builtin symbol");
-}
-
-BOOST_AUTO_TEST_CASE(shadowing_builtins_with_storage_variables)
-{
- char const* text = R"(
- contract C {
- uint msg;
- }
- )";
- CHECK_WARNING(text, "shadows a builtin symbol");
-}
-
-BOOST_AUTO_TEST_CASE(shadowing_builtin_at_global_scope)
-{
- char const* text = R"(
- contract msg {
- }
- )";
- CHECK_WARNING(text, "shadows a builtin symbol");
-}
-
-BOOST_AUTO_TEST_CASE(shadowing_builtins_with_parameters)
-{
- char const* text = R"(
- contract C {
- function f(uint require) pure public {
- require = 2;
- }
- }
- )";
- CHECK_WARNING(text, "shadows a builtin symbol");
-}
-
-BOOST_AUTO_TEST_CASE(shadowing_builtins_with_return_parameters)
-{
- char const* text = R"(
- contract C {
- function f() pure public returns (uint require) {
- require = 2;
- }
- }
- )";
- CHECK_WARNING(text, "shadows a builtin symbol");
-}
-
-BOOST_AUTO_TEST_CASE(shadowing_builtins_with_events)
-{
- char const* text = R"(
- contract C {
- event keccak256();
- }
- )";
- CHECK_WARNING(text, "shadows a builtin symbol");
-}
-
-BOOST_AUTO_TEST_CASE(shadowing_builtins_ignores_struct)
-{
- char const* text = R"(
- contract C {
- struct a {
- uint msg;
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(shadowing_builtins_ignores_constructor)
-{
- char const* text = R"(
- contract C {
- constructor() public {}
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(function_overload_is_not_shadowing)
-{
- char const* text = R"(
- contract C {
- function f() pure public {}
- function f(uint) pure public {}
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(function_override_is_not_shadowing)
-{
- char const* text = R"(
- contract D { function f() pure public {} }
- contract C is D {
- function f(uint) pure public {}
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(event_parameter_cannot_shadow_state_variable)
-{
- char const* text = R"(
- contract C {
- address a;
- event E(address a);
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(callable_crash)
-{
- char const* text = R"(
- contract C {
- struct S { uint a; bool x; }
- S public s;
- function C() public {
- 3({a: 1, x: true});
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Type is not callable");
-}
-
-BOOST_AUTO_TEST_CASE(error_transfer_non_payable_fallback)
-{
- char const* text = R"(
- // This used to be a test for a.transfer to generate a warning
- // because A's fallback function is not payable.
-
- contract A {
- function() public {}
- }
-
- contract B {
- A a;
-
- function() public {
- a.transfer(100);
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (std::vector<std::pair<Error::Type, std::string>>{
- {Error::Type::Warning, "Using contract member \"transfer\" inherited from the address type is deprecated"},
- {Error::Type::TypeError, "Value transfer to a contract without a payable fallback function"}
- }));
-}
-
-BOOST_AUTO_TEST_CASE(error_transfer_no_fallback)
-{
- char const* text = R"(
- // This used to be a test for a.transfer to generate a warning
- // because A does not have a payable fallback function.
-
- contract A {}
-
- contract B {
- A a;
-
- function() public {
- a.transfer(100);
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (std::vector<std::pair<Error::Type, std::string>>{
- {Error::Type::Warning, "Using contract member \"transfer\" inherited from the address type is deprecated"},
- {Error::Type::TypeError, "Value transfer to a contract without a payable fallback function"}
- }));
-}
-
-BOOST_AUTO_TEST_CASE(error_send_non_payable_fallback)
-{
- char const* text = R"(
- // This used to be a test for a.send to generate a warning
- // because A does not have a payable fallback function.
-
- contract A {
- function() public {}
- }
-
- contract B {
- A a;
-
- function() public {
- require(a.send(100));
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (std::vector<std::pair<Error::Type, std::string>>{
- {Error::Type::Warning, "Using contract member \"send\" inherited from the address type is deprecated"},
- {Error::Type::TypeError, "Value transfer to a contract without a payable fallback function"}
- }));
-}
-
-BOOST_AUTO_TEST_CASE(does_not_error_transfer_payable_fallback)
-{
- char const* text = R"(
- // This used to be a test for a.transfer to generate a warning
- // because A does not have a payable fallback function.
-
- contract A {
- function() payable public {}
- }
-
- contract B {
- A a;
-
- function() public {
- a.transfer(100);
- }
- }
- )";
- CHECK_WARNING(text, "Using contract member \"transfer\" inherited from the address type is deprecated.");
-}
-
-BOOST_AUTO_TEST_CASE(does_not_error_transfer_regular_function)
-{
- char const* text = R"(
- contract A {
- function transfer() pure public {}
- }
-
- contract B {
- A a;
-
- function() public {
- a.transfer();
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
BOOST_AUTO_TEST_CASE(returndatasize_as_variable)
{
char const* text = R"(
@@ -6229,6 +407,8 @@ BOOST_AUTO_TEST_CASE(create2_as_variable)
char const* text = R"(
contract c { function f() public { uint create2; assembly { create2(0, 0, 0, 0) } }}
)";
+ // This needs special treatment, because the message mentions the EVM version,
+ // so cannot be run via isoltest.
CHECK_ALLOW_MULTI(text, (std::vector<std::pair<Error::Type, std::string>>{
{Error::Type::Warning, "Variable is shadowed in inline assembly by an instruction of the same name"},
{Error::Type::Warning, "The \"create2\" instruction is not supported by the VM version"},
@@ -6237,1166 +417,6 @@ BOOST_AUTO_TEST_CASE(create2_as_variable)
}));
}
-BOOST_AUTO_TEST_CASE(specified_storage_no_warn)
-{
- char const* text = R"(
- contract C {
- struct S { uint a; string b; }
- S x;
- function f() view public {
- S storage y = x;
- y;
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(unspecified_storage_warn)
-{
- char const* text = R"(
- contract C {
- struct S { uint a; }
- S x;
- function f() view public {
- S y = x;
- y;
- }
- }
- )";
- CHECK_WARNING(text, "Variable is declared as a storage pointer. Use an explicit \"storage\" keyword to silence this warning");
-}
-
-BOOST_AUTO_TEST_CASE(unspecified_storage_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- struct S { uint a; }
- S x;
- function f() view public {
- S y = x;
- y;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Data location must be specified as either \"memory\" or \"storage\".");
-}
-
-BOOST_AUTO_TEST_CASE(storage_location_non_array_or_struct_disallowed)
-{
- char const* text = R"(
- contract C {
- function f(uint storage a) public { }
- }
- )";
- CHECK_ERROR(text, TypeError, "Data location can only be given for array or struct types.");
-}
-
-BOOST_AUTO_TEST_CASE(storage_location_non_array_or_struct_disallowed_is_not_fatal)
-{
- char const* text = R"(
- contract C {
- function f(uint storage a) public {
- a = f;
- }
- }
- )";
- CHECK_ERROR_ALLOW_MULTI(text, TypeError, (std::vector<std::string>{"Data location can only be given for array or struct types."}));
-}
-
-BOOST_AUTO_TEST_CASE(implicit_conversion_disallowed)
-{
- char const* text = R"(
- contract C {
- function f() public returns (bytes4) {
- uint32 tmp = 1;
- return tmp;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Return argument type uint32 is not implicitly convertible to expected type (type of first return variable) bytes4.");
-}
-
-BOOST_AUTO_TEST_CASE(too_large_arrays_for_calldata_external)
-{
- char const* text = R"(
- contract C {
- function f(uint[85678901234] a) pure external {
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Array is too large to be encoded.");
-}
-
-BOOST_AUTO_TEST_CASE(too_large_arrays_for_calldata_internal)
-{
- char const* text = R"(
- contract C {
- function f(uint[85678901234] a) pure internal {
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Array is too large to be encoded.");
-}
-
-BOOST_AUTO_TEST_CASE(too_large_arrays_for_calldata_public)
-{
- char const* text = R"(
- contract C {
- function f(uint[85678901234] a) pure public {
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Array is too large to be encoded.");
-}
-
-BOOST_AUTO_TEST_CASE(explicit_literal_to_memory_string_assignment)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- string memory x = "abc";
- x;
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(explicit_literal_to_storage_string_assignment)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- string storage x = "abc";
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Type literal_string \"abc\" is not implicitly convertible to expected type string storage pointer.");
-}
-
-BOOST_AUTO_TEST_CASE(explicit_literal_to_unspecified_string_assignment)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- string x = "abc";
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Type literal_string \"abc\" is not implicitly convertible to expected type string storage pointer.");
-}
-
-BOOST_AUTO_TEST_CASE(explicit_literal_to_unspecified_string)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- string("abc");
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Explicit type conversion not allowed from \"literal_string \"abc\"\" to \"string storage pointer\"");
-}
-
-BOOST_AUTO_TEST_CASE(modifiers_access_storage_pointer)
-{
- char const* text = R"(
- contract C {
- struct S { uint a; }
- modifier m(S storage x) {
- x;
- _;
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(function_types_selector_1)
-{
- char const* text = R"(
- contract C {
- function f() view returns (bytes4) {
- return f.selector;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"selector\" not found");
-}
-
-BOOST_AUTO_TEST_CASE(function_types_selector_2)
-{
- char const* text = R"(
- contract C {
- function g() pure internal {
- }
- function f() view returns (bytes4) {
- return g.selector;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"selector\" not found");
-}
-
-BOOST_AUTO_TEST_CASE(function_types_selector_3)
-{
- char const* text = R"(
- contract C {
- function f() view returns (bytes4) {
- function () g;
- return g.selector;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"selector\" not found");
-}
-
-BOOST_AUTO_TEST_CASE(function_types_selector_4)
-{
- char const* text = R"(
- contract C {
- function f() pure external returns (bytes4) {
- return this.f.selector;
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(function_types_selector_5)
-{
- char const* text = R"(
- contract C {
- function h() pure external {
- }
- function f() view external returns (bytes4) {
- var g = this.h;
- return g.selector;
- }
- }
- )";
- CHECK_WARNING(text, "Use of the \"var\" keyword is deprecated.");
-}
-
-BOOST_AUTO_TEST_CASE(function_types_selector_6)
-{
- char const* text = R"(
- contract C {
- function h() pure external {
- }
- function f() view external returns (bytes4) {
- function () pure external g = this.h;
- return g.selector;
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(function_types_selector_7)
-{
- char const* text = R"(
- contract C {
- function h() pure external {
- }
- function f() view external returns (bytes4) {
- function () pure external g = this.h;
- var i = g;
- return i.selector;
- }
- }
- )";
- CHECK_WARNING(text, "Use of the \"var\" keyword is deprecated.");
-}
-
-BOOST_AUTO_TEST_CASE(using_this_in_constructor)
-{
- char const* text = R"(
- contract C {
- constructor() public {
- this.f();
- }
- function f() pure public {
- }
- }
- )";
- CHECK_WARNING(text, "\"this\" used in constructor");
-}
-
-BOOST_AUTO_TEST_CASE(do_not_crash_on_not_lvalue)
-{
- char const* text = R"(
- // This checks for a bug that caused a crash because of continued analysis.
- contract C {
- mapping (uint => uint) m;
- function f() public {
- m(1) = 2;
- }
- }
- )";
- CHECK_ERROR_ALLOW_MULTI(text, TypeError, (std::vector<std::string>{
- "is not callable",
- "Expression has to be an lvalue",
- "Type int_const 2 is not implicitly"
- }));
-}
-
-BOOST_AUTO_TEST_CASE(builtin_keccak256_reject_gas)
-{
- char const* text = R"(
- contract C {
- function f() public {
- keccak256.gas();
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"gas\" not found or not visible after argument-dependent lookup");
-}
-
-BOOST_AUTO_TEST_CASE(builtin_sha256_reject_gas)
-{
- const char* text = R"(
- contract C {
- function f() public {
- sha256.gas();
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"gas\" not found or not visible after argument-dependent lookup");
-}
-
-BOOST_AUTO_TEST_CASE(builtin_ripemd160_reject_gas)
-{
- const char* text = R"(
- contract C {
- function f() public {
- ripemd160.gas();
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"gas\" not found or not visible after argument-dependent lookup");
-}
-
-BOOST_AUTO_TEST_CASE(builtin_ecrecover_reject_gas)
-{
- const char* text = R"(
- contract C {
- function f() public {
- ecrecover.gas();
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"gas\" not found or not visible after argument-dependent lookup");
-}
-
-BOOST_AUTO_TEST_CASE(gasleft)
-{
- char const* text = R"(
- contract C {
- function f() public view returns (uint256 val) { return gasleft(); }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(msg_gas_deprecated)
-{
- char const* text = R"(
- contract C {
- function f() public view returns (uint256 val) { return msg.gas; }
- }
- )";
- CHECK_WARNING(text, "\"msg.gas\" has been deprecated in favor of \"gasleft()\"");
-}
-
-BOOST_AUTO_TEST_CASE(msg_gas_deprecated_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f() public returns (uint256 val) { return msg.gas; }
- }
- )";
- CHECK_ERROR(text, TypeError, "\"msg.gas\" has been deprecated in favor of \"gasleft()\"");
-}
-
-BOOST_AUTO_TEST_CASE(gasleft_shadowing_1)
-{
- char const* text = R"(
- contract C {
- function gasleft() public pure returns (bytes32 val) { return "abc"; }
- function f() public pure returns (bytes32 val) { return gasleft(); }
- }
- )";
- CHECK_WARNING(text, "This declaration shadows a builtin symbol.");
-}
-
-BOOST_AUTO_TEST_CASE(gasleft_shadowing_2)
-{
- char const* text = R"(
- contract C {
- uint gasleft;
- function f() public { gasleft = 42; }
- }
- )";
- CHECK_WARNING(text, "This declaration shadows a builtin symbol.");
-}
-
-BOOST_AUTO_TEST_CASE(builtin_keccak256_reject_value)
-{
- char const* text = R"(
- contract C {
- function f() public {
- keccak256.value();
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"value\" not found or not visible after argument-dependent lookup");
-}
-
-BOOST_AUTO_TEST_CASE(builtin_sha256_reject_value)
-{
- const char* text = R"(
- contract C {
- function f() public {
- sha256.value();
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"value\" not found or not visible after argument-dependent lookup");
-}
-
-BOOST_AUTO_TEST_CASE(builtin_ripemd160_reject_value)
-{
- const char* text = R"(
- contract C {
- function f() public {
- ripemd160.value();
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"value\" not found or not visible after argument-dependent lookup");
-}
-
-BOOST_AUTO_TEST_CASE(builtin_ecrecover_reject_value)
-{
- const char* text = R"(
- contract C {
- function f() public {
- ecrecover.value();
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"value\" not found or not visible after argument-dependent lookup");
-}
-
-BOOST_AUTO_TEST_CASE(large_storage_array_fine)
-{
- char const* text = R"(
- contract C {
- uint[2**64 - 1] x;
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(large_storage_array_simple)
-{
- char const* text = R"(
- contract C {
- uint[2**64] x;
- }
- )";
- CHECK_WARNING(text, "covers a large part of storage and thus makes collisions likely");
-}
-
-BOOST_AUTO_TEST_CASE(large_storage_arrays_combined)
-{
- char const* text = R"(
- contract C {
- uint[200][200][2**30][][2**30] x;
- }
- )";
- CHECK_WARNING(text, "covers a large part of storage and thus makes collisions likely");
-}
-
-BOOST_AUTO_TEST_CASE(large_storage_arrays_struct)
-{
- char const* text = R"(
- contract C {
- struct S { uint[2**30] x; uint[2**50] y; }
- S[2**20] x;
- }
- )";
- CHECK_WARNING(text, "covers a large part of storage and thus makes collisions likely");
-}
-
-BOOST_AUTO_TEST_CASE(large_storage_array_mapping)
-{
- char const* text = R"(
- contract C {
- mapping(uint => uint[2**100]) x;
- }
- )";
- CHECK_WARNING(text, "covers a large part of storage and thus makes collisions likely");
-}
-
-BOOST_AUTO_TEST_CASE(library_function_without_implementation_public)
-{
- char const* text = R"(
- library L {
- // This can be used as an "interface", hence it is allowed.
- function f() public;
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(library_function_without_implementation_internal)
-{
- char const* text = R"(
- library L {
- function f() internal;
- }
- )";
- CHECK_ERROR(text, TypeError, "Internal library function must be implemented if declared.");
-}
-
-BOOST_AUTO_TEST_CASE(library_function_without_implementation_private)
-{
- char const* text = R"(
- library L {
- function f() private;
- }
- )";
- CHECK_ERROR(text, TypeError, "Internal library function must be implemented if declared.");
-}
-
-BOOST_AUTO_TEST_CASE(using_for_with_non_library)
-{
- char const* text = R"(
- // This tests a crash that was resolved by making the first error fatal.
- library L {
- struct S { uint d; }
- using S for S;
- function f(S _s) internal {
- _s.d = 1;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Library name expected.");
-}
-
-BOOST_AUTO_TEST_CASE(experimental_pragma_empty)
-{
- char const* text = R"(
- pragma experimental;
- )";
- CHECK_ERROR(text, SyntaxError, "Experimental feature name is missing.");
-}
-
-BOOST_AUTO_TEST_CASE(experimental_pragma_unknown_number_literal)
-{
- char const* text = R"(
- pragma experimental 123;
- )";
- CHECK_ERROR(text, SyntaxError, "Unsupported experimental feature name.");
-}
-
-BOOST_AUTO_TEST_CASE(experimental_pragma_unknown_string_literal)
-{
- char const* text = R"(
- pragma experimental unsupportedName;
- )";
- CHECK_ERROR(text, SyntaxError, "Unsupported experimental feature name.");
-}
-
-BOOST_AUTO_TEST_CASE(experimental_pragma_unknown_quoted_string_literal)
-{
- char const* text = R"(
- pragma experimental "unsupportedName";
- )";
- CHECK_ERROR(text, SyntaxError, "Unsupported experimental feature name.");
-}
-
-BOOST_AUTO_TEST_CASE(experimental_pragma_empy_string_literal)
-{
- char const* text = R"(
- pragma experimental "";
- )";
- CHECK_ERROR(text, SyntaxError, "Empty experimental feature name is invalid.");
-}
-
-BOOST_AUTO_TEST_CASE(experimental_pragma_multiple_same_line)
-{
- char const* text = R"(
- pragma experimental unsupportedName unsupportedName;
- )";
- CHECK_ERROR(text, SyntaxError, "Stray arguments.");
-}
-
-BOOST_AUTO_TEST_CASE(experimental_pragma_test_warning)
-{
- char const* text = R"(
- pragma experimental __test;
- )";
- CHECK_WARNING(text, "Experimental features are turned on. Do not use experimental features on live deployments.");
-}
-
-BOOST_AUTO_TEST_CASE(experimental_pragma_duplicate)
-{
- char const* text = R"(
- pragma experimental __test;
- pragma experimental __test;
- )";
- CHECK_ERROR_ALLOW_MULTI(text, SyntaxError, (std::vector<std::string>{"Duplicate experimental feature name."}));
-}
-
-BOOST_AUTO_TEST_CASE(reject_interface_creation)
-{
- char const* text = R"(
- interface I {}
- contract C {
- function f() public {
- new I();
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Cannot instantiate an interface.");
-}
-
-BOOST_AUTO_TEST_CASE(accept_library_creation)
-{
- char const* text = R"(
- library L {}
- contract C {
- function f() public {
- new L();
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(reject_interface_constructors)
-{
- char const* text = R"(
- interface I {}
- contract C is I(2) {}
- )";
- CHECK_ERROR(text, TypeError, "Wrong argument count for constructor call: 1 arguments given but expected 0.");
-}
-
-BOOST_AUTO_TEST_CASE(fallback_marked_external_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function () external { }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(fallback_marked_internal_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function () internal { }
- }
- )";
- CHECK_ERROR(text, TypeError, "Fallback function must be defined as \"external\".");
-}
-
-BOOST_AUTO_TEST_CASE(fallback_marked_private_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function () private { }
- }
- )";
- CHECK_ERROR(text, TypeError, "Fallback function must be defined as \"external\".");
-}
-
-BOOST_AUTO_TEST_CASE(fallback_marked_public_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function () public { }
- }
- )";
- CHECK_ERROR(text, TypeError, "Fallback function must be defined as \"external\".");
-}
-
-BOOST_AUTO_TEST_CASE(tuple_invalid_literal_too_large_for_uint)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- uint x;
- (x, ) = (1E111);
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "is not implicitly convertible to expected type");
-}
-
-BOOST_AUTO_TEST_CASE(tuple_invalid_literal_too_large_unassigned)
-{
- const char* text = R"(
- contract C {
- function f() pure public {
- uint x;
- (x, ) = (1, 1E111);
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Invalid rational number.");
-}
-
-BOOST_AUTO_TEST_CASE(tuple_invalid_literal_too_large_for_uint_multi)
-{
- const char* text = R"(
- contract C {
- function f() pure public {
- uint x;
- (x, ) = (1E111, 1);
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Invalid rational number.");
-}
-
-BOOST_AUTO_TEST_CASE(tuple_invalid_literal_too_large_exp)
-{
- const char* text = R"(
- contract C {
- function f() pure public {
- (2**270, 1);
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Invalid rational number.");
-}
-
-BOOST_AUTO_TEST_CASE(tuple_invalid_literal_too_large_expression)
-{
- const char* text = R"(
- contract C {
- function f() pure public {
- ((2**270) / 2**100, 1);
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(address_overload_resolution)
-{
- char const* text = R"(
- contract C {
- function balance() returns (uint) {
- this.balance; // to avoid pureness warning
- return 1;
- }
- function transfer(uint amount) {
- address(this).transfer(amount); // to avoid pureness warning
- }
- }
- contract D {
- function f() {
- var x = (new C()).balance();
- x;
- (new C()).transfer(5);
- }
- }
- )";
- CHECK_SUCCESS(text);
-}
-
-BOOST_AUTO_TEST_CASE(array_length_invalid_expression_negative_bool)
-{
- char const* text = R"(
- contract C {
- uint[-true] ids;
- }
- )";
- CHECK_ERROR(text, TypeError, "Invalid array length, expected integer literal or constant expression.");
-}
-
-BOOST_AUTO_TEST_CASE(array_length_invalid_expression_int_divides_bool)
-{
- char const* text = R"(
- contract C {
- uint[true/1] ids;
- }
- )";
- CHECK_ERROR(text, TypeError, "Invalid array length, expected integer literal or constant expression.");
-}
-
-BOOST_AUTO_TEST_CASE(array_length_invalid_expression_bool_divides_int)
-{
- char const* text = R"(
- contract C {
- uint[1/true] ids;
- }
- )";
- CHECK_ERROR(text, TypeError, "Invalid array length, expected integer literal or constant expression.");
-}
-
-BOOST_AUTO_TEST_CASE(array_length_invalid_expression_scientific_literal)
-{
- char const* text = R"(
- contract C {
- uint[1.111111E1111111111111] ids;
- }
- )";
- CHECK_ERROR(text, TypeError, "Invalid array length, expected integer literal or constant expression.");
-}
-
-BOOST_AUTO_TEST_CASE(array_length_invalid_expression_division_by_zero)
-{
- char const* text = R"(
- contract C {
- uint[3/0] ids;
- }
- )";
- CHECK_ERROR(text, TypeError, "Operator / not compatible with types int_const 3 and int_const 0");
-}
-
-BOOST_AUTO_TEST_CASE(warn_about_address_members_on_contract_balance)
-{
- char const* text = R"(
- contract C {
- function f() view public {
- this.balance;
- }
- }
- )";
- CHECK_WARNING(text, "Using contract member \"balance\" inherited from the address type is deprecated.");
-}
-
-BOOST_AUTO_TEST_CASE(warn_about_address_members_on_contract_transfer)
-{
- char const* text = R"(
- contract C {
- function f() view public {
- this.transfer;
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (vector<pair<Error::Type, std::string>>{
- {Error::Type::Warning, "Using contract member \"transfer\" inherited from the address type is deprecated"},
- {Error::Type::TypeError, "Value transfer to a contract without a payable fallback function"}
- }));
-}
-
-BOOST_AUTO_TEST_CASE(warn_about_address_members_on_contract_send)
-{
- char const* text = R"(
- contract C {
- function f() view public {
- this.send;
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (vector<pair<Error::Type, std::string>>{
- {Error::Type::Warning, "Using contract member \"send\" inherited from the address type is deprecated"},
- {Error::Type::TypeError, "Value transfer to a contract without a payable fallback function"}
- }));
-}
-
-BOOST_AUTO_TEST_CASE(warn_about_address_members_on_contract_call)
-{
- char const* text = R"(
- contract C {
- function f() view public {
- this.call;
- }
- }
- )";
- CHECK_WARNING(text, "Using contract member \"call\" inherited from the address type is deprecated.");
-}
-
-BOOST_AUTO_TEST_CASE(warn_about_address_members_on_contract_callcode)
-{
- char const* text = R"(
- contract C {
- function f() view public {
- this.callcode;
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (vector<pair<Error::Type, std::string>>{
- {Error::Type::Warning, "Using contract member \"callcode\" inherited from the address type is deprecated"},
- {Error::Type::Warning, "\"callcode\" has been deprecated in favour of \"delegatecall\""}
- }));
-}
-
-BOOST_AUTO_TEST_CASE(warn_about_address_members_on_contract_delegatecall)
-{
- char const* text = R"(
- contract C {
- function f() view public {
- this.delegatecall;
- }
- }
- )";
- CHECK_WARNING(text, "Using contract member \"delegatecall\" inherited from the address type is deprecated.");
-}
-
-BOOST_AUTO_TEST_CASE(warn_about_address_members_on_non_this_contract_balance)
-{
- char const* text = R"(
- contract C {
- function f() view public {
- C c;
- c.balance;
- }
- }
- )";
- CHECK_WARNING(text, "Using contract member \"balance\" inherited from the address type is deprecated");
-}
-
-BOOST_AUTO_TEST_CASE(warn_about_address_members_on_non_this_contract_transfer)
-{
- char const* text = R"(
- contract C {
- function f() view public {
- C c;
- c.transfer;
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (vector<pair<Error::Type, std::string>>{
- {Error::Type::Warning, "Using contract member \"transfer\" inherited from the address type is deprecated"},
- {Error::Type::TypeError, "Value transfer to a contract without a payable fallback function"}
- }));
-}
-
-BOOST_AUTO_TEST_CASE(warn_about_address_members_on_non_this_contract_send)
-{
- char const* text = R"(
- contract C {
- function f() view public {
- C c;
- c.send;
- }
- }
- )";
- CHECK_ALLOW_MULTI(text, (vector<pair<Error::Type, std::string>>{
- {Error::Type::Warning, "Using contract member \"send\" inherited from the address type is deprecated"},
- {Error::Type::TypeError, "Value transfer to a contract without a payable fallback function"}
- }));
-}
-
-BOOST_AUTO_TEST_CASE(warn_about_address_members_on_non_this_contract_call)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- C c;
- c.call;
- }
- }
- )";
- CHECK_WARNING(text, "Using contract member \"call\" inherited from the address type is deprecated");
-}
-
-BOOST_AUTO_TEST_CASE(warn_about_address_members_on_non_this_contract_callcode)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- C c;
- c.callcode;
- }
- }
- )";
- CHECK_WARNING_ALLOW_MULTI(text, (std::vector<std::string>{
- "Using contract member \"callcode\" inherited from the address type is deprecated",
- "\"callcode\" has been deprecated in favour of \"delegatecall\""
- }));
-}
-
-BOOST_AUTO_TEST_CASE(warn_about_address_members_on_non_this_contract_delegatecall)
-{
- char const* text = R"(
- contract C {
- function f() pure public {
- C c;
- c.delegatecall;
- }
- }
- )";
- CHECK_WARNING(text, "Using contract member \"delegatecall\" inherited from the address type is deprecated");
-}
-
-BOOST_AUTO_TEST_CASE(no_address_members_on_contract_balance_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f() public {
- this.balance;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"balance\" not found or not visible after argument-dependent lookup in contract");
-}
-
-BOOST_AUTO_TEST_CASE(no_address_members_on_contract_transfer_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f() public {
- this.transfer;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"transfer\" not found or not visible after argument-dependent lookup in contract");
-}
-
-BOOST_AUTO_TEST_CASE(no_address_members_on_contract_send_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f() public {
- this.send;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"send\" not found or not visible after argument-dependent lookup in contract");
-}
-
-BOOST_AUTO_TEST_CASE(no_address_members_on_contract_call_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f() public {
- this.call;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"call\" not found or not visible after argument-dependent lookup in contract");
-}
-
-BOOST_AUTO_TEST_CASE(no_address_members_on_contract_callcode_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f() public {
- this.callcode;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"callcode\" not found or not visible after argument-dependent lookup in contract");
-}
-
-BOOST_AUTO_TEST_CASE(no_address_members_on_contract_delegatecall_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f() public {
- this.delegatecall;
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "Member \"delegatecall\" not found or not visible after argument-dependent lookup in contract");
-}
-
-BOOST_AUTO_TEST_CASE(no_warning_for_using_members_that_look_like_address_members)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function transfer(uint) public;
- function f() public {
- this.transfer(10);
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(event_emit_simple)
-{
- char const* text = R"(
- contract C {
- event e();
- function f() public {
- emit e();
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(event_emit_complex)
-{
- char const* text = R"(
- contract C {
- event e(uint a, string b);
- function f() public {
- emit e(2, "abc");
- emit e({b: "abc", a: 8});
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(event_emit_foreign_class)
-{
- char const* text = R"(
- contract A { event e(uint a, string b); }
- contract C is A {
- function f() public {
- emit A.e(2, "abc");
- emit A.e({b: "abc", a: 8});
- }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(text);
-}
-
-BOOST_AUTO_TEST_CASE(event_without_emit_deprecated)
-{
- char const* text = R"(
- contract C {
- event e();
- function f() public {
- e();
- }
- }
- )";
- CHECK_WARNING(text, "without \"emit\" prefix");
-}
-
-BOOST_AUTO_TEST_CASE(events_without_emit_deprecated_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- event e();
- function f() public {
- e();
- }
- }
- )";
- CHECK_ERROR(text, TypeError, "have to be prefixed");
-}
-
BOOST_AUTO_TEST_CASE(getter_is_memory_type)
{
char const* text = R"(
@@ -7417,60 +437,6 @@ BOOST_AUTO_TEST_CASE(getter_is_memory_type)
}
}
-BOOST_AUTO_TEST_CASE(require_visibility_specifiers)
-{
- char const* text = R"(
- contract C {
- function f() pure { }
- }
- )";
- CHECK_WARNING(text, "No visibility specified. Defaulting to");
-}
-
-BOOST_AUTO_TEST_CASE(require_visibility_specifiers_v050)
-{
- char const* text = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f() pure { }
- }
- )";
- CHECK_ERROR(text, SyntaxError, "No visibility specified.");
-}
-
-BOOST_AUTO_TEST_CASE(blockhash)
-{
- char const* code = R"(
- contract C {
- function f() public view returns (bytes32) { return blockhash(3); }
- }
- )";
- CHECK_SUCCESS_NO_WARNINGS(code);
-}
-
-BOOST_AUTO_TEST_CASE(block_blockhash_deprecated)
-{
- char const* code = R"(
- contract C {
- function f() public view returns (bytes32) {
- return block.blockhash(3);
- }
- }
- )";
- CHECK_WARNING(code, "\"block.blockhash()\" has been deprecated in favor of \"blockhash()\"");
-}
-
-BOOST_AUTO_TEST_CASE(block_blockhash_deprecated_v050)
-{
- char const* code = R"(
- pragma experimental "v0.5.0";
- contract C {
- function f() public returns (bytes32) { return block.blockhash(3); }
- }
- )";
- CHECK_ERROR(code, TypeError, "\"block.blockhash()\" has been deprecated in favor of \"blockhash()\"");
-}
-
BOOST_AUTO_TEST_SUITE_END()
}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/001_name_references.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/001_name_references.sol
new file mode 100644
index 00000000..dc304a1d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/001_name_references.sol
@@ -0,0 +1,4 @@
+contract test {
+ uint256 variable;
+ function f(uint256) public returns (uint out) { f(variable); test; out; }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/002_undeclared_name.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/002_undeclared_name.sol
new file mode 100644
index 00000000..afe9483f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/002_undeclared_name.sol
@@ -0,0 +1,8 @@
+contract test {
+ uint256 variable;
+ function f(uint256 arg) public {
+ f(notfound);
+ }
+}
+// ----
+// DeclarationError: (85-93): Undeclared identifier.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/003_undeclared_name_is_not_fatal.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/003_undeclared_name_is_not_fatal.sol
new file mode 100644
index 00000000..0f2a1526
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/003_undeclared_name_is_not_fatal.sol
@@ -0,0 +1,10 @@
+contract test {
+ uint256 variable;
+ function f(uint256 arg) public {
+ f(notfound);
+ f(notfound);
+ }
+}
+// ----
+// DeclarationError: (85-93): Undeclared identifier.
+// DeclarationError: (106-114): Undeclared identifier.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/004_reference_to_later_declaration.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/004_reference_to_later_declaration.sol
new file mode 100644
index 00000000..e112e16c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/004_reference_to_later_declaration.sol
@@ -0,0 +1,6 @@
+contract test {
+ function g() public { f(); }
+ function f() public {}
+}
+// ----
+// Warning: (53-75): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/005_type_inference_smoke_test.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/005_type_inference_smoke_test.sol
new file mode 100644
index 00000000..4c4c62a5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/005_type_inference_smoke_test.sol
@@ -0,0 +1,8 @@
+contract test {
+ function f(uint256 arg1, uint32 arg2) public returns (bool ret) {
+ var x = arg1 + arg2 == 8; ret = x;
+ }
+}
+// ----
+// Warning: (94-99): Use of the "var" keyword is deprecated.
+// Warning: (20-134): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/006_type_checking_return.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/006_type_checking_return.sol
new file mode 100644
index 00000000..d0e87139
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/006_type_checking_return.sol
@@ -0,0 +1,5 @@
+contract test {
+ function f() public returns (bool r) { return 1 >= 2; }
+}
+// ----
+// Warning: (20-75): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/007_type_checking_return_wrong_number.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/007_type_checking_return_wrong_number.sol
new file mode 100644
index 00000000..13c70ad9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/007_type_checking_return_wrong_number.sol
@@ -0,0 +1,5 @@
+contract test {
+ function f() public returns (bool r1, bool r2) { return 1 >= 2; }
+}
+// ----
+// TypeError: (69-82): Different number of arguments in return statement than in returns declaration.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/008_type_checking_return_wrong_type.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/008_type_checking_return_wrong_type.sol
new file mode 100644
index 00000000..a7459ae8
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/008_type_checking_return_wrong_type.sol
@@ -0,0 +1,5 @@
+contract test {
+ function f() public returns (uint256 r) { return 1 >= 2; }
+}
+// ----
+// TypeError: (69-75): Return argument type bool is not implicitly convertible to expected type (type of first return variable) uint256.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/009_type_checking_function_call.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/009_type_checking_function_call.sol
new file mode 100644
index 00000000..abe2beac
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/009_type_checking_function_call.sol
@@ -0,0 +1,6 @@
+contract test {
+ function f() public returns (bool) { return g(12, true) == 3; }
+ function g(uint256, bool) public returns (uint256) { }
+}
+// ----
+// Warning: (88-142): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/010_type_conversion_for_comparison.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/010_type_conversion_for_comparison.sol
new file mode 100644
index 00000000..c0cd87d4
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/010_type_conversion_for_comparison.sol
@@ -0,0 +1,6 @@
+contract test {
+ function f() public { uint32(2) == int64(2); }
+}
+// ----
+// Warning: (42-63): Statement has no effect.
+// Warning: (20-66): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/011_type_conversion_for_comparison_invalid.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/011_type_conversion_for_comparison_invalid.sol
new file mode 100644
index 00000000..9cbce0d0
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/011_type_conversion_for_comparison_invalid.sol
@@ -0,0 +1,5 @@
+contract test {
+ function f() public { int32(2) == uint64(2); }
+}
+// ----
+// TypeError: (42-63): Operator == not compatible with types int32 and uint64
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/012_type_inference_explicit_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/012_type_inference_explicit_conversion.sol
new file mode 100644
index 00000000..70d31f25
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/012_type_inference_explicit_conversion.sol
@@ -0,0 +1,6 @@
+contract test {
+ function f() public returns (int256 r) { var x = int256(uint32(2)); return x; }
+}
+// ----
+// Warning: (61-66): Use of the "var" keyword is deprecated.
+// Warning: (20-99): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/013_large_string_literal.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/013_large_string_literal.sol
new file mode 100644
index 00000000..18ff6054
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/013_large_string_literal.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public { var x = "123456789012345678901234567890123"; }
+}
+// ----
+// Warning: (42-47): Use of the "var" keyword is deprecated.
+// Warning: (42-47): Unused local variable.
+// Warning: (20-88): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/014_balance.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/014_balance.sol
new file mode 100644
index 00000000..e2c9a8bf
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/014_balance.sol
@@ -0,0 +1,8 @@
+contract test {
+ function fun() public {
+ uint256 x = address(0).balance;
+ }
+}
+// ----
+// Warning: (52-61): Unused local variable.
+// Warning: (20-89): Function state mutability can be restricted to view
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/015_balance_invalid.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/015_balance_invalid.sol
new file mode 100644
index 00000000..18658fbe
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/015_balance_invalid.sol
@@ -0,0 +1,7 @@
+contract test {
+ function fun() public {
+ address(0).balance = 7;
+ }
+}
+// ----
+// TypeError: (52-70): Expression has to be an lvalue.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/016_assignment_to_mapping.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/016_assignment_to_mapping.sol
new file mode 100644
index 00000000..764f630f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/016_assignment_to_mapping.sol
@@ -0,0 +1,13 @@
+contract test {
+ struct str {
+ mapping(uint=>uint) map;
+ }
+ str data;
+ function fun() public {
+ var a = data.map;
+ data.map = a;
+ }
+}
+// ----
+// Warning: (122-127): Use of the "var" keyword is deprecated.
+// TypeError: (148-160): Mappings cannot be assigned to.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/017_assignment_to_struct.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/017_assignment_to_struct.sol
new file mode 100644
index 00000000..f7db0b24
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/017_assignment_to_struct.sol
@@ -0,0 +1,12 @@
+contract test {
+ struct str {
+ mapping(uint=>uint) map;
+ }
+ str data;
+ function fun() public {
+ var a = data;
+ data = a;
+ }
+}
+// ----
+// Warning: (122-127): Use of the "var" keyword is deprecated.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/018_forward_function_reference.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/018_forward_function_reference.sol
new file mode 100644
index 00000000..fd9ab7ed
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/018_forward_function_reference.sol
@@ -0,0 +1,10 @@
+contract First {
+ function fun() public returns (bool) {
+ return Second(1).fun(1, true, 3) > 0;
+ }
+}
+contract Second {
+ function fun(uint, bool, uint) public returns (uint) {
+ if (First(2).fun() == true) return 1;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/019_comparison_bitop_precedence.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/019_comparison_bitop_precedence.sol
new file mode 100644
index 00000000..eab272df
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/019_comparison_bitop_precedence.sol
@@ -0,0 +1,7 @@
+contract First {
+ function fun() public returns (bool ret) {
+ return 1 & 2 == 8 & 9 && 1 ^ 2 < 4 | 6;
+ }
+}
+// ----
+// Warning: (21-117): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/020_comparison_of_function_types_lt_1.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/020_comparison_of_function_types_lt_1.sol
new file mode 100644
index 00000000..1f288ff7
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/020_comparison_of_function_types_lt_1.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public returns (bool ret) {
+ return this.f < this.f;
+ }
+}
+// ----
+// TypeError: (73-88): Operator < not compatible with types function () external returns (bool) and function () external returns (bool)
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/021_comparison_of_function_types_lt_2.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/021_comparison_of_function_types_lt_2.sol
new file mode 100644
index 00000000..a6422d38
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/021_comparison_of_function_types_lt_2.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public returns (bool ret) {
+ return f < f;
+ }
+}
+// ----
+// TypeError: (73-78): Operator < not compatible with types function () returns (bool) and function () returns (bool)
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/022_comparison_of_function_types_gt_1.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/022_comparison_of_function_types_gt_1.sol
new file mode 100644
index 00000000..ee865912
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/022_comparison_of_function_types_gt_1.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public returns (bool ret) {
+ return this.f > this.f;
+ }
+}
+// ----
+// TypeError: (73-88): Operator > not compatible with types function () external returns (bool) and function () external returns (bool)
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/023_comparison_of_function_types_gt_2.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/023_comparison_of_function_types_gt_2.sol
new file mode 100644
index 00000000..590cc98b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/023_comparison_of_function_types_gt_2.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public returns (bool ret) {
+ return f > f;
+ }
+}
+// ----
+// TypeError: (73-78): Operator > not compatible with types function () returns (bool) and function () returns (bool)
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/024_comparison_of_function_types_eq.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/024_comparison_of_function_types_eq.sol
new file mode 100644
index 00000000..71dbec6b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/024_comparison_of_function_types_eq.sol
@@ -0,0 +1,11 @@
+contract C {
+ function f() public returns (bool ret) {
+ return f == f;
+ }
+ function g() public returns (bool ret) {
+ return f != f;
+ }
+}
+// ----
+// Warning: (17-86): Function state mutability can be restricted to pure
+// Warning: (91-160): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/025_comparison_of_mapping_types.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/025_comparison_of_mapping_types.sol
new file mode 100644
index 00000000..78d89ef8
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/025_comparison_of_mapping_types.sol
@@ -0,0 +1,10 @@
+contract C {
+ mapping(uint => uint) x;
+ function f() public returns (bool ret) {
+ var y = x;
+ return x == y;
+ }
+}
+// ----
+// Warning: (95-100): Use of the "var" keyword is deprecated.
+// TypeError: (121-127): Operator == not compatible with types mapping(uint256 => uint256) and mapping(uint256 => uint256)
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/029_create_abstract_contract.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/029_create_abstract_contract.sol
new file mode 100644
index 00000000..3a2bf56d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/029_create_abstract_contract.sol
@@ -0,0 +1,7 @@
+contract base { function foo(); }
+contract derived {
+ base b;
+ function foo() public { b = new base(); }
+}
+// ----
+// TypeError: (97-105): Trying to create an instance of an abstract contract.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/030_redeclare_implemented_abstract_function_as_abstract.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/030_redeclare_implemented_abstract_function_as_abstract.sol
new file mode 100644
index 00000000..05bc4bc7
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/030_redeclare_implemented_abstract_function_as_abstract.sol
@@ -0,0 +1,5 @@
+contract base { function foo(); }
+contract derived is base { function foo() public {} }
+contract wrong is derived { function foo(); }
+// ----
+// TypeError: (116-131): Redeclaring an already implemented function as abstract
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/039_functions_with_identical_structs_in_interface.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/039_functions_with_identical_structs_in_interface.sol
new file mode 100644
index 00000000..df4f5879
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/039_functions_with_identical_structs_in_interface.sol
@@ -0,0 +1,13 @@
+pragma experimental ABIEncoderV2;
+
+contract C {
+ struct S1 { }
+ struct S2 { }
+ function f(S1) pure {}
+ function f(S2) pure {}
+}
+// ----
+// Warning: (0-33): Experimental features are turned on. Do not use experimental features on live deployments.
+// Warning: (52-65): Defining empty structs is deprecated.
+// Warning: (70-83): Defining empty structs is deprecated.
+// TypeError: (115-137): Function overload clash during conversion to external types for arguments.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/040_functions_with_different_structs_in_interface.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/040_functions_with_different_structs_in_interface.sol
new file mode 100644
index 00000000..2af584b7
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/040_functions_with_different_structs_in_interface.sol
@@ -0,0 +1,12 @@
+pragma experimental ABIEncoderV2;
+
+contract C {
+ struct S1 { function() external a; }
+ struct S2 { bytes24 a; }
+ function f(S1) pure {}
+ function f(S2) pure {}
+}
+// ----
+// Warning: (0-33): Experimental features are turned on. Do not use experimental features on live deployments.
+// Warning: (122-144): No visibility specified. Defaulting to "public".
+// Warning: (149-171): No visibility specified. Defaulting to "public".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/041_functions_with_stucts_of_non_external_types_in_interface.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/041_functions_with_stucts_of_non_external_types_in_interface.sol
new file mode 100644
index 00000000..f9937fb9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/041_functions_with_stucts_of_non_external_types_in_interface.sol
@@ -0,0 +1,9 @@
+pragma experimental ABIEncoderV2;
+
+contract C {
+ struct S { function() internal a; }
+ function f(S) {}
+}
+// ----
+// Warning: (0-33): Experimental features are turned on. Do not use experimental features on live deployments.
+// TypeError: (103-104): Internal or recursive type is not allowed for public or external functions.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/042_functions_with_stucts_of_non_external_types_in_interface_2.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/042_functions_with_stucts_of_non_external_types_in_interface_2.sol
new file mode 100644
index 00000000..d9c3bfc4
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/042_functions_with_stucts_of_non_external_types_in_interface_2.sol
@@ -0,0 +1,9 @@
+pragma experimental ABIEncoderV2;
+
+contract C {
+ struct S { mapping(uint => uint) a; }
+ function f(S) {}
+}
+// ----
+// Warning: (0-33): Experimental features are turned on. Do not use experimental features on live deployments.
+// TypeError: (105-106): Internal or recursive type is not allowed for public or external functions.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/043_functions_with_stucts_of_non_external_types_in_interface_nested.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/043_functions_with_stucts_of_non_external_types_in_interface_nested.sol
new file mode 100644
index 00000000..f223cf53
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/043_functions_with_stucts_of_non_external_types_in_interface_nested.sol
@@ -0,0 +1,10 @@
+pragma experimental ABIEncoderV2;
+
+contract C {
+ struct T { mapping(uint => uint) a; }
+ struct S { T[][2] b; }
+ function f(S) {}
+}
+// ----
+// Warning: (0-33): Experimental features are turned on. Do not use experimental features on live deployments.
+// TypeError: (132-133): Internal or recursive type is not allowed for public or external functions.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/044_returning_multi_dimensional_arrays_new_abi.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/044_returning_multi_dimensional_arrays_new_abi.sol
new file mode 100644
index 00000000..e54e27e9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/044_returning_multi_dimensional_arrays_new_abi.sol
@@ -0,0 +1,7 @@
+pragma experimental ABIEncoderV2;
+
+contract C {
+ function f() public pure returns (string[][]) {}
+}
+// ----
+// Warning: (0-33): Experimental features are turned on. Do not use experimental features on live deployments.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/045_returning_multi_dimensional_arrays.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/045_returning_multi_dimensional_arrays.sol
new file mode 100644
index 00000000..daa67836
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/045_returning_multi_dimensional_arrays.sol
@@ -0,0 +1,5 @@
+contract C {
+ function f() public pure returns (string[][]) {}
+}
+// ----
+// TypeError: (51-61): This type is only supported in the new experimental ABI encoder. Use "pragma experimental ABIEncoderV2;" to enable the feature.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/046_returning_multi_dimensional_static_arrays.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/046_returning_multi_dimensional_static_arrays.sol
new file mode 100644
index 00000000..26af7436
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/046_returning_multi_dimensional_static_arrays.sol
@@ -0,0 +1,5 @@
+contract C {
+ function f() public pure returns (uint[][2]) {}
+}
+// ----
+// TypeError: (51-60): This type is only supported in the new experimental ABI encoder. Use "pragma experimental ABIEncoderV2;" to enable the feature.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/047_returning_arrays_in_structs_new_abi.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/047_returning_arrays_in_structs_new_abi.sol
new file mode 100644
index 00000000..81628a12
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/047_returning_arrays_in_structs_new_abi.sol
@@ -0,0 +1,8 @@
+pragma experimental ABIEncoderV2;
+
+contract C {
+ struct S { string[] s; }
+ function f() public pure returns (S) {}
+}
+// ----
+// Warning: (0-33): Experimental features are turned on. Do not use experimental features on live deployments.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/048_returning_arrays_in_structs_arrays.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/048_returning_arrays_in_structs_arrays.sol
new file mode 100644
index 00000000..2f1e5a15
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/048_returning_arrays_in_structs_arrays.sol
@@ -0,0 +1,6 @@
+contract C {
+ struct S { string[] s; }
+ function f() public pure returns (S x) {}
+}
+// ----
+// TypeError: (80-83): This type is only supported in the new experimental ABI encoder. Use "pragma experimental ABIEncoderV2;" to enable the feature.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/049_function_external_call_allowed_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/049_function_external_call_allowed_conversion.sol
new file mode 100644
index 00000000..ec72adeb
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/049_function_external_call_allowed_conversion.sol
@@ -0,0 +1,11 @@
+contract C {}
+contract Test {
+ function externalCall() public {
+ C arg;
+ this.g(arg);
+ }
+ function g (C c) external {}
+}
+// ----
+// Warning: (125-128): Unused function parameter. Remove or comment out the variable name to silence this warning.
+// Warning: (113-141): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/050_function_external_call_not_allowed_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/050_function_external_call_not_allowed_conversion.sol
new file mode 100644
index 00000000..18d75948
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/050_function_external_call_not_allowed_conversion.sol
@@ -0,0 +1,10 @@
+contract C {}
+contract Test {
+ function externalCall() public {
+ address arg;
+ this.g(arg);
+ }
+ function g (C c) external {}
+}
+// ----
+// TypeError: (103-106): Invalid type for argument in function call. Invalid implicit conversion from address to contract C requested.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/051_function_internal_allowed_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/051_function_internal_allowed_conversion.sol
new file mode 100644
index 00000000..aedc7b0b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/051_function_internal_allowed_conversion.sol
@@ -0,0 +1,13 @@
+contract C {
+ uint a;
+}
+contract Test {
+ C a;
+ function g (C c) public {}
+ function internalCall() public {
+ g(a);
+ }
+}
+// ----
+// Warning: (68-71): Unused function parameter. Remove or comment out the variable name to silence this warning.
+// Warning: (56-82): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/052_function_internal_not_allowed_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/052_function_internal_not_allowed_conversion.sol
new file mode 100644
index 00000000..c16d35eb
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/052_function_internal_not_allowed_conversion.sol
@@ -0,0 +1,12 @@
+contract C {
+ uint a;
+}
+contract Test {
+ address a;
+ function g (C c) public {}
+ function internalCall() public {
+ g(a);
+ }
+}
+// ----
+// TypeError: (136-137): Invalid type for argument in function call. Invalid implicit conversion from address to contract C requested.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/053_hash_collision_in_interface.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/053_hash_collision_in_interface.sol
new file mode 100644
index 00000000..fe690e16
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/053_hash_collision_in_interface.sol
@@ -0,0 +1,6 @@
+contract test {
+ function gsf() public { }
+ function tgeo() public { }
+}
+// ----
+// TypeError: (0-78): Function signature hash collision for tgeo()
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/054_inheritance_basic.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/054_inheritance_basic.sol
new file mode 100644
index 00000000..6229a1dc
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/054_inheritance_basic.sol
@@ -0,0 +1,5 @@
+contract base { uint baseMember; struct BaseType { uint element; } }
+contract derived is base {
+ BaseType data;
+ function f() public { baseMember = 7; }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/055_inheritance_diamond_basic.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/055_inheritance_diamond_basic.sol
new file mode 100644
index 00000000..c07e59e2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/055_inheritance_diamond_basic.sol
@@ -0,0 +1,9 @@
+contract root { function rootFunction() public {} }
+contract inter1 is root { function f() public {} }
+contract inter2 is root { function f() public {} }
+contract derived is root, inter2, inter1 {
+ function g() public { f(); rootFunction(); }
+}
+// ----
+// Warning: (16-49): Function state mutability can be restricted to pure
+// Warning: (129-151): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/056_cyclic_inheritance.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/056_cyclic_inheritance.sol
new file mode 100644
index 00000000..0e1ec4cb
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/056_cyclic_inheritance.sol
@@ -0,0 +1,4 @@
+contract A is B { }
+contract B is A { }
+// ----
+// TypeError: (14-15): Definition of base has to precede definition of derived contract
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/057_legal_override_direct.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/057_legal_override_direct.sol
new file mode 100644
index 00000000..062507ee
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/057_legal_override_direct.sol
@@ -0,0 +1,6 @@
+contract B { function f() public {} }
+contract C is B { function f(uint i) public {} }
+// ----
+// Warning: (67-73): Unused function parameter. Remove or comment out the variable name to silence this warning.
+// Warning: (13-35): Function state mutability can be restricted to pure
+// Warning: (56-84): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/058_legal_override_indirect.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/058_legal_override_indirect.sol
new file mode 100644
index 00000000..f59da472
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/058_legal_override_indirect.sol
@@ -0,0 +1,7 @@
+contract A { function f(uint a) public {} }
+contract B { function f() public {} }
+contract C is A, B { }
+// ----
+// Warning: (24-30): Unused function parameter. Remove or comment out the variable name to silence this warning.
+// Warning: (13-41): Function state mutability can be restricted to pure
+// Warning: (57-79): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/059_illegal_override_visibility.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/059_illegal_override_visibility.sol
new file mode 100644
index 00000000..8c13a478
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/059_illegal_override_visibility.sol
@@ -0,0 +1,4 @@
+contract B { function f() internal {} }
+contract C is B { function f() public {} }
+// ----
+// TypeError: (58-80): Overriding function visibility differs.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/060_complex_inheritance.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/060_complex_inheritance.sol
new file mode 100644
index 00000000..c7e42238
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/060_complex_inheritance.sol
@@ -0,0 +1,6 @@
+contract A { function f() public { uint8 x = C(0).g(); } }
+contract B { function f() public {} function g() public returns (uint8) {} }
+contract C is A, B { }
+// ----
+// Warning: (35-42): Unused local variable.
+// Warning: (95-133): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/061_missing_base_constructor_arguments.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/061_missing_base_constructor_arguments.sol
new file mode 100644
index 00000000..0ac48ecf
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/061_missing_base_constructor_arguments.sol
@@ -0,0 +1,5 @@
+contract A { function A(uint a) public { } }
+contract B is A { }
+// ----
+// Warning: (13-42): Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(...) { ... }" instead.
+// Warning: (24-30): Unused function parameter. Remove or comment out the variable name to silence this warning.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/062_base_constructor_arguments_override.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/062_base_constructor_arguments_override.sol
new file mode 100644
index 00000000..0ac48ecf
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/062_base_constructor_arguments_override.sol
@@ -0,0 +1,5 @@
+contract A { function A(uint a) public { } }
+contract B is A { }
+// ----
+// Warning: (13-42): Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(...) { ... }" instead.
+// Warning: (24-30): Unused function parameter. Remove or comment out the variable name to silence this warning.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/063_implicit_derived_to_base_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/063_implicit_derived_to_base_conversion.sol
new file mode 100644
index 00000000..f4667996
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/063_implicit_derived_to_base_conversion.sol
@@ -0,0 +1,7 @@
+contract A { }
+contract B is A {
+ function f() public { A a = B(1); }
+}
+// ----
+// Warning: (59-62): Unused local variable.
+// Warning: (37-72): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/064_implicit_base_to_derived_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/064_implicit_base_to_derived_conversion.sol
new file mode 100644
index 00000000..0d23ea87
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/064_implicit_base_to_derived_conversion.sol
@@ -0,0 +1,6 @@
+contract A { }
+contract B is A {
+ function f() public { B b = A(1); }
+}
+// ----
+// TypeError: (59-69): Type contract A is not implicitly convertible to expected type contract B.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/065_super_excludes_current_contract.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/065_super_excludes_current_contract.sol
new file mode 100644
index 00000000..6fa92a6a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/065_super_excludes_current_contract.sol
@@ -0,0 +1,11 @@
+contract A {
+ function b() public {}
+}
+
+contract B is A {
+ function f() public {
+ super.f();
+ }
+}
+// ----
+// TypeError: (95-102): Member "f" not found or not visible after argument-dependent lookup in contract super B
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/067_function_clash_with_state_variable_accessor.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/067_function_clash_with_state_variable_accessor.sol
new file mode 100644
index 00000000..a99682c0
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/067_function_clash_with_state_variable_accessor.sol
@@ -0,0 +1,9 @@
+contract test {
+ function fun() public {
+ uint64(2);
+ }
+ uint256 foo;
+ function foo() public {}
+}
+// ----
+// DeclarationError: (90-114): Identifier already declared.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/069_base_class_state_variable_accessor.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/069_base_class_state_variable_accessor.sol
new file mode 100644
index 00000000..8f2c6438
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/069_base_class_state_variable_accessor.sol
@@ -0,0 +1,9 @@
+// test for issue #1126 https://github.com/ethereum/cpp-ethereum/issues/1126
+contract Parent {
+ uint256 public m_aMember;
+}
+contract Child is Parent {
+ function foo() public returns (uint256) { return Parent.m_aMember; }
+}
+// ----
+// Warning: (158-226): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/070_struct_accessor_one_array_only.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/070_struct_accessor_one_array_only.sol
new file mode 100644
index 00000000..6741a7fa
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/070_struct_accessor_one_array_only.sol
@@ -0,0 +1,6 @@
+contract test {
+ struct Data { uint[15] m_array; }
+ Data public data;
+}
+// ----
+// TypeError: (58-74): Internal or recursive type is not allowed for public state variables.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/071_base_class_state_variable_internal_member.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/071_base_class_state_variable_internal_member.sol
new file mode 100644
index 00000000..774ea38e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/071_base_class_state_variable_internal_member.sol
@@ -0,0 +1,8 @@
+contract Parent {
+ uint256 internal m_aMember;
+}
+contract Child is Parent {
+ function foo() public returns (uint256) { return Parent.m_aMember; }
+}
+// ----
+// Warning: (83-151): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/072_state_variable_member_of_wrong_class1.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/072_state_variable_member_of_wrong_class1.sol
new file mode 100644
index 00000000..949761b6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/072_state_variable_member_of_wrong_class1.sol
@@ -0,0 +1,11 @@
+contract Parent1 {
+ uint256 internal m_aMember1;
+}
+contract Parent2 is Parent1 {
+ uint256 internal m_aMember2;
+}
+contract Child is Parent2 {
+ function foo() public returns (uint256) { return Parent2.m_aMember1; }
+}
+// ----
+// TypeError: (200-218): Member "m_aMember1" not found or not visible after argument-dependent lookup in type(contract Parent2)
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/073_state_variable_member_of_wrong_class2.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/073_state_variable_member_of_wrong_class2.sol
new file mode 100644
index 00000000..9a0ee8a3
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/073_state_variable_member_of_wrong_class2.sol
@@ -0,0 +1,12 @@
+contract Parent1 {
+ uint256 internal m_aMember1;
+}
+contract Parent2 is Parent1 {
+ uint256 internal m_aMember2;
+}
+contract Child is Parent2 {
+ function foo() public returns (uint256) { return Child.m_aMember2; }
+ uint256 public m_aMember3;
+}
+// ----
+// TypeError: (200-216): Member "m_aMember2" not found or not visible after argument-dependent lookup in type(contract Child)
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/074_fallback_function.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/074_fallback_function.sol
new file mode 100644
index 00000000..7e64bbe2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/074_fallback_function.sol
@@ -0,0 +1,4 @@
+contract C {
+ uint x;
+ function() public { x = 2; }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/075_fallback_function_with_arguments.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/075_fallback_function_with_arguments.sol
new file mode 100644
index 00000000..2c1d2a1b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/075_fallback_function_with_arguments.sol
@@ -0,0 +1,6 @@
+contract C {
+ uint x;
+ function(uint a) public { x = 2; }
+}
+// ----
+// TypeError: (37-45): Fallback function cannot take parameters.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/076_fallback_function_in_library.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/076_fallback_function_in_library.sol
new file mode 100644
index 00000000..11fef976
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/076_fallback_function_in_library.sol
@@ -0,0 +1,5 @@
+library C {
+ function() public {}
+}
+// ----
+// TypeError: (16-36): Libraries cannot have fallback functions.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/077_fallback_function_with_return_parameters.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/077_fallback_function_with_return_parameters.sol
new file mode 100644
index 00000000..905bcd2d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/077_fallback_function_with_return_parameters.sol
@@ -0,0 +1,5 @@
+contract C {
+ function() public returns (uint) { }
+}
+// ----
+// TypeError: (43-49): Fallback function cannot return values.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/078_fallback_function_twice.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/078_fallback_function_twice.sol
new file mode 100644
index 00000000..8d839da0
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/078_fallback_function_twice.sol
@@ -0,0 +1,7 @@
+contract C {
+ uint x;
+ function() public { x = 2; }
+ function() public { x = 3; }
+}
+// ----
+// DeclarationError: (62-90): Only one fallback function is allowed.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/079_fallback_function_inheritance.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/079_fallback_function_inheritance.sol
new file mode 100644
index 00000000..a35a8093
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/079_fallback_function_inheritance.sol
@@ -0,0 +1,7 @@
+contract A {
+ uint x;
+ function() public { x = 1; }
+}
+contract C is A {
+ function() public { x = 2; }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/080_event.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/080_event.sol
new file mode 100644
index 00000000..780d26a6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/080_event.sol
@@ -0,0 +1,6 @@
+contract c {
+ event e(uint indexed a, bytes3 indexed s, bool indexed b);
+ function f() public { e(2, "abc", true); }
+}
+// ----
+// Warning: (102-119): Invoking events without "emit" prefix is deprecated.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/081_event_too_many_indexed.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/081_event_too_many_indexed.sol
new file mode 100644
index 00000000..ee0af605
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/081_event_too_many_indexed.sol
@@ -0,0 +1,5 @@
+contract c {
+ event e(uint indexed a, bytes3 indexed b, bool indexed c, uint indexed d);
+}
+// ----
+// TypeError: (17-91): More than 3 indexed arguments for event.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/082_anonymous_event_four_indexed.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/082_anonymous_event_four_indexed.sol
new file mode 100644
index 00000000..e8b36906
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/082_anonymous_event_four_indexed.sol
@@ -0,0 +1,3 @@
+contract c {
+ event e(uint indexed a, bytes3 indexed b, bool indexed c, uint indexed d) anonymous;
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/083_anonymous_event_too_many_indexed.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/083_anonymous_event_too_many_indexed.sol
new file mode 100644
index 00000000..d439c5b9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/083_anonymous_event_too_many_indexed.sol
@@ -0,0 +1,5 @@
+contract c {
+ event e(uint indexed a, bytes3 indexed b, bool indexed c, uint indexed d, uint indexed e) anonymous;
+}
+// ----
+// TypeError: (17-117): More than 4 indexed arguments for anonymous event.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/084_events_with_same_name.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/084_events_with_same_name.sol
new file mode 100644
index 00000000..24f633b3
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/084_events_with_same_name.sol
@@ -0,0 +1,4 @@
+contract TestIt {
+ event A();
+ event A(uint i);
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/085_events_with_same_name_unnamed_arguments.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/085_events_with_same_name_unnamed_arguments.sol
new file mode 100644
index 00000000..cccd9d57
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/085_events_with_same_name_unnamed_arguments.sol
@@ -0,0 +1,4 @@
+contract test {
+ event A(uint);
+ event A(uint, uint);
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/086_events_with_same_name_different_types.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/086_events_with_same_name_different_types.sol
new file mode 100644
index 00000000..fbeab711
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/086_events_with_same_name_different_types.sol
@@ -0,0 +1,4 @@
+contract test {
+ event A(uint);
+ event A(bytes);
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/087_double_event_declaration.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/087_double_event_declaration.sol
new file mode 100644
index 00000000..af0280c5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/087_double_event_declaration.sol
@@ -0,0 +1,6 @@
+contract test {
+ event A(uint i);
+ event A(uint i);
+}
+// ----
+// DeclarationError: (20-36): Event with same name and arguments defined twice.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/088_double_event_declaration_ignores_anonymous.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/088_double_event_declaration_ignores_anonymous.sol
new file mode 100644
index 00000000..7d4b0ac9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/088_double_event_declaration_ignores_anonymous.sol
@@ -0,0 +1,6 @@
+contract test {
+ event A(uint i);
+ event A(uint i) anonymous;
+}
+// ----
+// DeclarationError: (20-36): Event with same name and arguments defined twice.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/089_double_event_declaration_ignores_indexed.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/089_double_event_declaration_ignores_indexed.sol
new file mode 100644
index 00000000..e6aa3e5f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/089_double_event_declaration_ignores_indexed.sol
@@ -0,0 +1,6 @@
+contract test {
+ event A(uint i);
+ event A(uint indexed i);
+}
+// ----
+// DeclarationError: (20-36): Event with same name and arguments defined twice.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/090_event_call.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/090_event_call.sol
new file mode 100644
index 00000000..abf46f94
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/090_event_call.sol
@@ -0,0 +1,6 @@
+contract c {
+ event e(uint a, bytes3 indexed s, bool indexed b);
+ function f() public { e(2, "abc", true); }
+}
+// ----
+// Warning: (94-111): Invoking events without "emit" prefix is deprecated.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/091_event_function_inheritance_clash.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/091_event_function_inheritance_clash.sol
new file mode 100644
index 00000000..5e0f58ea
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/091_event_function_inheritance_clash.sol
@@ -0,0 +1,12 @@
+contract A {
+ function dup() public returns (uint) {
+ return 1;
+ }
+}
+contract B {
+ event dup();
+}
+contract C is A, B {
+}
+// ----
+// DeclarationError: (99-111): Identifier already declared.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/092_function_event_inheritance_clash.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/092_function_event_inheritance_clash.sol
new file mode 100644
index 00000000..c567f992
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/092_function_event_inheritance_clash.sol
@@ -0,0 +1,12 @@
+contract B {
+ event dup();
+}
+contract A {
+ function dup() public returns (uint) {
+ return 1;
+ }
+}
+contract C is B, A {
+}
+// ----
+// DeclarationError: (49-111): Identifier already declared.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/093_function_event_in_contract_clash.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/093_function_event_in_contract_clash.sol
new file mode 100644
index 00000000..7b4fcde9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/093_function_event_in_contract_clash.sol
@@ -0,0 +1,8 @@
+contract A {
+ event dup();
+ function dup() public returns (uint) {
+ return 1;
+ }
+}
+// ----
+// DeclarationError: (34-96): Identifier already declared.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/094_event_inheritance.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/094_event_inheritance.sol
new file mode 100644
index 00000000..d177209b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/094_event_inheritance.sol
@@ -0,0 +1,8 @@
+contract base {
+ event e(uint a, bytes3 indexed s, bool indexed b);
+}
+contract c is base {
+ function f() public { e(2, "abc", true); }
+}
+// ----
+// Warning: (120-137): Invoking events without "emit" prefix is deprecated.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/095_multiple_events_argument_clash.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/095_multiple_events_argument_clash.sol
new file mode 100644
index 00000000..79127119
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/095_multiple_events_argument_clash.sol
@@ -0,0 +1,4 @@
+contract c {
+ event e1(uint a, uint e1, uint e2);
+ event e2(uint a, uint e1, uint e2);
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/096_access_to_default_function_visibility.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/096_access_to_default_function_visibility.sol
new file mode 100644
index 00000000..9251df73
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/096_access_to_default_function_visibility.sol
@@ -0,0 +1,8 @@
+contract c {
+ function f() public {}
+}
+contract d {
+ function g() public { c(0).f(); }
+}
+// ----
+// Warning: (17-39): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/097_access_to_internal_function.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/097_access_to_internal_function.sol
new file mode 100644
index 00000000..e13e1531
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/097_access_to_internal_function.sol
@@ -0,0 +1,8 @@
+contract c {
+ function f() internal {}
+}
+contract d {
+ function g() public { c(0).f(); }
+}
+// ----
+// TypeError: (83-89): Member "f" not found or not visible after argument-dependent lookup in contract c
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/098_access_to_default_state_variable_visibility.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/098_access_to_default_state_variable_visibility.sol
new file mode 100644
index 00000000..ab7546c6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/098_access_to_default_state_variable_visibility.sol
@@ -0,0 +1,8 @@
+contract c {
+ uint a;
+}
+contract d {
+ function g() public { c(0).a(); }
+}
+// ----
+// TypeError: (66-72): Member "a" not found or not visible after argument-dependent lookup in contract c
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/099_access_to_internal_state_variable.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/099_access_to_internal_state_variable.sol
new file mode 100644
index 00000000..60aba574
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/099_access_to_internal_state_variable.sol
@@ -0,0 +1,8 @@
+contract c {
+ uint public a;
+}
+contract d {
+ function g() public { c(0).a(); }
+}
+// ----
+// Warning: (51-84): Function state mutability can be restricted to view
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/100_error_count_in_named_args.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/100_error_count_in_named_args.sol
new file mode 100644
index 00000000..a679c25a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/100_error_count_in_named_args.sol
@@ -0,0 +1,11 @@
+contract test {
+ function a(uint a, uint b) public returns (uint r) {
+ r = a + b;
+ }
+ function b() public returns (uint r) {
+ r = a({a: 1});
+ }
+}
+// ----
+// Warning: (31-37): This declaration shadows an existing declaration.
+// TypeError: (153-162): Wrong argument count for function call: 1 arguments given but expected 2.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/101_empty_in_named_args.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/101_empty_in_named_args.sol
new file mode 100644
index 00000000..9da11d6f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/101_empty_in_named_args.sol
@@ -0,0 +1,11 @@
+contract test {
+ function a(uint a, uint b) public returns (uint r) {
+ r = a + b;
+ }
+ function b() public returns (uint r) {
+ r = a({});
+ }
+}
+// ----
+// Warning: (31-37): This declaration shadows an existing declaration.
+// TypeError: (153-158): Wrong argument count for function call: 0 arguments given but expected 2.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/102_duplicate_parameter_names_in_named_args.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/102_duplicate_parameter_names_in_named_args.sol
new file mode 100644
index 00000000..fab4beff
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/102_duplicate_parameter_names_in_named_args.sol
@@ -0,0 +1,11 @@
+contract test {
+ function a(uint a, uint b) public returns (uint r) {
+ r = a + b;
+ }
+ function b() public returns (uint r) {
+ r = a({a: 1, a: 2});
+ }
+}
+// ----
+// Warning: (31-37): This declaration shadows an existing declaration.
+// TypeError: (159-160): Duplicate named argument.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/103_invalid_parameter_names_in_named_args.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/103_invalid_parameter_names_in_named_args.sol
new file mode 100644
index 00000000..fa39736d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/103_invalid_parameter_names_in_named_args.sol
@@ -0,0 +1,11 @@
+contract test {
+ function a(uint a, uint b) public returns (uint r) {
+ r = a + b;
+ }
+ function b() public returns (uint r) {
+ r = a({a: 1, c: 2});
+ }
+}
+// ----
+// Warning: (31-37): This declaration shadows an existing declaration.
+// TypeError: (153-168): Named argument does not match function declaration.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/104_empty_name_input_parameter.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/104_empty_name_input_parameter.sol
new file mode 100644
index 00000000..824543ef
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/104_empty_name_input_parameter.sol
@@ -0,0 +1,5 @@
+contract test {
+ function f(uint) public { }
+}
+// ----
+// Warning: (20-47): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/105_constant_input_parameter.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/105_constant_input_parameter.sol
new file mode 100644
index 00000000..636d325f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/105_constant_input_parameter.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f(uint[] constant a) public { }
+}
+// ----
+// TypeError: (31-48): Illegal use of "constant" specifier.
+// TypeError: (31-48): Constants of non-value type not yet implemented.
+// TypeError: (31-48): Uninitialized "constant" variable.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/106_empty_name_return_parameter.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/106_empty_name_return_parameter.sol
new file mode 100644
index 00000000..a2ffc6e1
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/106_empty_name_return_parameter.sol
@@ -0,0 +1,5 @@
+contract test {
+ function f() public returns (bool) { }
+}
+// ----
+// Warning: (20-58): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/107_empty_name_input_parameter_with_named_one.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/107_empty_name_input_parameter_with_named_one.sol
new file mode 100644
index 00000000..e0efa0a0
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/107_empty_name_input_parameter_with_named_one.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f(uint, uint k) public returns (uint ret_k) {
+ return k;
+ }
+}
+// ----
+// Warning: (20-98): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/108_empty_name_return_parameter_with_named_one.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/108_empty_name_return_parameter_with_named_one.sol
new file mode 100644
index 00000000..39ae7877
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/108_empty_name_return_parameter_with_named_one.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public returns (uint ret_k, uint) {
+ return 5;
+ }
+}
+// ----
+// TypeError: (77-85): Different number of arguments in return statement than in returns declaration.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/109_disallow_declaration_of_void_type.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/109_disallow_declaration_of_void_type.sol
new file mode 100644
index 00000000..b79b976a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/109_disallow_declaration_of_void_type.sol
@@ -0,0 +1,7 @@
+contract c {
+ function f() public { var (x) = f(); }
+}
+// ----
+// Warning: (44-45): Use of the "var" keyword is deprecated.
+// Warning: (39-52): Different number of components on the left hand side (1) than on the right hand side (0).
+// TypeError: (39-52): Not enough components (0) in value to assign all variables (1).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/110_no_overflow_with_large_literal.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/110_no_overflow_with_large_literal.sol
new file mode 100644
index 00000000..c3399ddf
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/110_no_overflow_with_large_literal.sol
@@ -0,0 +1,8 @@
+contract c {
+ function c () public {
+ a = 115792089237316195423570985008687907853269984665640564039458;
+ }
+ uint256 a;
+}
+// ----
+// Warning: (17-119): Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(...) { ... }" instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/111_overflow_caused_by_ether_units.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/111_overflow_caused_by_ether_units.sol
new file mode 100644
index 00000000..88dc1a31
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/111_overflow_caused_by_ether_units.sol
@@ -0,0 +1,9 @@
+contract c {
+ function c () public {
+ a = 115792089237316195423570985008687907853269984665640564039458 ether;
+ }
+ uint256 a;
+}
+// ----
+// Warning: (17-125): Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(...) { ... }" instead.
+// TypeError: (52-118): Type int_const 1157...(70 digits omitted)...0000 is not implicitly convertible to expected type uint256.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/112_exp_operator_exponent_too_big.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/112_exp_operator_exponent_too_big.sol
new file mode 100644
index 00000000..2a9e6204
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/112_exp_operator_exponent_too_big.sol
@@ -0,0 +1,5 @@
+contract test {
+ function f() public returns (uint d) { return 2 ** 10000000000; }
+}
+// ----
+// TypeError: (66-82): Operator ** not compatible with types int_const 2 and int_const 10000000000
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/113_exp_warn_literal_base_1.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/113_exp_warn_literal_base_1.sol
new file mode 100644
index 00000000..0d91fcab
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/113_exp_warn_literal_base_1.sol
@@ -0,0 +1,8 @@
+contract test {
+ function f() pure public returns(uint) {
+ uint8 x = 100;
+ return 10**x;
+ }
+}
+// ----
+// Warning: (99-104): Result of exponentiation has type uint8 and thus might overflow. Silence this warning by converting the literal to the expected type.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/114_exp_warn_literal_base_2.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/114_exp_warn_literal_base_2.sol
new file mode 100644
index 00000000..eb430b9a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/114_exp_warn_literal_base_2.sol
@@ -0,0 +1,6 @@
+contract test {
+ function f() pure public returns(uint) {
+ uint8 x = 100;
+ return uint8(10)**x;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/115_exp_warn_literal_base_3.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/115_exp_warn_literal_base_3.sol
new file mode 100644
index 00000000..01c0fc06
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/115_exp_warn_literal_base_3.sol
@@ -0,0 +1,5 @@
+contract test {
+ function f() pure public returns(uint) {
+ return 2**80;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/116_shift_warn_literal_base_1.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/116_shift_warn_literal_base_1.sol
new file mode 100644
index 00000000..c6a4052e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/116_shift_warn_literal_base_1.sol
@@ -0,0 +1,8 @@
+contract test {
+ function f() pure public returns(uint) {
+ uint8 x = 100;
+ return 10 << x;
+ }
+}
+// ----
+// Warning: (99-106): Result of shift has type uint8 and thus might overflow. Silence this warning by converting the literal to the expected type.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/117_shift_warn_literal_base_2.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/117_shift_warn_literal_base_2.sol
new file mode 100644
index 00000000..954d1943
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/117_shift_warn_literal_base_2.sol
@@ -0,0 +1,6 @@
+contract test {
+ function f() pure public returns(uint) {
+ uint8 x = 100;
+ return uint8(10) << x;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/118_shift_warn_literal_base_3.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/118_shift_warn_literal_base_3.sol
new file mode 100644
index 00000000..5fbaa806
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/118_shift_warn_literal_base_3.sol
@@ -0,0 +1,5 @@
+contract test {
+ function f() pure public returns(uint) {
+ return 2 << 80;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/119_shift_warn_literal_base_4.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/119_shift_warn_literal_base_4.sol
new file mode 100644
index 00000000..19869157
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/119_shift_warn_literal_base_4.sol
@@ -0,0 +1,6 @@
+contract test {
+ function f() pure public returns(uint) {
+ uint8 x = 100;
+ return 10 >> x;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/120_warn_var_from_uint8.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/120_warn_var_from_uint8.sol
new file mode 100644
index 00000000..db086252
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/120_warn_var_from_uint8.sol
@@ -0,0 +1,9 @@
+contract test {
+ function f() pure public returns (uint) {
+ var i = 1;
+ return i;
+ }
+}
+// ----
+// Warning: (70-75): Use of the "var" keyword is deprecated.
+// Warning: (70-79): The type of this variable was inferred as uint8, which can hold values between 0 and 255. This is probably not desired. Use an explicit type to silence this warning.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/121_warn_var_from_uint256.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/121_warn_var_from_uint256.sol
new file mode 100644
index 00000000..2b48ce5d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/121_warn_var_from_uint256.sol
@@ -0,0 +1,9 @@
+contract test {
+ function f() pure public {
+ var i = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
+ i;
+ }
+}
+// ----
+// Warning: (55-60): Use of the "var" keyword is deprecated.
+// Warning: (55-129): The type of this variable was inferred as uint256, which can hold values between 0 and 115792089237316195423570985008687907853269984665640564039457584007913129639935. This is probably not desired. Use an explicit type to silence this warning.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/122_warn_var_from_int8.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/122_warn_var_from_int8.sol
new file mode 100644
index 00000000..bebcbab5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/122_warn_var_from_int8.sol
@@ -0,0 +1,9 @@
+contract test {
+ function f() pure public {
+ var i = -2;
+ i;
+ }
+}
+// ----
+// Warning: (55-60): Use of the "var" keyword is deprecated.
+// Warning: (55-65): The type of this variable was inferred as int8, which can hold values between -128 and 127. This is probably not desired. Use an explicit type to silence this warning.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/123_warn_var_from_zero.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/123_warn_var_from_zero.sol
new file mode 100644
index 00000000..3d269993
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/123_warn_var_from_zero.sol
@@ -0,0 +1,8 @@
+ contract test {
+ function f() pure public {
+ for (var i = 0; i < msg.data.length; i++) { }
+ }
+ }
+// ----
+// Warning: (63-68): Use of the "var" keyword is deprecated.
+// Warning: (63-72): The type of this variable was inferred as uint8, which can hold values between 0 and 255. This is probably not desired. Use an explicit type to silence this warning.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/124_enum_member_access.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/124_enum_member_access.sol
new file mode 100644
index 00000000..c428bea7
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/124_enum_member_access.sol
@@ -0,0 +1,11 @@
+contract test {
+ enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
+ function test()
+ {
+ choices = ActionChoices.GoStraight;
+ }
+ ActionChoices choices;
+}
+// ----
+// Warning: (80-151): Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(...) { ... }" instead.
+// Warning: (80-151): No visibility specified. Defaulting to "public".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/125_enum_member_access_accross_contracts.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/125_enum_member_access_accross_contracts.sol
new file mode 100644
index 00000000..3bed62d6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/125_enum_member_access_accross_contracts.sol
@@ -0,0 +1,10 @@
+contract Interface {
+ enum MyEnum { One, Two }
+}
+contract Impl {
+ function test() public returns (Interface.MyEnum) {
+ return Interface.MyEnum.One;
+ }
+}
+// ----
+// Warning: (72-166): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/126_enum_invalid_member_access.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/126_enum_invalid_member_access.sol
new file mode 100644
index 00000000..32df613e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/126_enum_invalid_member_access.sol
@@ -0,0 +1,10 @@
+contract test {
+ enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
+ function test() public {
+ choices = ActionChoices.RunAroundWavingYourHands;
+ }
+ ActionChoices choices;
+}
+// ----
+// Warning: (80-168): Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(...) { ... }" instead.
+// TypeError: (123-161): Member "RunAroundWavingYourHands" not found or not visible after argument-dependent lookup in type(enum test.ActionChoices)
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/127_enum_invalid_direct_member_access.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/127_enum_invalid_direct_member_access.sol
new file mode 100644
index 00000000..f5bd888a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/127_enum_invalid_direct_member_access.sol
@@ -0,0 +1,10 @@
+contract test {
+ enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
+ function test() public {
+ choices = Sit;
+ }
+ ActionChoices choices;
+}
+// ----
+// Warning: (80-133): Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(...) { ... }" instead.
+// DeclarationError: (123-126): Undeclared identifier.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/128_enum_explicit_conversion_is_okay.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/128_enum_explicit_conversion_is_okay.sol
new file mode 100644
index 00000000..ed6a1d04
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/128_enum_explicit_conversion_is_okay.sol
@@ -0,0 +1,11 @@
+contract test {
+ enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
+ function test() public {
+ a = uint256(ActionChoices.GoStraight);
+ b = uint64(ActionChoices.Sit);
+ }
+ uint256 a;
+ uint64 b;
+}
+// ----
+// Warning: (80-196): Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(...) { ... }" instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/129_int_to_enum_explicit_conversion_is_okay.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/129_int_to_enum_explicit_conversion_is_okay.sol
new file mode 100644
index 00000000..2f3a4cdc
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/129_int_to_enum_explicit_conversion_is_okay.sol
@@ -0,0 +1,11 @@
+contract test {
+ enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
+ function test() public {
+ a = 2;
+ b = ActionChoices(a);
+ }
+ uint256 a;
+ ActionChoices b;
+}
+// ----
+// Warning: (80-155): Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(...) { ... }" instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/130_enum_implicit_conversion_is_not_okay_256.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/130_enum_implicit_conversion_is_not_okay_256.sol
new file mode 100644
index 00000000..359deba5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/130_enum_implicit_conversion_is_not_okay_256.sol
@@ -0,0 +1,10 @@
+contract test {
+ enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
+ function test() public {
+ a = ActionChoices.GoStraight;
+ }
+ uint256 a;
+}
+// ----
+// Warning: (80-148): Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(...) { ... }" instead.
+// TypeError: (117-141): Type enum test.ActionChoices is not implicitly convertible to expected type uint256.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/131_enum_implicit_conversion_is_not_okay_64.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/131_enum_implicit_conversion_is_not_okay_64.sol
new file mode 100644
index 00000000..af02b2db
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/131_enum_implicit_conversion_is_not_okay_64.sol
@@ -0,0 +1,10 @@
+contract test {
+ enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
+ function test() public {
+ b = ActionChoices.Sit;
+ }
+ uint64 b;
+}
+// ----
+// Warning: (80-141): Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(...) { ... }" instead.
+// TypeError: (117-134): Type enum test.ActionChoices is not implicitly convertible to expected type uint64.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/132_enum_to_enum_conversion_is_not_okay.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/132_enum_to_enum_conversion_is_not_okay.sol
new file mode 100644
index 00000000..054cb34f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/132_enum_to_enum_conversion_is_not_okay.sol
@@ -0,0 +1,10 @@
+contract test {
+ enum Paper { Up, Down, Left, Right }
+ enum Ground { North, South, West, East }
+ function test() public {
+ Ground(Paper.Up);
+ }
+}
+// ----
+// Warning: (106-162): Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(...) { ... }" instead.
+// TypeError: (139-155): Explicit type conversion not allowed from "enum test.Paper" to "enum test.Ground".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/133_enum_duplicate_values.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/133_enum_duplicate_values.sol
new file mode 100644
index 00000000..996a9b78
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/133_enum_duplicate_values.sol
@@ -0,0 +1,5 @@
+ contract test {
+ enum ActionChoices { GoLeft, GoRight, GoLeft, Sit }
+ }
+// ----
+// DeclarationError: (66-72): Identifier already declared.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/134_enum_name_resolution_under_current_contract_name.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/134_enum_name_resolution_under_current_contract_name.sol
new file mode 100644
index 00000000..4a16eee1
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/134_enum_name_resolution_under_current_contract_name.sol
@@ -0,0 +1,12 @@
+contract A {
+ enum Foo {
+ First,
+ Second
+ }
+
+ function a() public {
+ A.Foo;
+ }
+}
+// ----
+// Warning: (69-111): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/135_private_visibility.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/135_private_visibility.sol
new file mode 100644
index 00000000..faafc631
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/135_private_visibility.sol
@@ -0,0 +1,8 @@
+contract base {
+ function f() private {}
+}
+contract derived is base {
+ function g() public { f(); }
+}
+// ----
+// DeclarationError: (99-100): Undeclared identifier.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/136_private_visibility_via_explicit_base_access.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/136_private_visibility_via_explicit_base_access.sol
new file mode 100644
index 00000000..fc89c033
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/136_private_visibility_via_explicit_base_access.sol
@@ -0,0 +1,8 @@
+contract base {
+ function f() private {}
+}
+contract derived is base {
+ function g() public { base.f(); }
+}
+// ----
+// TypeError: (99-105): Member "f" not found or not visible after argument-dependent lookup in type(contract base)
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/137_external_visibility.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/137_external_visibility.sol
new file mode 100644
index 00000000..2a0cbde0
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/137_external_visibility.sol
@@ -0,0 +1,6 @@
+contract c {
+ function f() external {}
+ function g() public { f(); }
+}
+// ----
+// DeclarationError: (68-69): Undeclared identifier. Did you mean "f"?
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/138_similar_name_suggestions_expected.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/138_similar_name_suggestions_expected.sol
new file mode 100644
index 00000000..8f11f003
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/138_similar_name_suggestions_expected.sol
@@ -0,0 +1,6 @@
+contract c {
+ function func() {}
+ function g() public { fun(); }
+}
+// ----
+// DeclarationError: (62-65): Undeclared identifier. Did you mean "func"?
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/139_no_name_suggestion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/139_no_name_suggestion.sol
new file mode 100644
index 00000000..40827dca
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/139_no_name_suggestion.sol
@@ -0,0 +1,5 @@
+contract c {
+ function g() public { fun(); }
+}
+// ----
+// DeclarationError: (39-42): Undeclared identifier.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/140_multiple_similar_suggestions.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/140_multiple_similar_suggestions.sol
new file mode 100644
index 00000000..34b4604d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/140_multiple_similar_suggestions.sol
@@ -0,0 +1,11 @@
+contract c {
+ function g() public {
+ uint var1 = 1;
+ uint var2 = 1;
+ uint var3 = 1;
+ uint var4 = 1;
+ uint var5 = varx;
+ }
+}
+// ----
+// DeclarationError: (151-155): Undeclared identifier. Did you mean "var1", "var2", "var3", "var4" or "var5"?
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/141_multiple_scopes_suggestions.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/141_multiple_scopes_suggestions.sol
new file mode 100644
index 00000000..f9471146
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/141_multiple_scopes_suggestions.sol
@@ -0,0 +1,9 @@
+contract c {
+ uint log9 = 2;
+ function g() public {
+ uint log8 = 3;
+ uint var1 = lgox;
+ }
+}
+// ----
+// DeclarationError: (101-105): Undeclared identifier. Did you mean "log8", "log9", "log0", "log1", "log2", "log3" or "log4"?
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/142_inheritence_suggestions.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/142_inheritence_suggestions.sol
new file mode 100644
index 00000000..4231e1bd
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/142_inheritence_suggestions.sol
@@ -0,0 +1,8 @@
+contract a { function func() public {} }
+contract c is a {
+ function g() public {
+ uint var1 = fun();
+ }
+}
+// ----
+// DeclarationError: (105-108): Undeclared identifier. Did you mean "func"?
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/143_no_spurious_identifier_suggestions_with_submatch.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/143_no_spurious_identifier_suggestions_with_submatch.sol
new file mode 100644
index 00000000..db9f07c6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/143_no_spurious_identifier_suggestions_with_submatch.sol
@@ -0,0 +1,8 @@
+contract c {
+ function g() public {
+ uint va = 1;
+ uint vb = vaxyz;
+ }
+}
+// ----
+// DeclarationError: (78-83): Undeclared identifier.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/144_no_spurious_identifier_suggestions.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/144_no_spurious_identifier_suggestions.sol
new file mode 100644
index 00000000..2316cb3d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/144_no_spurious_identifier_suggestions.sol
@@ -0,0 +1,8 @@
+contract c {
+ function g() public {
+ uint va = 1;
+ uint vb = x;
+ }
+}
+// ----
+// DeclarationError: (78-79): Undeclared identifier.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/145_external_base_visibility.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/145_external_base_visibility.sol
new file mode 100644
index 00000000..2d1baa20
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/145_external_base_visibility.sol
@@ -0,0 +1,8 @@
+contract base {
+ function f() external {}
+}
+contract derived is base {
+ function g() public { base.f(); }
+}
+// ----
+// TypeError: (100-106): Member "f" not found or not visible after argument-dependent lookup in type(contract base)
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/146_external_argument_assign.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/146_external_argument_assign.sol
new file mode 100644
index 00000000..d2c0245c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/146_external_argument_assign.sol
@@ -0,0 +1,5 @@
+contract c {
+ function f(uint a) external { a = 1; }
+}
+// ----
+// TypeError: (47-48): Expression has to be an lvalue.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/147_external_argument_increment.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/147_external_argument_increment.sol
new file mode 100644
index 00000000..2bfba42b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/147_external_argument_increment.sol
@@ -0,0 +1,5 @@
+contract c {
+ function f(uint a) external { a++; }
+}
+// ----
+// TypeError: (47-48): Expression has to be an lvalue.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/148_external_argument_delete.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/148_external_argument_delete.sol
new file mode 100644
index 00000000..30eb204e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/148_external_argument_delete.sol
@@ -0,0 +1,5 @@
+contract c {
+ function f(uint a) external { delete a; }
+}
+// ----
+// TypeError: (54-55): Expression has to be an lvalue.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/149_test_for_bug_override_function_with_bytearray_type.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/149_test_for_bug_override_function_with_bytearray_type.sol
new file mode 100644
index 00000000..871af310
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/149_test_for_bug_override_function_with_bytearray_type.sol
@@ -0,0 +1,8 @@
+contract Vehicle {
+ function f(bytes) external returns (uint256 r) {r = 1;}
+}
+contract Bike is Vehicle {
+ function f(bytes) external returns (uint256 r) {r = 42;}
+}
+// ----
+// Warning: (23-78): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/150_array_with_nonconstant_length.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/150_array_with_nonconstant_length.sol
new file mode 100644
index 00000000..49a1851c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/150_array_with_nonconstant_length.sol
@@ -0,0 +1,5 @@
+contract c {
+ function f(uint a) public { uint8[a] x; }
+}
+// ----
+// TypeError: (51-52): Invalid array length, expected integer literal or constant expression.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/151_array_with_negative_length.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/151_array_with_negative_length.sol
new file mode 100644
index 00000000..b87160b0
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/151_array_with_negative_length.sol
@@ -0,0 +1,5 @@
+contract c {
+ function f(uint a) public { uint8[-1] x; }
+}
+// ----
+// TypeError: (51-53): Array with negative length specified.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/152_array_copy_with_different_types1.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/152_array_copy_with_different_types1.sol
new file mode 100644
index 00000000..a0e71847
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/152_array_copy_with_different_types1.sol
@@ -0,0 +1,7 @@
+contract c {
+ bytes a;
+ uint[] b;
+ function f() public { b = a; }
+}
+// ----
+// TypeError: (70-71): Type bytes storage ref is not implicitly convertible to expected type uint256[] storage ref.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/153_array_copy_with_different_types2.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/153_array_copy_with_different_types2.sol
new file mode 100644
index 00000000..8d1cb1ef
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/153_array_copy_with_different_types2.sol
@@ -0,0 +1,7 @@
+contract c {
+ uint32[] a;
+ uint8[] b;
+ function f() public { b = a; }
+}
+// ----
+// TypeError: (74-75): Type uint32[] storage ref is not implicitly convertible to expected type uint8[] storage ref.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/154_array_copy_with_different_types_conversion_possible.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/154_array_copy_with_different_types_conversion_possible.sol
new file mode 100644
index 00000000..b15a9350
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/154_array_copy_with_different_types_conversion_possible.sol
@@ -0,0 +1,5 @@
+contract c {
+ uint32[] a;
+ uint8[] b;
+ function f() public { a = b; }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/155_array_copy_with_different_types_static_dynamic.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/155_array_copy_with_different_types_static_dynamic.sol
new file mode 100644
index 00000000..025593a5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/155_array_copy_with_different_types_static_dynamic.sol
@@ -0,0 +1,5 @@
+contract c {
+ uint32[] a;
+ uint8[80] b;
+ function f() public { a = b; }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/156_array_copy_with_different_types_dynamic_static.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/156_array_copy_with_different_types_dynamic_static.sol
new file mode 100644
index 00000000..90aa53a0
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/156_array_copy_with_different_types_dynamic_static.sol
@@ -0,0 +1,7 @@
+contract c {
+ uint[] a;
+ uint[80] b;
+ function f() public { b = a; }
+}
+// ----
+// TypeError: (73-74): Type uint256[] storage ref is not implicitly convertible to expected type uint256[80] storage ref.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/157_array_of_undeclared_type.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/157_array_of_undeclared_type.sol
new file mode 100644
index 00000000..1409db5e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/157_array_of_undeclared_type.sol
@@ -0,0 +1,5 @@
+contract c {
+ a[] public foo;
+}
+// ----
+// DeclarationError: (17-18): Identifier not found or not unique.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/158_storage_variable_initialization_with_incorrect_type_int.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/158_storage_variable_initialization_with_incorrect_type_int.sol
new file mode 100644
index 00000000..b1ef153e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/158_storage_variable_initialization_with_incorrect_type_int.sol
@@ -0,0 +1,5 @@
+contract c {
+ uint8 a = 1000;
+}
+// ----
+// TypeError: (27-31): Type int_const 1000 is not implicitly convertible to expected type uint8.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/159_storage_variable_initialization_with_incorrect_type_string.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/159_storage_variable_initialization_with_incorrect_type_string.sol
new file mode 100644
index 00000000..75736d98
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/159_storage_variable_initialization_with_incorrect_type_string.sol
@@ -0,0 +1,5 @@
+contract c {
+ uint a = "abc";
+}
+// ----
+// TypeError: (26-31): Type literal_string "abc" is not implicitly convertible to expected type uint256.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/160_test_byte_is_alias_of_byte1.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/160_test_byte_is_alias_of_byte1.sol
new file mode 100644
index 00000000..9977c839
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/160_test_byte_is_alias_of_byte1.sol
@@ -0,0 +1,7 @@
+contract c {
+ bytes arr;
+ function f() public { byte a = arr[0];}
+}
+// ----
+// Warning: (54-60): Unused local variable.
+// Warning: (32-71): Function state mutability can be restricted to view
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/161_warns_assigning_decimal_to_bytesxx.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/161_warns_assigning_decimal_to_bytesxx.sol
new file mode 100644
index 00000000..957322af
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/161_warns_assigning_decimal_to_bytesxx.sol
@@ -0,0 +1,5 @@
+contract Foo {
+ bytes32 a = 7;
+}
+// ----
+// Warning: (31-32): Decimal literal assigned to bytesXX variable will be left-aligned. Use an explicit conversion to silence this warning.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/162_does_not_warn_assigning_hex_number_to_bytesxx.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/162_does_not_warn_assigning_hex_number_to_bytesxx.sol
new file mode 100644
index 00000000..bc32580a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/162_does_not_warn_assigning_hex_number_to_bytesxx.sol
@@ -0,0 +1,3 @@
+contract Foo {
+ bytes32 a = 0x1234;
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/163_explicit_conversion_from_decimal_to_bytesxx.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/163_explicit_conversion_from_decimal_to_bytesxx.sol
new file mode 100644
index 00000000..af921869
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/163_explicit_conversion_from_decimal_to_bytesxx.sol
@@ -0,0 +1,3 @@
+contract Foo {
+ bytes32 a = bytes32(7);
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/164_assigning_value_to_const_variable.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/164_assigning_value_to_const_variable.sol
new file mode 100644
index 00000000..4e543e70
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/164_assigning_value_to_const_variable.sol
@@ -0,0 +1,6 @@
+contract Foo {
+ function changeIt() public { x = 9; }
+ uint constant x = 56;
+}
+// ----
+// TypeError: (48-49): Cannot assign to a constant variable.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/165_assigning_state_to_const_variable.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/165_assigning_state_to_const_variable.sol
new file mode 100644
index 00000000..f3986580
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/165_assigning_state_to_const_variable.sol
@@ -0,0 +1,5 @@
+contract C {
+ address constant x = msg.sender;
+}
+// ----
+// Warning: (38-48): Initial value for constant variable has to be compile-time constant. This will fail to compile with the next breaking version change.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/166_assigning_state_to_const_variable_050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/166_assigning_state_to_const_variable_050.sol
new file mode 100644
index 00000000..dc0a6e63
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/166_assigning_state_to_const_variable_050.sol
@@ -0,0 +1,7 @@
+pragma experimental "v0.5.0";
+
+contract C {
+ address constant x = msg.sender;
+}
+// ----
+// TypeError: (69-79): Initial value for constant variable has to be compile-time constant.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/167_constant_string_literal_disallows_assignment.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/167_constant_string_literal_disallows_assignment.sol
new file mode 100644
index 00000000..3f19ea3b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/167_constant_string_literal_disallows_assignment.sol
@@ -0,0 +1,10 @@
+contract Test {
+ string constant x = "abefghijklmnopqabcdefghijklmnopqabcdefghijklmnopqabca";
+ function f() public {
+ // Even if this is made possible in the future, we should not allow assignment
+ // to elements of constant arrays.
+ x[0] = "f";
+ }
+}
+// ----
+// TypeError: (261-265): Index access for string is not possible.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/168_assignment_to_const_var_involving_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/168_assignment_to_const_var_involving_conversion.sol
new file mode 100644
index 00000000..fb31e199
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/168_assignment_to_const_var_involving_conversion.sol
@@ -0,0 +1,3 @@
+contract C {
+ C constant x = C(0x123);
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/169_assignment_to_const_var_involving_expression.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/169_assignment_to_const_var_involving_expression.sol
new file mode 100644
index 00000000..692aad9f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/169_assignment_to_const_var_involving_expression.sol
@@ -0,0 +1,3 @@
+contract C {
+ uint constant x = 0x123 + 0x456;
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/170_assignment_to_const_var_involving_keccak.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/170_assignment_to_const_var_involving_keccak.sol
new file mode 100644
index 00000000..54f022bb
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/170_assignment_to_const_var_involving_keccak.sol
@@ -0,0 +1,3 @@
+contract C {
+ bytes32 constant x = keccak256("abc");
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/171_assignment_to_const_array_vars.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/171_assignment_to_const_array_vars.sol
new file mode 100644
index 00000000..b9e9aa7a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/171_assignment_to_const_array_vars.sol
@@ -0,0 +1,5 @@
+contract C {
+ uint[3] constant x = [uint(1), 2, 3];
+}
+// ----
+// TypeError: (17-53): Constants of non-value type not yet implemented.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/172_assignment_to_const_string_bytes.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/172_assignment_to_const_string_bytes.sol
new file mode 100644
index 00000000..f0e1528c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/172_assignment_to_const_string_bytes.sol
@@ -0,0 +1,5 @@
+contract C {
+ bytes constant a = "\x00\x01\x02";
+ bytes constant b = hex"000102";
+ string constant c = "hello";
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/173_constant_struct.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/173_constant_struct.sol
new file mode 100644
index 00000000..07bf0439
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/173_constant_struct.sol
@@ -0,0 +1,6 @@
+contract C {
+ struct S { uint x; uint[] y; }
+ S constant x = S(5, new uint[](4));
+}
+// ----
+// TypeError: (52-86): Constants of non-value type not yet implemented.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/174_address_is_constant.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/174_address_is_constant.sol
new file mode 100644
index 00000000..10850e16
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/174_address_is_constant.sol
@@ -0,0 +1,3 @@
+contract C {
+ address constant x = 0x1212121212121212121212121212121212121212;
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/175_uninitialized_const_variable.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/175_uninitialized_const_variable.sol
new file mode 100644
index 00000000..13496d8b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/175_uninitialized_const_variable.sol
@@ -0,0 +1,5 @@
+contract Foo {
+ uint constant y;
+}
+// ----
+// TypeError: (19-34): Uninitialized "constant" variable.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/176_overloaded_function_cannot_resolve.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/176_overloaded_function_cannot_resolve.sol
new file mode 100644
index 00000000..bcf25948
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/176_overloaded_function_cannot_resolve.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public returns (uint) { return 1; }
+ function f(uint a) public returns (uint) { return a; }
+ function g() public returns (uint) { return f(3, 5); }
+}
+// ----
+// TypeError: (176-177): No matching declaration found after argument-dependent lookup.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/177_ambiguous_overloaded_function.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/177_ambiguous_overloaded_function.sol
new file mode 100644
index 00000000..759e02f2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/177_ambiguous_overloaded_function.sol
@@ -0,0 +1,8 @@
+contract test {
+ function f(uint8 a) public returns (uint) { return a; }
+ function f(uint a) public returns (uint) { return 2 * a; }
+ // literal 1 can be both converted to uint and uint8, so the call is ambiguous.
+ function g() public returns (uint) { return f(1); }
+}
+// ----
+// TypeError: (271-272): No unique declaration found after argument-dependent lookup.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/178_assignment_of_nonoverloaded_function.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/178_assignment_of_nonoverloaded_function.sol
new file mode 100644
index 00000000..f7daa33f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/178_assignment_of_nonoverloaded_function.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f(uint a) public returns (uint) { return 2 * a; }
+ function g() public returns (uint) { var x = f; return x(7); }
+}
+// ----
+// Warning: (120-125): Use of the "var" keyword is deprecated.
+// Warning: (20-78): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/179_assignment_of_overloaded_function.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/179_assignment_of_overloaded_function.sol
new file mode 100644
index 00000000..375980c3
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/179_assignment_of_overloaded_function.sol
@@ -0,0 +1,8 @@
+contract test {
+ function f() public returns (uint) { return 1; }
+ function f(uint a) public returns (uint) { return 2 * a; }
+ function g() public returns (uint) { var x = f; return x(7); }
+}
+// ----
+// Warning: (173-178): Use of the "var" keyword is deprecated.
+// TypeError: (181-182): No matching declaration found after variable lookup.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/180_external_types_clash.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/180_external_types_clash.sol
new file mode 100644
index 00000000..91ddcd9b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/180_external_types_clash.sol
@@ -0,0 +1,9 @@
+contract base {
+ enum a { X }
+ function f(a) public { }
+}
+contract test is base {
+ function f(uint8 a) public { }
+}
+// ----
+// TypeError: (37-61): Function overload clash during conversion to external types for arguments.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/181_override_changes_return_types.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/181_override_changes_return_types.sol
new file mode 100644
index 00000000..c887f259
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/181_override_changes_return_types.sol
@@ -0,0 +1,8 @@
+contract base {
+ function f(uint a) public returns (uint) { }
+}
+contract test is base {
+ function f(uint a) public returns (uint8) { }
+}
+// ----
+// TypeError: (95-140): Overriding function return types differ.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/182_equal_overload.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/182_equal_overload.sol
new file mode 100644
index 00000000..cb9eb3fa
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/182_equal_overload.sol
@@ -0,0 +1,7 @@
+contract C {
+ function test(uint a) public returns (uint b) { }
+ function test(uint a) external {}
+}
+// ----
+// DeclarationError: (17-66): Function with same name and arguments defined twice.
+// TypeError: (17-66): Overriding function visibility differs.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/183_uninitialized_var.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/183_uninitialized_var.sol
new file mode 100644
index 00000000..61836b59
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/183_uninitialized_var.sol
@@ -0,0 +1,6 @@
+contract C {
+ function f() public returns (uint) { var x; return 2; }
+}
+// ----
+// Warning: (54-59): Use of the "var" keyword is deprecated.
+// TypeError: (54-59): Assignment necessary for type detection.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/185_invalid_utf8_implicit.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/185_invalid_utf8_implicit.sol
new file mode 100644
index 00000000..5440b425
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/185_invalid_utf8_implicit.sol
@@ -0,0 +1,5 @@
+contract C {
+ string s = "\xa0\x00";
+}
+// ----
+// TypeError: (28-38): Type literal_string (contains invalid UTF-8 sequence at position 0) is not implicitly convertible to expected type string storage ref.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/186_invalid_utf8_explicit.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/186_invalid_utf8_explicit.sol
new file mode 100644
index 00000000..401c46e2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/186_invalid_utf8_explicit.sol
@@ -0,0 +1,5 @@
+contract C {
+ string s = string("\xa0\x00");
+}
+// ----
+// TypeError: (28-46): Explicit type conversion not allowed from "literal_string (contains invalid UTF-8 sequence at position 0)" to "string storage pointer".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/187_large_utf8_codepoint.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/187_large_utf8_codepoint.sol
new file mode 100644
index 00000000..5e406d0c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/187_large_utf8_codepoint.sol
@@ -0,0 +1,3 @@
+contract C {
+ string s = "\xf0\x9f\xa6\x84";
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/188_string_index.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/188_string_index.sol
new file mode 100644
index 00000000..8e838537
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/188_string_index.sol
@@ -0,0 +1,7 @@
+contract C {
+ string s;
+ function f() public { var a = s[2]; }
+}
+// ----
+// Warning: (53-58): Use of the "var" keyword is deprecated.
+// TypeError: (61-65): Index access for string is not possible.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/189_string_length.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/189_string_length.sol
new file mode 100644
index 00000000..36be82c9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/189_string_length.sol
@@ -0,0 +1,7 @@
+contract C {
+ string s;
+ function f() public { var a = s.length; }
+}
+// ----
+// Warning: (53-58): Use of the "var" keyword is deprecated.
+// TypeError: (61-69): Member "length" not found or not visible after argument-dependent lookup in string storage ref
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/190_negative_integers_to_signed_out_of_bound.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/190_negative_integers_to_signed_out_of_bound.sol
new file mode 100644
index 00000000..2e8503af
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/190_negative_integers_to_signed_out_of_bound.sol
@@ -0,0 +1,5 @@
+contract test {
+ int8 public i = -129;
+}
+// ----
+// TypeError: (36-40): Type int_const -129 is not implicitly convertible to expected type int8.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/191_negative_integers_to_signed_min.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/191_negative_integers_to_signed_min.sol
new file mode 100644
index 00000000..211cfee2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/191_negative_integers_to_signed_min.sol
@@ -0,0 +1,3 @@
+contract test {
+ int8 public i = -128;
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/192_positive_integers_to_signed_out_of_bound.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/192_positive_integers_to_signed_out_of_bound.sol
new file mode 100644
index 00000000..d56045c2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/192_positive_integers_to_signed_out_of_bound.sol
@@ -0,0 +1,5 @@
+contract test {
+ int8 public j = 128;
+}
+// ----
+// TypeError: (36-39): Type int_const 128 is not implicitly convertible to expected type int8.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/193_positive_integers_to_signed_out_of_bound_max.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/193_positive_integers_to_signed_out_of_bound_max.sol
new file mode 100644
index 00000000..66701339
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/193_positive_integers_to_signed_out_of_bound_max.sol
@@ -0,0 +1,3 @@
+contract test {
+ int8 public j = 127;
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/194_negative_integers_to_unsigned.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/194_negative_integers_to_unsigned.sol
new file mode 100644
index 00000000..3702f09b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/194_negative_integers_to_unsigned.sol
@@ -0,0 +1,5 @@
+contract test {
+ uint8 public x = -1;
+}
+// ----
+// TypeError: (37-39): Type int_const -1 is not implicitly convertible to expected type uint8.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/195_positive_integers_to_unsigned_out_of_bound.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/195_positive_integers_to_unsigned_out_of_bound.sol
new file mode 100644
index 00000000..81216229
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/195_positive_integers_to_unsigned_out_of_bound.sol
@@ -0,0 +1,5 @@
+contract test {
+ uint8 public x = 700;
+}
+// ----
+// TypeError: (37-40): Type int_const 700 is not implicitly convertible to expected type uint8.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/196_integer_boolean_or.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/196_integer_boolean_or.sol
new file mode 100644
index 00000000..1b522c00
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/196_integer_boolean_or.sol
@@ -0,0 +1,3 @@
+contract test { function() public { uint x = 1; uint y = 2; x || y; } }
+// ----
+// TypeError: (60-66): Operator || not compatible with types uint256 and uint256
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/197_integer_boolean_and.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/197_integer_boolean_and.sol
new file mode 100644
index 00000000..cbc3732f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/197_integer_boolean_and.sol
@@ -0,0 +1,3 @@
+contract test { function() public { uint x = 1; uint y = 2; x && y; } }
+// ----
+// TypeError: (60-66): Operator && not compatible with types uint256 and uint256
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/198_integer_boolean_not.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/198_integer_boolean_not.sol
new file mode 100644
index 00000000..1d36b0b3
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/198_integer_boolean_not.sol
@@ -0,0 +1,3 @@
+contract test { function() public { uint x = 1; !x; } }
+// ----
+// TypeError: (48-50): Unary operator ! cannot be applied to type uint256
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/199_integer_unsigned_exp_signed.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/199_integer_unsigned_exp_signed.sol
new file mode 100644
index 00000000..5b8b2d3f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/199_integer_unsigned_exp_signed.sol
@@ -0,0 +1,3 @@
+contract test { function() public { uint x = 3; int y = -4; x ** y; } }
+// ----
+// TypeError: (60-66): Operator ** not compatible with types uint256 and int256
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/200_integer_signed_exp_unsigned.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/200_integer_signed_exp_unsigned.sol
new file mode 100644
index 00000000..95c19d17
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/200_integer_signed_exp_unsigned.sol
@@ -0,0 +1,3 @@
+contract test { function() public { uint x = 3; int y = -4; y ** x; } }
+// ----
+// TypeError: (60-66): Operator ** not compatible with types int256 and uint256
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/201_integer_signed_exp_signed.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/201_integer_signed_exp_signed.sol
new file mode 100644
index 00000000..394dec88
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/201_integer_signed_exp_signed.sol
@@ -0,0 +1,3 @@
+contract test { function() public { int x = -3; int y = -4; x ** y; } }
+// ----
+// TypeError: (60-66): Operator ** not compatible with types int256 and int256
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/202_bytes_reference_compare_operators.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/202_bytes_reference_compare_operators.sol
new file mode 100644
index 00000000..d4c513dd
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/202_bytes_reference_compare_operators.sol
@@ -0,0 +1,3 @@
+contract test { bytes a; bytes b; function() public { a == b; } }
+// ----
+// TypeError: (54-60): Operator == not compatible with types bytes storage ref and bytes storage ref
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/203_struct_reference_compare_operators.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/203_struct_reference_compare_operators.sol
new file mode 100644
index 00000000..de96b798
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/203_struct_reference_compare_operators.sol
@@ -0,0 +1,3 @@
+contract test { struct s {uint a;} s x; s y; function() public { x == y; } }
+// ----
+// TypeError: (65-71): Operator == not compatible with types struct test.s storage ref and struct test.s storage ref
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/204_overwrite_memory_location_external.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/204_overwrite_memory_location_external.sol
new file mode 100644
index 00000000..16d71ca4
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/204_overwrite_memory_location_external.sol
@@ -0,0 +1,5 @@
+contract C {
+ function f(uint[] memory a) external {}
+}
+// ----
+// TypeError: (28-43): Location has to be calldata for external functions (remove the "memory" or "storage" keyword).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/205_overwrite_storage_location_external.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/205_overwrite_storage_location_external.sol
new file mode 100644
index 00000000..99c9827d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/205_overwrite_storage_location_external.sol
@@ -0,0 +1,5 @@
+contract C {
+ function f(uint[] storage a) external {}
+}
+// ----
+// TypeError: (28-44): Location has to be calldata for external functions (remove the "memory" or "storage" keyword).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/206_storage_location_local_variables.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/206_storage_location_local_variables.sol
new file mode 100644
index 00000000..5199e5d7
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/206_storage_location_local_variables.sol
@@ -0,0 +1,11 @@
+contract C {
+ function f() public {
+ uint[] storage x;
+ uint[] memory y;
+ uint[] memory z;
+ x;y;z;
+ }
+}
+// ----
+// Warning: (47-63): Uninitialized storage pointer.
+// Warning: (17-135): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/207_no_mappings_in_memory_array.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/207_no_mappings_in_memory_array.sol
new file mode 100644
index 00000000..5220ee22
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/207_no_mappings_in_memory_array.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public {
+ mapping(uint=>uint)[] memory x;
+ }
+}
+// ----
+// TypeError: (47-77): Type mapping(uint256 => uint256)[] memory is only valid in storage.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/208_assignment_mem_to_local_storage_variable.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/208_assignment_mem_to_local_storage_variable.sol
new file mode 100644
index 00000000..a2048a8a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/208_assignment_mem_to_local_storage_variable.sol
@@ -0,0 +1,10 @@
+contract C {
+ uint[] data;
+ function f(uint[] x) public {
+ var dataRef = data;
+ dataRef = x;
+ }
+}
+// ----
+// Warning: (72-83): Use of the "var" keyword is deprecated.
+// TypeError: (110-111): Type uint256[] memory is not implicitly convertible to expected type uint256[] storage pointer.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/209_storage_assign_to_different_local_variable.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/209_storage_assign_to_different_local_variable.sol
new file mode 100644
index 00000000..aabdcd88
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/209_storage_assign_to_different_local_variable.sol
@@ -0,0 +1,12 @@
+contract C {
+ uint[] data;
+ uint8[] otherData;
+ function f() public {
+ uint8[] storage x = otherData;
+ uint[] storage y = data;
+ y = x;
+ // note that data = otherData works
+ }
+}
+// ----
+// TypeError: (163-164): Type uint8[] storage pointer is not implicitly convertible to expected type uint256[] storage pointer.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/210_uninitialized_mapping_variable.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/210_uninitialized_mapping_variable.sol
new file mode 100644
index 00000000..6b25cdfe
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/210_uninitialized_mapping_variable.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() public {
+ mapping(uint => uint) x;
+ x;
+ }
+}
+// ----
+// TypeError: (47-70): Uninitialized mapping. Mappings cannot be created dynamically, you have to assign them from a state variable.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/211_uninitialized_mapping_array_variable.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/211_uninitialized_mapping_array_variable.sol
new file mode 100644
index 00000000..80467491
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/211_uninitialized_mapping_array_variable.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() pure public {
+ mapping(uint => uint)[] storage x;
+ x;
+ }
+}
+// ----
+// Warning: (52-85): Uninitialized storage pointer.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/212_uninitialized_mapping_array_variable_050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/212_uninitialized_mapping_array_variable_050.sol
new file mode 100644
index 00000000..f2028690
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/212_uninitialized_mapping_array_variable_050.sol
@@ -0,0 +1,9 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f() pure public {
+ mapping(uint => uint)[] storage x;
+ x;
+ }
+}
+// ----
+// DeclarationError: (82-115): Uninitialized storage pointer.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/213_no_delete_on_storage_pointers.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/213_no_delete_on_storage_pointers.sol
new file mode 100644
index 00000000..d17b62e4
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/213_no_delete_on_storage_pointers.sol
@@ -0,0 +1,10 @@
+contract C {
+ uint[] data;
+ function f() public {
+ var x = data;
+ delete x;
+ }
+}
+// ----
+// Warning: (64-69): Use of the "var" keyword is deprecated.
+// TypeError: (86-94): Unary operator delete cannot be applied to type uint256[] storage pointer
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/214_assignment_mem_storage_variable_directly.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/214_assignment_mem_storage_variable_directly.sol
new file mode 100644
index 00000000..08737f2d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/214_assignment_mem_storage_variable_directly.sol
@@ -0,0 +1,6 @@
+contract C {
+ uint[] data;
+ function f(uint[] x) public {
+ data = x;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/215_function_argument_mem_to_storage.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/215_function_argument_mem_to_storage.sol
new file mode 100644
index 00000000..4d75732a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/215_function_argument_mem_to_storage.sol
@@ -0,0 +1,9 @@
+contract C {
+ function f(uint[] storage x) private {
+ }
+ function g(uint[] x) public {
+ f(x);
+ }
+}
+// ----
+// TypeError: (106-107): Invalid type for argument in function call. Invalid implicit conversion from uint256[] memory to uint256[] storage pointer requested.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/216_function_argument_storage_to_mem.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/216_function_argument_storage_to_mem.sol
new file mode 100644
index 00000000..157ef4dd
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/216_function_argument_storage_to_mem.sol
@@ -0,0 +1,10 @@
+contract C {
+ function f(uint[] storage x) private {
+ g(x);
+ }
+ function g(uint[] x) public {
+ }
+}
+// ----
+// Warning: (91-99): Unused function parameter. Remove or comment out the variable name to silence this warning.
+// Warning: (80-115): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/217_mem_array_assignment_changes_base_type.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/217_mem_array_assignment_changes_base_type.sol
new file mode 100644
index 00000000..3755b935
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/217_mem_array_assignment_changes_base_type.sol
@@ -0,0 +1,10 @@
+contract C {
+ function f(uint8[] memory x) private {
+ // Such an assignment is possible in storage, but not in memory
+ // (because it would incur an otherwise unnecessary copy).
+ // This requirement might be lifted, though.
+ uint[] memory y = x;
+ }
+}
+// ----
+// TypeError: (256-275): Type uint8[] memory is not implicitly convertible to expected type uint256[] memory.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/219_memory_arrays_not_resizeable.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/219_memory_arrays_not_resizeable.sol
new file mode 100644
index 00000000..93d8cd42
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/219_memory_arrays_not_resizeable.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() public {
+ uint[] memory x;
+ x.length = 2;
+ }
+}
+// ----
+// TypeError: (72-80): Expression has to be an lvalue.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/220_struct_constructor.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/220_struct_constructor.sol
new file mode 100644
index 00000000..50585c11
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/220_struct_constructor.sol
@@ -0,0 +1,9 @@
+contract C {
+ struct S { uint a; bool x; }
+ function f() public {
+ S memory s = S(1, true);
+ }
+}
+// ----
+// Warning: (80-90): Unused local variable.
+// Warning: (50-110): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/221_struct_constructor_nested.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/221_struct_constructor_nested.sol
new file mode 100644
index 00000000..00222682
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/221_struct_constructor_nested.sol
@@ -0,0 +1,11 @@
+contract C {
+ struct X { uint x1; uint x2; }
+ struct S { uint s1; uint[3] s2; X s3; }
+ function f() public {
+ uint[3] memory s2;
+ S memory s = S(1, s2, X(4, 5));
+ }
+}
+// ----
+// Warning: (153-163): Unused local variable.
+// Warning: (96-190): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/222_struct_named_constructor.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/222_struct_named_constructor.sol
new file mode 100644
index 00000000..8ab8ee46
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/222_struct_named_constructor.sol
@@ -0,0 +1,9 @@
+contract C {
+ struct S { uint a; bool x; }
+ function f() public {
+ S memory s = S({a: 1, x: true});
+ }
+}
+// ----
+// Warning: (80-90): Unused local variable.
+// Warning: (50-118): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/223_literal_strings.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/223_literal_strings.sol
new file mode 100644
index 00000000..1dadcc4d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/223_literal_strings.sol
@@ -0,0 +1,9 @@
+contract Foo {
+ function f() public {
+ string memory long = "01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890";
+ string memory short = "123";
+ long; short;
+ }
+}
+// ----
+// Warning: (19-238): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/224_string_bytes_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/224_string_bytes_conversion.sol
new file mode 100644
index 00000000..137aa893
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/224_string_bytes_conversion.sol
@@ -0,0 +1,17 @@
+contract Test {
+ string s;
+ bytes b;
+ function h(string _s) external { bytes(_s).length; }
+ function i(string _s) internal { bytes(_s).length; }
+ function j() internal { bytes(s).length; }
+ function k(bytes _b) external { string(_b); }
+ function l(bytes _b) internal { string(_b); }
+ function m() internal { string(b); }
+}
+// ----
+// Warning: (47-99): Function state mutability can be restricted to pure
+// Warning: (104-156): Function state mutability can be restricted to pure
+// Warning: (161-203): Function state mutability can be restricted to view
+// Warning: (208-253): Function state mutability can be restricted to pure
+// Warning: (258-303): Function state mutability can be restricted to pure
+// Warning: (308-344): Function state mutability can be restricted to view
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/225_inheriting_from_library.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/225_inheriting_from_library.sol
new file mode 100644
index 00000000..eff7bf86
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/225_inheriting_from_library.sol
@@ -0,0 +1,4 @@
+library Lib {}
+contract Test is Lib {}
+// ----
+// TypeError: (32-35): Libraries cannot be inherited from.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/226_inheriting_library.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/226_inheriting_library.sol
new file mode 100644
index 00000000..2d601c1c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/226_inheriting_library.sol
@@ -0,0 +1,4 @@
+contract Test {}
+library Lib is Test {}
+// ----
+// TypeError: (17-39): Library is not allowed to inherit.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/227_library_having_variables.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/227_library_having_variables.sol
new file mode 100644
index 00000000..804ef3d3
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/227_library_having_variables.sol
@@ -0,0 +1,3 @@
+library Lib { uint x; }
+// ----
+// TypeError: (14-20): Library cannot have non-constant state variables
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/228_valid_library.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/228_valid_library.sol
new file mode 100644
index 00000000..de6b0b3e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/228_valid_library.sol
@@ -0,0 +1 @@
+library Lib { uint constant x = 9; }
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/229_call_to_library_function.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/229_call_to_library_function.sol
new file mode 100644
index 00000000..c007d9a1
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/229_call_to_library_function.sol
@@ -0,0 +1,10 @@
+library Lib {
+ function min(uint, uint) public returns (uint);
+}
+contract Test {
+ function f() public {
+ uint t = Lib.min(12, 7);
+ }
+}
+// ----
+// Warning: (118-124): Unused local variable.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/230_creating_contract_within_the_contract.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/230_creating_contract_within_the_contract.sol
new file mode 100644
index 00000000..8dbaef9c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/230_creating_contract_within_the_contract.sol
@@ -0,0 +1,6 @@
+contract Test {
+ function f() public { var x = new Test(); }
+}
+// ----
+// Warning: (42-47): Use of the "var" keyword is deprecated.
+// TypeError: (50-58): Circular reference for contract creation (cannot create instance of derived or same contract).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/231_array_out_of_bound_access.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/231_array_out_of_bound_access.sol
new file mode 100644
index 00000000..7230a0a6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/231_array_out_of_bound_access.sol
@@ -0,0 +1,9 @@
+contract c {
+ uint[2] dataArray;
+ function set5th() public returns (bool) {
+ dataArray[5] = 2;
+ return true;
+ }
+}
+// ----
+// TypeError: (90-102): Out of bounds array access.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/232_literal_string_to_storage_pointer.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/232_literal_string_to_storage_pointer.sol
new file mode 100644
index 00000000..a586dc80
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/232_literal_string_to_storage_pointer.sol
@@ -0,0 +1,6 @@
+contract C {
+ function f() public { string x = "abc"; }
+}
+// ----
+// Warning: (39-47): Variable is declared as a storage pointer. Use an explicit "storage" keyword to silence this warning.
+// TypeError: (39-55): Type literal_string "abc" is not implicitly convertible to expected type string storage pointer.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/233_non_initialized_references.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/233_non_initialized_references.sol
new file mode 100644
index 00000000..9d8d4834
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/233_non_initialized_references.sol
@@ -0,0 +1,11 @@
+contract C {
+ struct s {
+ uint a;
+ }
+ function f() public {
+ s storage x;
+ x.a = 2;
+ }
+}
+// ----
+// Warning: (84-95): Uninitialized storage pointer.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/234_non_initialized_references_050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/234_non_initialized_references_050.sol
new file mode 100644
index 00000000..c221b73c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/234_non_initialized_references_050.sol
@@ -0,0 +1,11 @@
+pragma experimental "v0.5.0";
+contract C {
+ struct s {
+ uint a;
+ }
+ function f() public {
+ s storage x;
+ }
+}
+// ----
+// DeclarationError: (114-125): Uninitialized storage pointer.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/235_keccak256_with_large_integer_constant.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/235_keccak256_with_large_integer_constant.sol
new file mode 100644
index 00000000..c39d0fe2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/235_keccak256_with_large_integer_constant.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public { keccak256(2**500); }
+}
+// ----
+// Warning: (39-56): This function only accepts a single "bytes" argument. Please use "abi.encodePacked(...)" or a similar function to encode the data.
+// Warning: (39-56): The provided argument of type int_const 3273...(143 digits omitted)...9376 is not implicitly convertible to expected type bytes memory.
+// TypeError: (49-55): Invalid rational number (too large or division by zero).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/236_cyclic_binary_dependency.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/236_cyclic_binary_dependency.sol
new file mode 100644
index 00000000..c287507d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/236_cyclic_binary_dependency.sol
@@ -0,0 +1,5 @@
+contract A { function f() public { new B(); } }
+contract B { function f() public { new C(); } }
+contract C { function f() public { new A(); } }
+// ----
+// TypeError: (131-136): Circular reference for contract creation (cannot create instance of derived or same contract).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/237_cyclic_binary_dependency_via_inheritance.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/237_cyclic_binary_dependency_via_inheritance.sol
new file mode 100644
index 00000000..00ee536e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/237_cyclic_binary_dependency_via_inheritance.sol
@@ -0,0 +1,5 @@
+contract A is B { }
+contract B { function f() public { new C(); } }
+contract C { function f() public { new A(); } }
+// ----
+// TypeError: (14-15): Definition of base has to precede definition of derived contract
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/238_multi_variable_declaration_fail.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/238_multi_variable_declaration_fail.sol
new file mode 100644
index 00000000..de115d12
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/238_multi_variable_declaration_fail.sol
@@ -0,0 +1,5 @@
+contract C { function f() public { var (x,y); x = 1; y = 1;} }
+// ----
+// Warning: (40-41): Use of the "var" keyword is deprecated.
+// Warning: (42-43): Use of the "var" keyword is deprecated.
+// TypeError: (35-44): Assignment necessary for type detection.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/239_multi_variable_declaration_wildcards_fine.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/239_multi_variable_declaration_wildcards_fine.sol
new file mode 100644
index 00000000..a1cfb070
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/239_multi_variable_declaration_wildcards_fine.sol
@@ -0,0 +1,26 @@
+contract C {
+ function three() public returns (uint, uint, uint);
+ function two() public returns (uint, uint);
+ function none();
+ function f() public {
+ var (a,) = three();
+ var (b,c,) = two();
+ var (,d) = three();
+ var (,e,g) = two();
+ var (,,) = three();
+ var () = none();
+ a;b;c;d;e;g;
+ }
+}
+// ----
+// Warning: (177-178): Use of the "var" keyword is deprecated.
+// Warning: (205-206): Use of the "var" keyword is deprecated.
+// Warning: (207-208): Use of the "var" keyword is deprecated.
+// Warning: (234-235): Use of the "var" keyword is deprecated.
+// Warning: (262-263): Use of the "var" keyword is deprecated.
+// Warning: (264-265): Use of the "var" keyword is deprecated.
+// Warning: (172-190): Different number of components on the left hand side (2) than on the right hand side (3).
+// Warning: (200-218): Different number of components on the left hand side (3) than on the right hand side (2).
+// Warning: (228-246): Different number of components on the left hand side (2) than on the right hand side (3).
+// Warning: (256-274): Different number of components on the left hand side (3) than on the right hand side (2).
+// Warning: (121-137): No visibility specified. Defaulting to "public".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/240_multi_variable_declaration_wildcards_fail_1.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/240_multi_variable_declaration_wildcards_fail_1.sol
new file mode 100644
index 00000000..526ff4e8
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/240_multi_variable_declaration_wildcards_fail_1.sol
@@ -0,0 +1,9 @@
+contract C {
+ function one() public returns (uint);
+ function f() public { var (a, b, ) = one(); }
+}
+// ----
+// Warning: (86-87): Use of the "var" keyword is deprecated.
+// Warning: (89-90): Use of the "var" keyword is deprecated.
+// Warning: (81-101): Different number of components on the left hand side (3) than on the right hand side (1).
+// TypeError: (81-101): Not enough components (1) in value to assign all variables (2).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/241_multi_variable_declaration_wildcards_fail_2.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/241_multi_variable_declaration_wildcards_fail_2.sol
new file mode 100644
index 00000000..e41edb64
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/241_multi_variable_declaration_wildcards_fail_2.sol
@@ -0,0 +1,8 @@
+contract C {
+ function one() public returns (uint);
+ function f() public { var (a, , ) = one(); }
+}
+// ----
+// Warning: (86-87): Use of the "var" keyword is deprecated.
+// Warning: (81-100): Different number of components on the left hand side (3) than on the right hand side (1).
+// TypeError: (81-100): Not enough components (1) in value to assign all variables (2).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/242_multi_variable_declaration_wildcards_fail_3.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/242_multi_variable_declaration_wildcards_fail_3.sol
new file mode 100644
index 00000000..202b79c6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/242_multi_variable_declaration_wildcards_fail_3.sol
@@ -0,0 +1,8 @@
+contract C {
+ function one() public returns (uint);
+ function f() public { var (, , a) = one(); }
+}
+// ----
+// Warning: (90-91): Use of the "var" keyword is deprecated.
+// Warning: (81-100): Different number of components on the left hand side (3) than on the right hand side (1).
+// TypeError: (81-100): Not enough components (1) in value to assign all variables (2).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/243_multi_variable_declaration_wildcards_fail_4.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/243_multi_variable_declaration_wildcards_fail_4.sol
new file mode 100644
index 00000000..79f2f3b5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/243_multi_variable_declaration_wildcards_fail_4.sol
@@ -0,0 +1,9 @@
+contract C {
+ function one() public returns (uint);
+ function f() public { var (, a, b) = one(); }
+}
+// ----
+// Warning: (88-89): Use of the "var" keyword is deprecated.
+// Warning: (91-92): Use of the "var" keyword is deprecated.
+// Warning: (81-101): Different number of components on the left hand side (3) than on the right hand side (1).
+// TypeError: (81-101): Not enough components (1) in value to assign all variables (2).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/244_tuples.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/244_tuples.sol
new file mode 100644
index 00000000..43553af9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/244_tuples.sol
@@ -0,0 +1,17 @@
+contract C {
+ function f() public {
+ uint a = (1);
+ var (b,) = (uint8(1),);
+ var (c,d) = (uint32(1), 2 + a);
+ var (e,) = (uint64(1), 2, b);
+ a;b;c;d;e;
+ }
+}
+// ----
+// Warning: (74-75): Use of the "var" keyword is deprecated.
+// Warning: (106-107): Use of the "var" keyword is deprecated.
+// Warning: (108-109): Use of the "var" keyword is deprecated.
+// Warning: (146-147): Use of the "var" keyword is deprecated.
+// Warning: (69-91): Different number of components on the left hand side (2) than on the right hand side (1).
+// Warning: (141-169): Different number of components on the left hand side (2) than on the right hand side (3).
+// Warning: (17-195): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/245_tuples_empty_components.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/245_tuples_empty_components.sol
new file mode 100644
index 00000000..7815edea
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/245_tuples_empty_components.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public {
+ (1,,2);
+ }
+}
+// ----
+// TypeError: (47-53): Tuple component cannot be empty.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/246_multi_variable_declaration_wildcards_fail_5.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/246_multi_variable_declaration_wildcards_fail_5.sol
new file mode 100644
index 00000000..3d2d0705
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/246_multi_variable_declaration_wildcards_fail_5.sol
@@ -0,0 +1,6 @@
+contract C {
+ function one() public returns (uint);
+ function f() public { var (,) = one(); }
+}
+// ----
+// TypeError: (81-96): Wildcard both at beginning and end of variable declaration list is only allowed if the number of components is equal.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/247_multi_variable_declaration_wildcards_fail_6.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/247_multi_variable_declaration_wildcards_fail_6.sol
new file mode 100644
index 00000000..734ba09c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/247_multi_variable_declaration_wildcards_fail_6.sol
@@ -0,0 +1,10 @@
+contract C {
+ function two() public returns (uint, uint);
+ function f() public { var (a, b, c) = two(); }
+}
+// ----
+// Warning: (92-93): Use of the "var" keyword is deprecated.
+// Warning: (95-96): Use of the "var" keyword is deprecated.
+// Warning: (98-99): Use of the "var" keyword is deprecated.
+// Warning: (87-108): Different number of components on the left hand side (3) than on the right hand side (2).
+// TypeError: (87-108): Not enough components (2) in value to assign all variables (3).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/248_tuple_assignment_from_void_function.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/248_tuple_assignment_from_void_function.sol
new file mode 100644
index 00000000..f3e02ecb
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/248_tuple_assignment_from_void_function.sol
@@ -0,0 +1,11 @@
+contract C {
+ function f() public { }
+ function g() public {
+ var (x,) = (f(), f());
+ }
+}
+// ----
+// Warning: (80-81): Use of the "var" keyword is deprecated.
+// Warning: (87-90): Tuple component cannot be empty.
+// Warning: (92-95): Tuple component cannot be empty.
+// TypeError: (80-81): Cannot declare variable with void (empty tuple) type.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/249_tuple_compound_assignment.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/249_tuple_compound_assignment.sol
new file mode 100644
index 00000000..bcdbde02
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/249_tuple_compound_assignment.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public returns (uint a, uint b) {
+ (a, b) += (1, 1);
+ }
+}
+// ----
+// TypeError: (72-88): Compound assignment is not allowed for tuple types.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/250_member_access_parser_ambiguity.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/250_member_access_parser_ambiguity.sol
new file mode 100644
index 00000000..f5252180
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/250_member_access_parser_ambiguity.sol
@@ -0,0 +1,17 @@
+contract C {
+ struct R { uint[10][10] y; }
+ struct S { uint a; uint b; uint[20][20][20] c; R d; }
+ S data;
+ function f() public {
+ C.S x = data;
+ C.S memory y;
+ C.S[10] memory z;
+ C.S[10];
+ y.a = 2;
+ x.c[1][2][3] = 9;
+ x.d.y[2][2] = 3;
+ }
+}
+// ----
+// Warning: (150-155): Variable is declared as a storage pointer. Use an explicit "storage" keyword to silence this warning.
+// Warning: (194-210): Unused local variable.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/251_using_for_library.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/251_using_for_library.sol
new file mode 100644
index 00000000..c7dcdbcd
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/251_using_for_library.sol
@@ -0,0 +1,4 @@
+library D { }
+contract C {
+ using D for uint;
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/252_using_for_not_library.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/252_using_for_not_library.sol
new file mode 100644
index 00000000..4693b27f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/252_using_for_not_library.sol
@@ -0,0 +1,6 @@
+contract D { }
+contract C {
+ using D for uint;
+}
+// ----
+// TypeError: (38-39): Library name expected.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/253_using_for_function_exists.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/253_using_for_function_exists.sol
new file mode 100644
index 00000000..9e570805
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/253_using_for_function_exists.sol
@@ -0,0 +1,10 @@
+library D { function double(uint self) public returns (uint) { return 2*self; } }
+contract C {
+ using D for uint;
+ function f(uint a) public {
+ a.double;
+ }
+}
+// ----
+// Warning: (12-79): Function state mutability can be restricted to pure
+// Warning: (121-172): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/254_using_for_function_on_int.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/254_using_for_function_on_int.sol
new file mode 100644
index 00000000..a8e23d0f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/254_using_for_function_on_int.sol
@@ -0,0 +1,9 @@
+library D { function double(uint self) public returns (uint) { return 2*self; } }
+contract C {
+ using D for uint;
+ function f(uint a) public returns (uint) {
+ return a.double();
+ }
+}
+// ----
+// Warning: (12-79): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/255_using_for_function_on_struct.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/255_using_for_function_on_struct.sol
new file mode 100644
index 00000000..2c3deb4c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/255_using_for_function_on_struct.sol
@@ -0,0 +1,8 @@
+library D { struct s { uint a; } function mul(s storage self, uint x) public returns (uint) { return self.a *= x; } }
+contract C {
+ using D for D.s;
+ D.s x;
+ function f(uint a) public returns (uint) {
+ return x.mul(a);
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/256_using_for_overload.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/256_using_for_overload.sol
new file mode 100644
index 00000000..155281f5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/256_using_for_overload.sol
@@ -0,0 +1,14 @@
+library D {
+ struct s { uint a; }
+ function mul(s storage self, uint x) public returns (uint) { return self.a *= x; }
+ function mul(s storage, bytes32) public returns (bytes32) { }
+}
+contract C {
+ using D for D.s;
+ D.s x;
+ function f(uint a) public returns (uint) {
+ return x.mul(a);
+ }
+}
+// ----
+// Warning: (128-189): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/257_using_for_by_name.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/257_using_for_by_name.sol
new file mode 100644
index 00000000..b3eab987
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/257_using_for_by_name.sol
@@ -0,0 +1,8 @@
+library D { struct s { uint a; } function mul(s storage self, uint x) public returns (uint) { return self.a *= x; } }
+contract C {
+ using D for D.s;
+ D.s x;
+ function f(uint a) public returns (uint) {
+ return x.mul({x: a});
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/258_using_for_mismatch.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/258_using_for_mismatch.sol
new file mode 100644
index 00000000..84e42072
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/258_using_for_mismatch.sol
@@ -0,0 +1,9 @@
+library D { function double(bytes32 self) public returns (uint) { return 2; } }
+contract C {
+ using D for uint;
+ function f(uint a) public returns (uint) {
+ return a.double();
+ }
+}
+// ----
+// TypeError: (177-185): Member "double" not found or not visible after argument-dependent lookup in uint256
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/259_using_for_not_used.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/259_using_for_not_used.sol
new file mode 100644
index 00000000..fae918b7
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/259_using_for_not_used.sol
@@ -0,0 +1,11 @@
+library D { function double(uint self) public returns (uint) { return 2; } }
+contract C {
+ using D for uint;
+ function f(uint16 a) public returns (uint) {
+ // This is an error because the function is only bound to uint.
+ // Had it been bound to *, it would have worked.
+ return a.double();
+ }
+}
+// ----
+// TypeError: (305-313): Member "double" not found or not visible after argument-dependent lookup in uint16
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/260_library_memory_struct.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/260_library_memory_struct.sol
new file mode 100644
index 00000000..e06ba2d1
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/260_library_memory_struct.sol
@@ -0,0 +1,8 @@
+pragma experimental ABIEncoderV2;
+library c {
+ struct S { uint x; }
+ function f() public returns (S ) {}
+}
+// ----
+// Warning: (0-33): Experimental features are turned on. Do not use experimental features on live deployments.
+// Warning: (75-110): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/261_using_for_arbitrary_mismatch.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/261_using_for_arbitrary_mismatch.sol
new file mode 100644
index 00000000..ced4705f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/261_using_for_arbitrary_mismatch.sol
@@ -0,0 +1,10 @@
+library D { function double(bytes32 self) public returns (uint) { return 2; } }
+contract C {
+ using D for *;
+ function f(uint a) public returns (uint) {
+ // Bound to a, but self type does not match.
+ return a.double();
+ }
+}
+// ----
+// TypeError: (227-235): Member "double" not found or not visible after argument-dependent lookup in uint256
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/262_bound_function_in_var.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/262_bound_function_in_var.sol
new file mode 100644
index 00000000..09e357e6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/262_bound_function_in_var.sol
@@ -0,0 +1,11 @@
+library D { struct s { uint a; } function mul(s storage self, uint x) public returns (uint) { return self.a *= x; } }
+contract C {
+ using D for D.s;
+ D.s x;
+ function f(uint a) public returns (uint) {
+ var g = x.mul;
+ return g({x: a});
+ }
+}
+// ----
+// Warning: (218-223): Use of the "var" keyword is deprecated.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/263_create_memory_arrays.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/263_create_memory_arrays.sol
new file mode 100644
index 00000000..acb5a0b5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/263_create_memory_arrays.sol
@@ -0,0 +1,16 @@
+library L {
+ struct R { uint[10][10] y; }
+ struct S { uint a; uint b; uint[20][20][20] c; R d; }
+}
+contract C {
+ function f(uint size) public {
+ L.S[][] memory x = new L.S[][](10);
+ var y = new uint[](20);
+ var z = new bytes(size);
+ x;y;z;
+ }
+}
+// ----
+// Warning: (205-210): Use of the "var" keyword is deprecated.
+// Warning: (237-242): Use of the "var" keyword is deprecated.
+// Warning: (122-282): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/264_mapping_in_memory_array.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/264_mapping_in_memory_array.sol
new file mode 100644
index 00000000..8ad26fc0
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/264_mapping_in_memory_array.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f(uint size) public {
+ var x = new mapping(uint => uint)[](4);
+ }
+}
+// ----
+// Warning: (56-61): Use of the "var" keyword is deprecated.
+// TypeError: (68-91): Type cannot live outside storage.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/265_new_for_non_array.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/265_new_for_non_array.sol
new file mode 100644
index 00000000..1dd81fde
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/265_new_for_non_array.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f(uint size) public {
+ var x = new uint(7);
+ }
+}
+// ----
+// Warning: (56-61): Use of the "var" keyword is deprecated.
+// TypeError: (64-72): Contract or array type expected.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/266_invalid_args_creating_memory_array.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/266_invalid_args_creating_memory_array.sol
new file mode 100644
index 00000000..ea3556de
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/266_invalid_args_creating_memory_array.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f(uint size) public {
+ var x = new uint[]();
+ }
+}
+// ----
+// Warning: (56-61): Use of the "var" keyword is deprecated.
+// TypeError: (64-76): Wrong argument count for function call: 0 arguments given but expected 1.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/267_invalid_args_creating_struct.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/267_invalid_args_creating_struct.sol
new file mode 100644
index 00000000..9a169468
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/267_invalid_args_creating_struct.sol
@@ -0,0 +1,10 @@
+contract C {
+ struct S { uint a; uint b; }
+
+ function f() public {
+ var s = S({a: 1});
+ }
+}
+// ----
+// Warning: (81-86): Use of the "var" keyword is deprecated.
+// TypeError: (89-98): Wrong argument count for struct constructor: 1 arguments given but expected 2.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/268_function_overload_array_type.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/268_function_overload_array_type.sol
new file mode 100644
index 00000000..0ff1ed75
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/268_function_overload_array_type.sol
@@ -0,0 +1,7 @@
+ contract M {
+ function f(uint[]);
+ function f(int[]);
+ }
+// ----
+// Warning: (25-44): No visibility specified. Defaulting to "public".
+// Warning: (53-71): No visibility specified. Defaulting to "public".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/269_inline_array_declaration_and_passing_implicit_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/269_inline_array_declaration_and_passing_implicit_conversion.sol
new file mode 100644
index 00000000..023404f7
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/269_inline_array_declaration_and_passing_implicit_conversion.sol
@@ -0,0 +1,11 @@
+ contract C {
+ function f() public returns (uint) {
+ uint8 x = 7;
+ uint16 y = 8;
+ uint32 z = 9;
+ uint32[3] memory ending = [x, y, z];
+ return (ending[1]);
+ }
+ }
+// ----
+// Warning: (25-229): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/270_inline_array_declaration_and_passing_implicit_conversion_strings.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/270_inline_array_declaration_and_passing_implicit_conversion_strings.sol
new file mode 100644
index 00000000..d7765d7b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/270_inline_array_declaration_and_passing_implicit_conversion_strings.sol
@@ -0,0 +1,10 @@
+contract C {
+ function f() public returns (string) {
+ string memory x = "Hello";
+ string memory y = "World";
+ string[2] memory z = [x, y];
+ return (z[0]);
+ }
+}
+// ----
+// Warning: (17-191): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/271_inline_array_declaration_const_int_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/271_inline_array_declaration_const_int_conversion.sol
new file mode 100644
index 00000000..e7036bdf
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/271_inline_array_declaration_const_int_conversion.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() public returns (uint) {
+ uint8[4] memory z = [1,2,3,5];
+ return (z[0]);
+ }
+}
+// ----
+// Warning: (17-121): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/272_inline_array_declaration_const_string_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/272_inline_array_declaration_const_string_conversion.sol
new file mode 100644
index 00000000..dd39af85
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/272_inline_array_declaration_const_string_conversion.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() public returns (string) {
+ string[2] memory z = ["Hello", "World"];
+ return (z[0]);
+ }
+}
+// ----
+// Warning: (17-133): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/273_inline_array_declaration_no_type.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/273_inline_array_declaration_no_type.sol
new file mode 100644
index 00000000..4d3e6aed
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/273_inline_array_declaration_no_type.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public returns (uint) {
+ return ([4,5,6][1]);
+ }
+}
+// ----
+// Warning: (17-88): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/274_inline_array_declaration_no_type_strings.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/274_inline_array_declaration_no_type_strings.sol
new file mode 100644
index 00000000..fbc028c5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/274_inline_array_declaration_no_type_strings.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public returns (string) {
+ return (["foo", "man", "choo"][1]);
+ }
+}
+// ----
+// Warning: (17-105): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/275_inline_struct_declaration_arrays.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/275_inline_struct_declaration_arrays.sol
new file mode 100644
index 00000000..e69c2934
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/275_inline_struct_declaration_arrays.sol
@@ -0,0 +1,13 @@
+contract C {
+ struct S {
+ uint a;
+ string b;
+ }
+ function f() {
+ S[2] memory x = [S({a: 1, b: "fish"}), S({a: 2, b: "fish"})];
+ }
+}
+// ----
+// Warning: (72-162): No visibility specified. Defaulting to "public".
+// Warning: (95-108): Unused local variable.
+// Warning: (72-162): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/276_invalid_types_in_inline_array.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/276_invalid_types_in_inline_array.sol
new file mode 100644
index 00000000..6c8aabd5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/276_invalid_types_in_inline_array.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() public {
+ uint[3] x = [45, 'foo', true];
+ }
+}
+// ----
+// Warning: (47-56): Variable is declared as a storage pointer. Use an explicit "storage" keyword to silence this warning.
+// TypeError: (59-76): Unable to deduce common type for array elements.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/277_dynamic_inline_array.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/277_dynamic_inline_array.sol
new file mode 100644
index 00000000..e613758b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/277_dynamic_inline_array.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() public {
+ uint8[4][4] memory dyn = [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7]];
+ }
+}
+// ----
+// Warning: (47-69): Unused local variable.
+// Warning: (17-135): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/278_lvalues_as_inline_array.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/278_lvalues_as_inline_array.sol
new file mode 100644
index 00000000..5a39f550
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/278_lvalues_as_inline_array.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() public {
+ [1, 2, 3]++;
+ [1, 2, 3] = [4, 5, 6];
+ }
+}
+// ----
+// TypeError: (47-56): Inline array type cannot be declared as LValue.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/279_break_not_in_loop.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/279_break_not_in_loop.sol
new file mode 100644
index 00000000..6b88da44
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/279_break_not_in_loop.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() public {
+ if (true)
+ break;
+ }
+}
+// ----
+// SyntaxError: (69-74): "break" has to be in a "for" or "while" loop.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/280_continue_not_in_loop.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/280_continue_not_in_loop.sol
new file mode 100644
index 00000000..b0e8cda9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/280_continue_not_in_loop.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() public {
+ if (true)
+ continue;
+ }
+}
+// ----
+// SyntaxError: (69-77): "continue" has to be in a "for" or "while" loop.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/281_continue_not_in_loop_2.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/281_continue_not_in_loop_2.sol
new file mode 100644
index 00000000..845faf86
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/281_continue_not_in_loop_2.sol
@@ -0,0 +1,10 @@
+contract C {
+ function f() public {
+ while (true)
+ {
+ }
+ continue;
+ }
+}
+// ----
+// SyntaxError: (88-96): "continue" has to be in a "for" or "while" loop.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/282_invalid_different_types_for_conditional_expression.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/282_invalid_different_types_for_conditional_expression.sol
new file mode 100644
index 00000000..e4e75e3f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/282_invalid_different_types_for_conditional_expression.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public {
+ true ? true : 2;
+ }
+}
+// ----
+// TypeError: (47-62): True expression's type bool doesn't match false expression's type uint8.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/283_left_value_in_conditional_expression_not_supported_yet.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/283_left_value_in_conditional_expression_not_supported_yet.sol
new file mode 100644
index 00000000..ef8f9930
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/283_left_value_in_conditional_expression_not_supported_yet.sol
@@ -0,0 +1,10 @@
+contract C {
+ function f() public {
+ uint x;
+ uint y;
+ (true ? x : y) = 1;
+ }
+}
+// ----
+// TypeError: (80-92): Conditional expression as left value is not supported yet.
+// TypeError: (80-92): Expression has to be an lvalue.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/284_conditional_expression_with_different_struct.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/284_conditional_expression_with_different_struct.sol
new file mode 100644
index 00000000..049d9e21
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/284_conditional_expression_with_different_struct.sol
@@ -0,0 +1,15 @@
+contract C {
+ struct s1 {
+ uint x;
+ }
+ struct s2 {
+ uint x;
+ }
+ function f() public {
+ s1 memory x;
+ s2 memory y;
+ true ? x : y;
+ }
+}
+// ----
+// TypeError: (165-177): True expression's type struct C.s1 memory doesn't match false expression's type struct C.s2 memory.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/285_conditional_expression_with_different_function_type.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/285_conditional_expression_with_different_function_type.sol
new file mode 100644
index 00000000..963fb7da
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/285_conditional_expression_with_different_function_type.sol
@@ -0,0 +1,10 @@
+contract C {
+ function x(bool) public {}
+ function y() public {}
+
+ function f() public {
+ true ? x : y;
+ }
+}
+// ----
+// TypeError: (106-118): True expression's type function (bool) doesn't match false expression's type function ().
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/286_conditional_expression_with_different_enum.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/286_conditional_expression_with_different_enum.sol
new file mode 100644
index 00000000..8c312624
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/286_conditional_expression_with_different_enum.sol
@@ -0,0 +1,13 @@
+contract C {
+ enum small { A, B, C, D }
+ enum big { A, B, C, D }
+
+ function f() public {
+ small x;
+ big y;
+
+ true ? x : y;
+ }
+}
+// ----
+// TypeError: (139-151): True expression's type enum C.small doesn't match false expression's type enum C.big.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/287_conditional_expression_with_different_mapping.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/287_conditional_expression_with_different_mapping.sol
new file mode 100644
index 00000000..8139f3ed
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/287_conditional_expression_with_different_mapping.sol
@@ -0,0 +1,10 @@
+contract C {
+ mapping(uint8 => uint8) table1;
+ mapping(uint32 => uint8) table2;
+
+ function f() public {
+ true ? table1 : table2;
+ }
+}
+// ----
+// TypeError: (121-143): True expression's type mapping(uint8 => uint8) doesn't match false expression's type mapping(uint32 => uint8).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/288_conditional_with_all_types.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/288_conditional_with_all_types.sol
new file mode 100644
index 00000000..4075f6f3
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/288_conditional_with_all_types.sol
@@ -0,0 +1,100 @@
+contract C {
+ struct s1 {
+ uint x;
+ }
+ s1 struct_x;
+ s1 struct_y;
+
+ function fun_x() public {}
+ function fun_y() public {}
+
+ enum small { A, B, C, D }
+
+ mapping(uint8 => uint8) table1;
+ mapping(uint8 => uint8) table2;
+
+ function f() public {
+ // integers
+ uint x;
+ uint y;
+ uint g = true ? x : y;
+ g += 1; // Avoid unused var warning
+
+ // integer constants
+ uint h = true ? 1 : 3;
+ h += 1; // Avoid unused var warning
+
+ // string literal
+ var i = true ? "hello" : "world";
+ i = "used"; //Avoid unused var warning
+ }
+ function f2() public {
+ // bool
+ bool j = true ? true : false;
+ j = j && true; // Avoid unused var warning
+
+ // real is not there yet.
+
+ // array
+ byte[2] memory a;
+ byte[2] memory b;
+ var k = true ? a : b;
+ k[0] = byte(0); //Avoid unused var warning
+
+ bytes memory e;
+ bytes memory f;
+ var l = true ? e : f;
+ l[0] = byte(0); // Avoid unused var warning
+
+ // fixed bytes
+ bytes2 c;
+ bytes2 d;
+ var m = true ? c : d;
+ m &= m;
+
+ }
+ function f3() public {
+ // contract doesn't fit in here
+
+ // struct
+ struct_x = true ? struct_x : struct_y;
+
+ // function
+ var r = true ? fun_x : fun_y;
+ r(); // Avoid unused var warning
+ // enum
+ small enum_x;
+ small enum_y;
+ enum_x = true ? enum_x : enum_y;
+
+ // tuple
+ var (n, o) = true ? (1, 2) : (3, 4);
+ (n, o) = (o, n); // Avoid unused var warning
+ // mapping
+ var p = true ? table1 : table2;
+ p[0] = 0; // Avoid unused var warning
+ // typetype
+ var q = true ? uint32(1) : uint32(2);
+ q += 1; // Avoid unused var warning
+ // modifier doesn't fit in here
+
+ // magic doesn't fit in here
+
+ // module doesn't fit in here
+ }
+}
+// ----
+// Warning: (546-551): Use of the "var" keyword is deprecated.
+// Warning: (878-883): Use of the "var" keyword is deprecated.
+// Warning: (1008-1013): Use of the "var" keyword is deprecated.
+// Warning: (1150-1155): Use of the "var" keyword is deprecated.
+// Warning: (1357-1362): Use of the "var" keyword is deprecated.
+// Warning: (1560-1561): Use of the "var" keyword is deprecated.
+// Warning: (1563-1564): Use of the "var" keyword is deprecated.
+// Warning: (1672-1677): Use of the "var" keyword is deprecated.
+// Warning: (1778-1783): Use of the "var" keyword is deprecated.
+// Warning: (984-998): This declaration shadows an existing declaration.
+// Warning: (90-116): Function state mutability can be restricted to pure
+// Warning: (121-147): Function state mutability can be restricted to pure
+// Warning: (257-632): Function state mutability can be restricted to pure
+// Warning: (637-1194): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/289_uint7_and_uintM_as_identifier.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/289_uint7_and_uintM_as_identifier.sol
new file mode 100644
index 00000000..58e84090
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/289_uint7_and_uintM_as_identifier.sol
@@ -0,0 +1,12 @@
+contract test {
+string uintM = "Hello 4 you";
+ function f() public {
+ uint8 uint7 = 3;
+ uint7 = 5;
+ string memory intM;
+ uint bytesM = 21;
+ intM; bytesM;
+ }
+}
+// ----
+// Warning: (50-197): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/290_varM_disqualified_as_keyword.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/290_varM_disqualified_as_keyword.sol
new file mode 100644
index 00000000..1b6bbae7
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/290_varM_disqualified_as_keyword.sol
@@ -0,0 +1,11 @@
+contract test {
+ function f() public {
+ uintM something = 3;
+ intM should = 4;
+ bytesM fail = "now";
+ }
+}
+// ----
+// DeclarationError: (50-55): Identifier not found or not unique.
+// DeclarationError: (79-83): Identifier not found or not unique.
+// DeclarationError: (104-110): Identifier not found or not unique.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/291_modifier_is_not_a_valid_typename.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/291_modifier_is_not_a_valid_typename.sol
new file mode 100644
index 00000000..2f3143d5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/291_modifier_is_not_a_valid_typename.sol
@@ -0,0 +1,9 @@
+contract test {
+ modifier mod() { _; }
+
+ function f() public {
+ mod g;
+ }
+}
+// ----
+// TypeError: (77-80): Name has to refer to a struct, enum or contract.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/292_modifier_is_not_a_valid_typename_is_not_fatal.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/292_modifier_is_not_a_valid_typename_is_not_fatal.sol
new file mode 100644
index 00000000..9187c19d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/292_modifier_is_not_a_valid_typename_is_not_fatal.sol
@@ -0,0 +1,10 @@
+contract test {
+ modifier mod() { _; }
+
+ function f() public {
+ mod g;
+ g = f;
+ }
+}
+// ----
+// TypeError: (77-80): Name has to refer to a struct, enum or contract.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/293_function_is_not_a_valid_typename.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/293_function_is_not_a_valid_typename.sol
new file mode 100644
index 00000000..390eccd9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/293_function_is_not_a_valid_typename.sol
@@ -0,0 +1,10 @@
+contract test {
+ function foo() public {
+ }
+
+ function f() public {
+ foo g;
+ }
+}
+// ----
+// TypeError: (85-88): Name has to refer to a struct, enum or contract.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/294_long_uint_variable_fails.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/294_long_uint_variable_fails.sol
new file mode 100644
index 00000000..1e608320
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/294_long_uint_variable_fails.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ uint99999999999999999999999999 something = 3;
+ }
+}
+// ----
+// DeclarationError: (50-80): Identifier not found or not unique.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/295_bytes10abc_is_identifier.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/295_bytes10abc_is_identifier.sol
new file mode 100644
index 00000000..8b65fc65
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/295_bytes10abc_is_identifier.sol
@@ -0,0 +1,8 @@
+contract test {
+ function f() public {
+ bytes32 bytes10abc = "abc";
+ }
+}
+// ----
+// Warning: (50-68): Unused local variable.
+// Warning: (20-83): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/296_int10abc_is_identifier.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/296_int10abc_is_identifier.sol
new file mode 100644
index 00000000..2678cfb9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/296_int10abc_is_identifier.sol
@@ -0,0 +1,9 @@
+contract test {
+ function f() public {
+ uint uint10abc = 3;
+ int int10abc = 4;
+ uint10abc; int10abc;
+ }
+}
+// ----
+// Warning: (20-130): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/297_library_functions_do_not_have_value.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/297_library_functions_do_not_have_value.sol
new file mode 100644
index 00000000..918544cc
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/297_library_functions_do_not_have_value.sol
@@ -0,0 +1,8 @@
+library L { function l() public {} }
+contract test {
+ function f() public {
+ L.l.value;
+ }
+}
+// ----
+// TypeError: (87-96): Member "value" not found or not visible after argument-dependent lookup in function () - did you forget the "payable" modifier?
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/298_invalid_fixed_types_0x7_mxn.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/298_invalid_fixed_types_0x7_mxn.sol
new file mode 100644
index 00000000..ea9e5d0f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/298_invalid_fixed_types_0x7_mxn.sol
@@ -0,0 +1,5 @@
+contract test {
+ fixed0x7 a = .3;
+}
+// ----
+// DeclarationError: (20-28): Identifier not found or not unique.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/299_invalid_fixed_types_long_invalid_identifier.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/299_invalid_fixed_types_long_invalid_identifier.sol
new file mode 100644
index 00000000..9ce2b106
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/299_invalid_fixed_types_long_invalid_identifier.sol
@@ -0,0 +1,5 @@
+contract test {
+ fixed99999999999999999999999999999999999999x7 b = 9.5;
+}
+// ----
+// DeclarationError: (20-65): Identifier not found or not unique.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/300_invalid_fixed_types_7x8_mxn.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/300_invalid_fixed_types_7x8_mxn.sol
new file mode 100644
index 00000000..7c511d2f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/300_invalid_fixed_types_7x8_mxn.sol
@@ -0,0 +1,5 @@
+contract test {
+ fixed7x8 c = 3.12345678;
+}
+// ----
+// DeclarationError: (20-28): Identifier not found or not unique.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/301_library_instances_cannot_be_used.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/301_library_instances_cannot_be_used.sol
new file mode 100644
index 00000000..82e4a0d1
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/301_library_instances_cannot_be_used.sol
@@ -0,0 +1,9 @@
+library L { function l() public {} }
+contract test {
+ function f() public {
+ L x;
+ x.l();
+ }
+}
+// ----
+// TypeError: (100-103): Member "l" not found or not visible after argument-dependent lookup in library L
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/302_invalid_fixed_type_long.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/302_invalid_fixed_type_long.sol
new file mode 100644
index 00000000..12679631
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/302_invalid_fixed_type_long.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ fixed8x888888888888888888888888888888888888888888888888888 b;
+ }
+}
+// ----
+// DeclarationError: (50-108): Identifier not found or not unique.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/303_fixed_type_int_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/303_fixed_type_int_conversion.sol
new file mode 100644
index 00000000..ddf1e5fb
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/303_fixed_type_int_conversion.sol
@@ -0,0 +1,11 @@
+contract test {
+ function f() public {
+ uint64 a = 3;
+ int64 b = 4;
+ fixed c = b;
+ ufixed d = a;
+ c; d;
+ }
+}
+// ----
+// Warning: (20-147): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/304_fixed_type_rational_int_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/304_fixed_type_rational_int_conversion.sol
new file mode 100644
index 00000000..16d2cbad
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/304_fixed_type_rational_int_conversion.sol
@@ -0,0 +1,9 @@
+contract test {
+ function f() public {
+ fixed c = 3;
+ ufixed d = 4;
+ c; d;
+ }
+}
+// ----
+// Warning: (20-104): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/305_fixed_type_rational_fraction_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/305_fixed_type_rational_fraction_conversion.sol
new file mode 100644
index 00000000..27029860
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/305_fixed_type_rational_fraction_conversion.sol
@@ -0,0 +1,9 @@
+contract test {
+ function f() public {
+ fixed a = 4.5;
+ ufixed d = 2.5;
+ a; d;
+ }
+}
+// ----
+// Warning: (20-108): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/306_invalid_int_implicit_conversion_from_fixed.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/306_invalid_int_implicit_conversion_from_fixed.sol
new file mode 100644
index 00000000..c0a56314
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/306_invalid_int_implicit_conversion_from_fixed.sol
@@ -0,0 +1,9 @@
+contract test {
+ function f() public {
+ fixed a = 4.5;
+ int b = a;
+ a; b;
+ }
+}
+// ----
+// TypeError: (73-82): Type fixed128x18 is not implicitly convertible to expected type int256.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/307_rational_unary_minus_operation.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/307_rational_unary_minus_operation.sol
new file mode 100644
index 00000000..7827e57b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/307_rational_unary_minus_operation.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() pure public {
+ ufixed16x2 a = 3.25;
+ fixed16x2 b = -3.25;
+ a; b;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/308_rational_unary_plus_operation.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/308_rational_unary_plus_operation.sol
new file mode 100644
index 00000000..eb7c6ea9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/308_rational_unary_plus_operation.sol
@@ -0,0 +1,9 @@
+contract test {
+ function f() pure public {
+ ufixed16x2 a = +3.25;
+ fixed16x2 b = -3.25;
+ a; b;
+ }
+}
+// ----
+// Warning: (70-75): Use of unary + is deprecated.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/309_rational_unary_plus_assignment.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/309_rational_unary_plus_assignment.sol
new file mode 100644
index 00000000..a5bdd6c8
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/309_rational_unary_plus_assignment.sol
@@ -0,0 +1,8 @@
+contract test {
+ function f(uint x) pure public {
+ uint y = +x;
+ y;
+ }
+}
+// ----
+// Warning: (70-72): Use of unary + is deprecated.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/310_rational_unary_plus_operation_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/310_rational_unary_plus_operation_v050.sol
new file mode 100644
index 00000000..140655af
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/310_rational_unary_plus_operation_v050.sol
@@ -0,0 +1,10 @@
+pragma experimental "v0.5.0";
+contract test {
+ function f() pure public {
+ ufixed16x2 a = +3.25;
+ fixed16x2 b = -3.25;
+ a; b;
+ }
+}
+// ----
+// SyntaxError: (100-105): Use of unary + is deprecated.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/311_rational_unary_plus_assignment_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/311_rational_unary_plus_assignment_v050.sol
new file mode 100644
index 00000000..7e5c0feb
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/311_rational_unary_plus_assignment_v050.sol
@@ -0,0 +1,9 @@
+pragma experimental "v0.5.0";
+contract test {
+ function f(uint x) pure public {
+ uint y = +x;
+ y;
+ }
+}
+// ----
+// SyntaxError: (100-102): Use of unary + is deprecated.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/312_leading_zero_rationals_convert.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/312_leading_zero_rationals_convert.sol
new file mode 100644
index 00000000..9fe7c6f7
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/312_leading_zero_rationals_convert.sol
@@ -0,0 +1,9 @@
+contract A {
+ function f() pure public {
+ ufixed16x2 a = 0.5;
+ ufixed256x52 b = 0.0000000000000006661338147750939242541790008544921875;
+ fixed16x2 c = -0.5;
+ fixed256x52 d = -0.0000000000000006661338147750939242541790008544921875;
+ a; b; c; d;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/313_fixed_type_size_capabilities.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/313_fixed_type_size_capabilities.sol
new file mode 100644
index 00000000..441cf81e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/313_fixed_type_size_capabilities.sol
@@ -0,0 +1,13 @@
+contract test {
+ function f() public {
+ ufixed256x1 a = 123456781234567979695948382928485849359686494864095409282048094275023098123.5;
+ ufixed256x77 b = 0.920890746623327805482905058466021565416131529487595827354393978494366605267637;
+ ufixed224x78 c = 0.000000000001519884736399797998492268541131529487595827354393978494366605267646;
+ fixed256x1 d = -123456781234567979695948382928485849359686494864095409282048094275023098123.5;
+ fixed256x76 e = -0.93322335481643744342575580035176794825198893968114429702091846411734101080123;
+ fixed256x79 g = -0.0001178860664374434257558003517679482519889396811442970209184641173410108012309;
+ a; b; c; d; e; g;
+ }
+}
+// ----
+// Warning: (20-707): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/314_fixed_type_zero_handling.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/314_fixed_type_zero_handling.sol
new file mode 100644
index 00000000..5f0d2909
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/314_fixed_type_zero_handling.sol
@@ -0,0 +1,8 @@
+contract test {
+ function f() public {
+ fixed16x2 a = 0; a;
+ ufixed32x1 b = 0; b;
+ }
+}
+// ----
+// Warning: (20-104): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/315_fixed_type_invalid_implicit_conversion_size.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/315_fixed_type_invalid_implicit_conversion_size.sol
new file mode 100644
index 00000000..79698228
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/315_fixed_type_invalid_implicit_conversion_size.sol
@@ -0,0 +1,8 @@
+contract test {
+ function f() public {
+ ufixed a = 11/4;
+ ufixed248x8 b = a; b;
+ }
+}
+// ----
+// TypeError: (75-92): Type ufixed128x18 is not implicitly convertible to expected type ufixed248x8.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/316_fixed_type_invalid_implicit_conversion_lost_data.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/316_fixed_type_invalid_implicit_conversion_lost_data.sol
new file mode 100644
index 00000000..76c0284e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/316_fixed_type_invalid_implicit_conversion_lost_data.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ ufixed256x1 a = 1/3; a;
+ }
+}
+// ----
+// TypeError: (50-69): Type rational_const 1 / 3 is not implicitly convertible to expected type ufixed256x1. Try converting to type ufixed256x77 or use an explicit conversion.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/317_fixed_type_valid_explicit_conversions.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/317_fixed_type_valid_explicit_conversions.sol
new file mode 100644
index 00000000..38801457
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/317_fixed_type_valid_explicit_conversions.sol
@@ -0,0 +1,9 @@
+contract test {
+ function f() public {
+ ufixed256x80 a = ufixed256x80(1/3); a;
+ ufixed248x80 b = ufixed248x80(1/3); b;
+ ufixed8x1 c = ufixed8x1(1/3); c;
+ }
+}
+// ----
+// Warning: (20-182): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/318_invalid_array_declaration_with_rational.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/318_invalid_array_declaration_with_rational.sol
new file mode 100644
index 00000000..3dd779ec
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/318_invalid_array_declaration_with_rational.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ uint[3.5] a; a;
+ }
+}
+// ----
+// TypeError: (55-58): Array with fractional length specified.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/319_invalid_array_declaration_with_signed_fixed_type.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/319_invalid_array_declaration_with_signed_fixed_type.sol
new file mode 100644
index 00000000..83f0950d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/319_invalid_array_declaration_with_signed_fixed_type.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ uint[fixed(3.5)] a; a;
+ }
+}
+// ----
+// TypeError: (55-65): Invalid array length, expected integer literal or constant expression.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/320_invalid_array_declaration_with_unsigned_fixed_type.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/320_invalid_array_declaration_with_unsigned_fixed_type.sol
new file mode 100644
index 00000000..26d5a85e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/320_invalid_array_declaration_with_unsigned_fixed_type.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ uint[ufixed(3.5)] a; a;
+ }
+}
+// ----
+// TypeError: (55-66): Invalid array length, expected integer literal or constant expression.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/321_rational_to_bytes_implicit_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/321_rational_to_bytes_implicit_conversion.sol
new file mode 100644
index 00000000..d209eb76
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/321_rational_to_bytes_implicit_conversion.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ bytes32 c = 3.2; c;
+ }
+}
+// ----
+// TypeError: (50-65): Type rational_const 16 / 5 is not implicitly convertible to expected type bytes32. Try converting to type ufixed8x1 or use an explicit conversion.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/322_fixed_to_bytes_implicit_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/322_fixed_to_bytes_implicit_conversion.sol
new file mode 100644
index 00000000..86736481
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/322_fixed_to_bytes_implicit_conversion.sol
@@ -0,0 +1,8 @@
+contract test {
+ function f() public {
+ fixed a = 3.25;
+ bytes32 c = a; c;
+ }
+}
+// ----
+// TypeError: (74-87): Type fixed128x18 is not implicitly convertible to expected type bytes32.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/323_mapping_with_fixed_literal.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/323_mapping_with_fixed_literal.sol
new file mode 100644
index 00000000..8e28d4e1
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/323_mapping_with_fixed_literal.sol
@@ -0,0 +1,6 @@
+contract test {
+ mapping(ufixed8x1 => string) fixedString;
+ function f() public {
+ fixedString[0.5] = "Half";
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/324_fixed_points_inside_structs.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/324_fixed_points_inside_structs.sol
new file mode 100644
index 00000000..8aa0abc2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/324_fixed_points_inside_structs.sol
@@ -0,0 +1,7 @@
+contract test {
+ struct myStruct {
+ ufixed a;
+ int b;
+ }
+ myStruct a = myStruct(3.125, 3);
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/325_inline_array_fixed_types.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/325_inline_array_fixed_types.sol
new file mode 100644
index 00000000..c46297c3
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/325_inline_array_fixed_types.sol
@@ -0,0 +1,8 @@
+contract test {
+ function f() public {
+ fixed[3] memory a = [fixed(3.5), fixed(-4.25), fixed(967.125)];
+ }
+}
+// ----
+// Warning: (50-67): Unused local variable.
+// Warning: (20-119): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/326_inline_array_rationals.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/326_inline_array_rationals.sol
new file mode 100644
index 00000000..bdc3c2c1
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/326_inline_array_rationals.sol
@@ -0,0 +1,8 @@
+contract test {
+ function f() public {
+ ufixed128x3[4] memory a = [ufixed128x3(3.5), 4.125, 2.5, 4.0];
+ }
+}
+// ----
+// Warning: (50-73): Unused local variable.
+// Warning: (20-118): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/327_rational_index_access.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/327_rational_index_access.sol
new file mode 100644
index 00000000..46e58521
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/327_rational_index_access.sol
@@ -0,0 +1,8 @@
+contract test {
+ function f() public {
+ uint[] memory a;
+ a[.5];
+ }
+}
+// ----
+// TypeError: (77-79): Type rational_const 1 / 2 is not implicitly convertible to expected type uint256. Try converting to type ufixed8x1 or use an explicit conversion.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/328_rational_to_fixed_literal_expression.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/328_rational_to_fixed_literal_expression.sol
new file mode 100644
index 00000000..35456fa6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/328_rational_to_fixed_literal_expression.sol
@@ -0,0 +1,15 @@
+contract test {
+ function f() public {
+ ufixed64x8 a = 3.5 * 3;
+ ufixed64x8 b = 4 - 2.5;
+ ufixed64x8 c = 11 / 4;
+ ufixed240x5 d = 599 + 0.21875;
+ ufixed256x80 e = ufixed256x80(35.245 % 12.9);
+ ufixed256x80 f = ufixed256x80(1.2 % 2);
+ fixed g = 2 ** -2;
+ a; b; c; d; e; f; g;
+ }
+}
+// ----
+// Warning: (238-252): This declaration shadows an existing declaration.
+// Warning: (20-339): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/329_rational_as_exponent_value_signed.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/329_rational_as_exponent_value_signed.sol
new file mode 100644
index 00000000..b835e309
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/329_rational_as_exponent_value_signed.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ fixed g = 2 ** -2.2;
+ }
+}
+// ----
+// TypeError: (60-69): Operator ** not compatible with types int_const 2 and rational_const -11 / 5
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/330_rational_as_exponent_value_unsigned.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/330_rational_as_exponent_value_unsigned.sol
new file mode 100644
index 00000000..04ddf0fd
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/330_rational_as_exponent_value_unsigned.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ ufixed b = 3 ** 2.5;
+ }
+}
+// ----
+// TypeError: (61-69): Operator ** not compatible with types int_const 3 and rational_const 5 / 2
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/331_rational_as_exponent_half.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/331_rational_as_exponent_half.sol
new file mode 100644
index 00000000..4e0894c5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/331_rational_as_exponent_half.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ 2 ** (1/2);
+ }
+}
+// ----
+// TypeError: (50-60): Operator ** not compatible with types int_const 2 and rational_const 1 / 2
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/332_rational_as_exponent_value_neg_quarter.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/332_rational_as_exponent_value_neg_quarter.sol
new file mode 100644
index 00000000..bc127bf5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/332_rational_as_exponent_value_neg_quarter.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ 42 ** (-1/4);
+ }
+}
+// ----
+// TypeError: (50-62): Operator ** not compatible with types int_const 42 and rational_const -1 / 4
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/333_fixed_point_casting_exponents_15.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/333_fixed_point_casting_exponents_15.sol
new file mode 100644
index 00000000..cfaba794
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/333_fixed_point_casting_exponents_15.sol
@@ -0,0 +1,9 @@
+contract test {
+ function f() public {
+ var a = 3 ** ufixed(1.5);
+ }
+}
+// ----
+// Warning: (50-55): Use of the "var" keyword is deprecated.
+// TypeError: (58-74): Operator ** not compatible with types int_const 3 and ufixed128x18
+// Warning: (50-74): The type of this variable was inferred as uint8, which can hold values between 0 and 255. This is probably not desired. Use an explicit type to silence this warning.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/334_fixed_point_casting_exponents_neg.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/334_fixed_point_casting_exponents_neg.sol
new file mode 100644
index 00000000..7d2716fd
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/334_fixed_point_casting_exponents_neg.sol
@@ -0,0 +1,9 @@
+contract test {
+ function f() public {
+ var c = 42 ** fixed(-1/4);
+ }
+}
+// ----
+// Warning: (50-55): Use of the "var" keyword is deprecated.
+// TypeError: (58-75): Operator ** not compatible with types int_const 42 and fixed128x18
+// Warning: (50-75): The type of this variable was inferred as uint8, which can hold values between 0 and 255. This is probably not desired. Use an explicit type to silence this warning.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/335_var_capable_of_holding_constant_rationals.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/335_var_capable_of_holding_constant_rationals.sol
new file mode 100644
index 00000000..dac35a54
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/335_var_capable_of_holding_constant_rationals.sol
@@ -0,0 +1,16 @@
+contract test {
+ function f() public {
+ var a = 0.12345678;
+ var b = 12345678.352;
+ var c = 0.00000009;
+ a; b; c;
+ }
+}
+// ----
+// Warning: (50-55): Use of the "var" keyword is deprecated.
+// Warning: (78-83): Use of the "var" keyword is deprecated.
+// Warning: (108-113): Use of the "var" keyword is deprecated.
+// Warning: (50-68): The type of this variable was inferred as ufixed24x8. This is probably not desired. Use an explicit type to silence this warning.
+// Warning: (78-98): The type of this variable was inferred as ufixed40x3. This is probably not desired. Use an explicit type to silence this warning.
+// Warning: (108-126): The type of this variable was inferred as ufixed8x8. This is probably not desired. Use an explicit type to silence this warning.
+// Warning: (20-150): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/336_var_and_rational_with_tuple.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/336_var_and_rational_with_tuple.sol
new file mode 100644
index 00000000..2f781a5d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/336_var_and_rational_with_tuple.sol
@@ -0,0 +1,12 @@
+contract test {
+ function f() public {
+ var (a, b) = (.5, 1/3);
+ a; b;
+ }
+}
+// ----
+// Warning: (55-56): Use of the "var" keyword is deprecated.
+// Warning: (58-59): Use of the "var" keyword is deprecated.
+// Warning: (50-72): The type of this variable was inferred as ufixed8x1. This is probably not desired. Use an explicit type to silence this warning.
+// Warning: (50-72): The type of this variable was inferred as ufixed256x77. This is probably not desired. Use an explicit type to silence this warning.
+// Warning: (20-93): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/337_var_handle_divided_integers.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/337_var_handle_divided_integers.sol
new file mode 100644
index 00000000..ef2b912c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/337_var_handle_divided_integers.sol
@@ -0,0 +1,10 @@
+contract test {
+ function f() public {
+ var x = 1/3;
+ }
+}
+// ----
+// Warning: (50-55): Use of the "var" keyword is deprecated.
+// Warning: (50-61): The type of this variable was inferred as ufixed256x77. This is probably not desired. Use an explicit type to silence this warning.
+// Warning: (50-55): Unused local variable.
+// Warning: (20-68): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/338_rational_bitnot_unary_operation.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/338_rational_bitnot_unary_operation.sol
new file mode 100644
index 00000000..44a6ab5e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/338_rational_bitnot_unary_operation.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ ~fixed(3.5);
+ }
+}
+// ----
+// TypeError: (50-61): Unary operator ~ cannot be applied to type fixed128x18
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/339_rational_bitor_binary_operation.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/339_rational_bitor_binary_operation.sol
new file mode 100644
index 00000000..29871b04
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/339_rational_bitor_binary_operation.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ fixed(1.5) | 3;
+ }
+}
+// ----
+// TypeError: (50-64): Operator | not compatible with types fixed128x18 and int_const 3
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/340_rational_bitxor_binary_operation.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/340_rational_bitxor_binary_operation.sol
new file mode 100644
index 00000000..1fa7f38f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/340_rational_bitxor_binary_operation.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ fixed(1.75) ^ 3;
+ }
+}
+// ----
+// TypeError: (50-65): Operator ^ not compatible with types fixed128x18 and int_const 3
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/341_rational_bitand_binary_operation.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/341_rational_bitand_binary_operation.sol
new file mode 100644
index 00000000..5a433a61
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/341_rational_bitand_binary_operation.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ fixed(1.75) & 3;
+ }
+}
+// ----
+// TypeError: (50-65): Operator & not compatible with types fixed128x18 and int_const 3
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/342_missing_bool_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/342_missing_bool_conversion.sol
new file mode 100644
index 00000000..5546a099
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/342_missing_bool_conversion.sol
@@ -0,0 +1,7 @@
+contract test {
+ function b(uint a) public {
+ bool(a == 1);
+ }
+}
+// ----
+// Warning: (20-75): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/343_integer_and_fixed_interaction.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/343_integer_and_fixed_interaction.sol
new file mode 100644
index 00000000..af4d048b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/343_integer_and_fixed_interaction.sol
@@ -0,0 +1,8 @@
+contract test {
+ function f() public {
+ ufixed a = uint64(1) + ufixed(2);
+ }
+}
+// ----
+// Warning: (50-58): Unused local variable.
+// Warning: (20-89): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/344_one_divided_by_three_integer_conversion.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/344_one_divided_by_three_integer_conversion.sol
new file mode 100644
index 00000000..ffc168eb
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/344_one_divided_by_three_integer_conversion.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ uint a = 1/3;
+ }
+}
+// ----
+// TypeError: (50-62): Type rational_const 1 / 3 is not implicitly convertible to expected type uint256. Try converting to type ufixed256x77 or use an explicit conversion.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/345_unused_return_value.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/345_unused_return_value.sol
new file mode 100644
index 00000000..7f640505
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/345_unused_return_value.sol
@@ -0,0 +1,8 @@
+contract test {
+ function g() public returns (uint) {}
+ function f() public {
+ g();
+ }
+}
+// ----
+// Warning: (20-57): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/346_unused_return_value_send.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/346_unused_return_value_send.sol
new file mode 100644
index 00000000..929e54b2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/346_unused_return_value_send.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ address(0x12).send(1);
+ }
+}
+// ----
+// Warning: (50-71): Failure condition of 'send' ignored. Consider using 'transfer' instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/347_unused_return_value_call.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/347_unused_return_value_call.sol
new file mode 100644
index 00000000..994a5bdf
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/347_unused_return_value_call.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ address(0x12).call("abc");
+ }
+}
+// ----
+// Warning: (50-75): Return value of low-level calls not used.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/348_unused_return_value_call_value.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/348_unused_return_value_call_value.sol
new file mode 100644
index 00000000..1ac7c6f3
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/348_unused_return_value_call_value.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ address(0x12).call.value(2)("abc");
+ }
+}
+// ----
+// Warning: (50-84): Return value of low-level calls not used.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/349_unused_return_value_callcode.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/349_unused_return_value_callcode.sol
new file mode 100644
index 00000000..a5bda4f6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/349_unused_return_value_callcode.sol
@@ -0,0 +1,8 @@
+contract test {
+ function f() public {
+ address(0x12).callcode("abc");
+ }
+}
+// ----
+// Warning: (50-79): Return value of low-level calls not used.
+// Warning: (50-72): "callcode" has been deprecated in favour of "delegatecall".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/350_unused_return_value_delegatecall.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/350_unused_return_value_delegatecall.sol
new file mode 100644
index 00000000..701b6e7d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/350_unused_return_value_delegatecall.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() public {
+ address(0x12).delegatecall("abc");
+ }
+}
+// ----
+// Warning: (50-83): Return value of low-level calls not used.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/351_callcode_deprecated.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/351_callcode_deprecated.sol
new file mode 100644
index 00000000..422de58c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/351_callcode_deprecated.sol
@@ -0,0 +1,7 @@
+contract test {
+ function f() pure public {
+ address(0x12).callcode;
+ }
+}
+// ----
+// Warning: (55-77): "callcode" has been deprecated in favour of "delegatecall".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/352_callcode_deprecated_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/352_callcode_deprecated_v050.sol
new file mode 100644
index 00000000..c0e29b38
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/352_callcode_deprecated_v050.sol
@@ -0,0 +1,8 @@
+pragma experimental "v0.5.0";
+contract test {
+ function f() pure public {
+ address(0x12).callcode;
+ }
+}
+// ----
+// TypeError: (85-107): "callcode" has been deprecated in favour of "delegatecall".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/353_callcode_not_deprecated_as_function.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/353_callcode_not_deprecated_as_function.sol
new file mode 100644
index 00000000..714014f8
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/353_callcode_not_deprecated_as_function.sol
@@ -0,0 +1,5 @@
+contract test {
+ function callcode() pure public {
+ test.callcode();
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/354_payable_in_library.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/354_payable_in_library.sol
new file mode 100644
index 00000000..410842cb
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/354_payable_in_library.sol
@@ -0,0 +1,5 @@
+library test {
+ function f() payable public {}
+}
+// ----
+// TypeError: (19-49): Library functions cannot be payable.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/355_payable_external.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/355_payable_external.sol
new file mode 100644
index 00000000..3b75e1b7
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/355_payable_external.sol
@@ -0,0 +1,3 @@
+contract test {
+ function f() payable external {}
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/356_payable_internal.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/356_payable_internal.sol
new file mode 100644
index 00000000..f6ccf6b6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/356_payable_internal.sol
@@ -0,0 +1,5 @@
+contract test {
+ function f() payable internal {}
+}
+// ----
+// TypeError: (20-52): Internal functions cannot be payable.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/357_payable_private.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/357_payable_private.sol
new file mode 100644
index 00000000..7b00ea6c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/357_payable_private.sol
@@ -0,0 +1,5 @@
+contract test {
+ function f() payable private {}
+}
+// ----
+// TypeError: (20-51): Internal functions cannot be payable.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/358_illegal_override_payable.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/358_illegal_override_payable.sol
new file mode 100644
index 00000000..6696772e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/358_illegal_override_payable.sol
@@ -0,0 +1,4 @@
+contract B { function f() payable public {} }
+contract C is B { function f() public {} }
+// ----
+// TypeError: (64-86): Overriding function changes state mutability from "payable" to "nonpayable".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/359_illegal_override_payable_nonpayable.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/359_illegal_override_payable_nonpayable.sol
new file mode 100644
index 00000000..99b45fdd
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/359_illegal_override_payable_nonpayable.sol
@@ -0,0 +1,4 @@
+contract B { function f() public {} }
+contract C is B { function f() payable public {} }
+// ----
+// TypeError: (56-86): Overriding function changes state mutability from "nonpayable" to "payable".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/360_function_variable_mixin.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/360_function_variable_mixin.sol
new file mode 100644
index 00000000..583e0d46
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/360_function_variable_mixin.sol
@@ -0,0 +1,12 @@
+// bug #1798 (cpp-ethereum), related to #1286 (solidity)
+contract attribute {
+ bool ok = false;
+}
+contract func {
+ function ok() public returns (bool) { return true; }
+}
+contract attr_func is attribute, func {
+ function checkOk() public returns (bool) { return ok(); }
+}
+// ----
+// DeclarationError: (121-173): Identifier already declared.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/361_calling_payable.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/361_calling_payable.sol
new file mode 100644
index 00000000..8ef4d579
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/361_calling_payable.sol
@@ -0,0 +1,6 @@
+contract receiver { function pay() payable public {} }
+contract test {
+ function f() public { (new receiver()).pay.value(10)(); }
+ receiver r = new receiver();
+ function g() public { r.pay.value(10)(); }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/362_calling_nonpayable.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/362_calling_nonpayable.sol
new file mode 100644
index 00000000..d47ea2bd
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/362_calling_nonpayable.sol
@@ -0,0 +1,6 @@
+contract receiver { function nopay() public {} }
+contract test {
+ function f() public { (new receiver()).nopay.value(10)(); }
+}
+// ----
+// TypeError: (91-119): Member "value" not found or not visible after argument-dependent lookup in function () external - did you forget the "payable" modifier?
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/363_non_payable_constructor.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/363_non_payable_constructor.sol
new file mode 100644
index 00000000..5a6b7b11
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/363_non_payable_constructor.sol
@@ -0,0 +1,12 @@
+contract C {
+ function C() { }
+}
+contract D {
+ function f() public returns (uint) {
+ (new C).value(2)();
+ return 2;
+ }
+}
+// ----
+// Warning: (17-33): Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(...) { ... }" instead.
+// TypeError: (98-111): Member "value" not found or not visible after argument-dependent lookup in function () returns (contract C) - did you forget the "payable" modifier?
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/366_invalid_array_as_statement.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/366_invalid_array_as_statement.sol
new file mode 100644
index 00000000..150ba9ca
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/366_invalid_array_as_statement.sol
@@ -0,0 +1,7 @@
+contract test {
+ struct S { uint x; }
+ function test(uint k) public { S[k]; }
+}
+// ----
+// Warning: (45-83): Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(...) { ... }" instead.
+// TypeError: (78-79): Integer constant expected.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/367_using_directive_for_missing_selftype.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/367_using_directive_for_missing_selftype.sol
new file mode 100644
index 00000000..415acb3c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/367_using_directive_for_missing_selftype.sol
@@ -0,0 +1,14 @@
+library B {
+ function b() public {}
+}
+
+contract A {
+ using B for bytes;
+
+ function a() public {
+ bytes memory x;
+ x.b();
+ }
+}
+// ----
+// TypeError: (137-140): Member "b" not found or not visible after argument-dependent lookup in bytes memory
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/368_shift_constant_left_negative_rvalue.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/368_shift_constant_left_negative_rvalue.sol
new file mode 100644
index 00000000..9c941a68
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/368_shift_constant_left_negative_rvalue.sol
@@ -0,0 +1,5 @@
+contract C {
+ uint public a = 0x42 << -8;
+}
+// ----
+// TypeError: (33-43): Operator << not compatible with types int_const 66 and int_const -8
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/369_shift_constant_right_negative_rvalue.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/369_shift_constant_right_negative_rvalue.sol
new file mode 100644
index 00000000..55f385c6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/369_shift_constant_right_negative_rvalue.sol
@@ -0,0 +1,5 @@
+contract C {
+ uint public a = 0x42 >> -8;
+}
+// ----
+// TypeError: (33-43): Operator >> not compatible with types int_const 66 and int_const -8
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/370_shift_constant_left_excessive_rvalue.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/370_shift_constant_left_excessive_rvalue.sol
new file mode 100644
index 00000000..e23c7a84
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/370_shift_constant_left_excessive_rvalue.sol
@@ -0,0 +1,5 @@
+contract C {
+ uint public a = 0x42 << 0x100000000;
+}
+// ----
+// TypeError: (33-52): Operator << not compatible with types int_const 66 and int_const 4294967296
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/371_shift_constant_right_excessive_rvalue.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/371_shift_constant_right_excessive_rvalue.sol
new file mode 100644
index 00000000..5533644f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/371_shift_constant_right_excessive_rvalue.sol
@@ -0,0 +1,5 @@
+contract C {
+ uint public a = 0x42 >> 0x100000000;
+}
+// ----
+// TypeError: (33-52): Operator >> not compatible with types int_const 66 and int_const 4294967296
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/372_shift_constant_right_fractional.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/372_shift_constant_right_fractional.sol
new file mode 100644
index 00000000..38d9b051
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/372_shift_constant_right_fractional.sol
@@ -0,0 +1,5 @@
+contract C {
+ uint public a = 0x42 >> (1 / 2);
+}
+// ----
+// TypeError: (33-48): Operator >> not compatible with types int_const 66 and rational_const 1 / 2
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/373_inline_assembly_unbalanced_positive_stack.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/373_inline_assembly_unbalanced_positive_stack.sol
new file mode 100644
index 00000000..273e1844
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/373_inline_assembly_unbalanced_positive_stack.sol
@@ -0,0 +1,10 @@
+contract test {
+ function f() public {
+ assembly {
+ 1
+ }
+ }
+}
+// ----
+// Warning: (73-74): Top-level expressions are not supposed to return values (this expression returns 1 value). Use ``pop()`` or assign them.
+// DeclarationError: (59-84): Unbalanced stack at the end of a block: 1 surplus item(s).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/374_inline_assembly_unbalanced_negative_stack.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/374_inline_assembly_unbalanced_negative_stack.sol
new file mode 100644
index 00000000..bda090b4
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/374_inline_assembly_unbalanced_negative_stack.sol
@@ -0,0 +1,10 @@
+contract test {
+ function f() public {
+ assembly {
+ pop
+ }
+ }
+}
+// ----
+// Warning: (73-76): The use of non-functional instructions is deprecated. Please use functional notation instead.
+// DeclarationError: (59-86): Unbalanced stack at the end of a block: 1 missing item(s).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/375_inline_assembly_unbalanced_two_stack_load.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/375_inline_assembly_unbalanced_two_stack_load.sol
new file mode 100644
index 00000000..4cda64e7
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/375_inline_assembly_unbalanced_two_stack_load.sol
@@ -0,0 +1,9 @@
+pragma experimental "v0.5.0";
+contract c {
+ uint8 x;
+ function f() public {
+ assembly { pop(x) }
+ }
+}
+// ----
+// TypeError: (105-106): Only local variables are supported. To access storage variables, use the _slot and _offset suffixes.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/376_inline_assembly_in_modifier.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/376_inline_assembly_in_modifier.sol
new file mode 100644
index 00000000..d6dcc4d0
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/376_inline_assembly_in_modifier.sol
@@ -0,0 +1,14 @@
+pragma experimental "v0.5.0";
+contract test {
+ modifier m {
+ uint a = 1;
+ assembly {
+ a := 2
+ }
+ _;
+ }
+ function f() public m {
+ }
+}
+// ----
+// Warning: (152-181): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/377_inline_assembly_storage.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/377_inline_assembly_storage.sol
new file mode 100644
index 00000000..9a2065e2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/377_inline_assembly_storage.sol
@@ -0,0 +1,11 @@
+pragma experimental "v0.5.0";
+contract test {
+ uint x = 1;
+ function f() public {
+ assembly {
+ x := 2
+ }
+ }
+}
+// ----
+// TypeError: (119-120): Only local variables are supported. To access storage variables, use the _slot and _offset suffixes.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/378_inline_assembly_storage_in_modifiers.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/378_inline_assembly_storage_in_modifiers.sol
new file mode 100644
index 00000000..b99179ef
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/378_inline_assembly_storage_in_modifiers.sol
@@ -0,0 +1,14 @@
+pragma experimental "v0.5.0";
+contract test {
+ uint x = 1;
+ modifier m {
+ assembly {
+ x := 2
+ }
+ _;
+ }
+ function f() public m {
+ }
+}
+// ----
+// TypeError: (110-111): Only local variables are supported. To access storage variables, use the _slot and _offset suffixes.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/379_inline_assembly_constant_assign.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/379_inline_assembly_constant_assign.sol
new file mode 100644
index 00000000..866232dd
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/379_inline_assembly_constant_assign.sol
@@ -0,0 +1,11 @@
+pragma experimental "v0.5.0";
+contract test {
+ uint constant x = 1;
+ function f() public {
+ assembly {
+ x := 2
+ }
+ }
+}
+// ----
+// TypeError: (128-129): Constant variables not supported by inline assembly.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/380_inline_assembly_constant_access.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/380_inline_assembly_constant_access.sol
new file mode 100644
index 00000000..a41858a0
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/380_inline_assembly_constant_access.sol
@@ -0,0 +1,11 @@
+pragma experimental "v0.5.0";
+contract test {
+ uint constant x = 1;
+ function f() public {
+ assembly {
+ let y := x
+ }
+ }
+}
+// ----
+// TypeError: (137-138): Constant variables not supported by inline assembly.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/381_inline_assembly_local_variable_access_out_of_functions.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/381_inline_assembly_local_variable_access_out_of_functions.sol
new file mode 100644
index 00000000..93004ef6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/381_inline_assembly_local_variable_access_out_of_functions.sol
@@ -0,0 +1,11 @@
+pragma experimental "v0.5.0";
+contract test {
+ function f() public {
+ uint a;
+ assembly {
+ function g() -> x { x := a }
+ }
+ }
+}
+// ----
+// DeclarationError: (144-145): Cannot access local Solidity variables from inside an inline assembly function.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/382_inline_assembly_local_variable_access_out_of_functions_storage_ptr.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/382_inline_assembly_local_variable_access_out_of_functions_storage_ptr.sol
new file mode 100644
index 00000000..913ea725
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/382_inline_assembly_local_variable_access_out_of_functions_storage_ptr.sol
@@ -0,0 +1,12 @@
+pragma experimental "v0.5.0";
+contract test {
+ uint[] r;
+ function f() public {
+ uint[] storage a = r;
+ assembly {
+ function g() -> x { x := a_offset }
+ }
+ }
+}
+// ----
+// DeclarationError: (172-180): Cannot access local Solidity variables from inside an inline assembly function.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/383_inline_assembly_storage_variable_access_out_of_functions.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/383_inline_assembly_storage_variable_access_out_of_functions.sol
new file mode 100644
index 00000000..7528f355
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/383_inline_assembly_storage_variable_access_out_of_functions.sol
@@ -0,0 +1,9 @@
+pragma experimental "v0.5.0";
+contract test {
+ uint a;
+ function f() pure public {
+ assembly {
+ function g() -> x { x := a_slot }
+ }
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/384_inline_assembly_constant_variable_via_offset.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/384_inline_assembly_constant_variable_via_offset.sol
new file mode 100644
index 00000000..6470a210
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/384_inline_assembly_constant_variable_via_offset.sol
@@ -0,0 +1,10 @@
+contract test {
+ uint constant x = 2;
+ function f() pure public {
+ assembly {
+ let r := x_offset
+ }
+ }
+}
+// ----
+// TypeError: (112-120): Constant variables not supported by inline assembly.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/385_inline_assembly_calldata_variables.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/385_inline_assembly_calldata_variables.sol
new file mode 100644
index 00000000..d95fd978
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/385_inline_assembly_calldata_variables.sol
@@ -0,0 +1,10 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f(bytes bytesAsCalldata) external {
+ assembly {
+ let x := bytesAsCalldata
+ }
+ }
+}
+// ----
+// TypeError: (132-147): Call data elements cannot be accessed directly. Copy to a local variable first or use "calldataload" or "calldatacopy" with manually determined offsets and sizes.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/386_inline_assembly_050_literals_on_stack.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/386_inline_assembly_050_literals_on_stack.sol
new file mode 100644
index 00000000..a5f0f96c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/386_inline_assembly_050_literals_on_stack.sol
@@ -0,0 +1,11 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f() pure public {
+ assembly {
+ 1
+ }
+ }
+}
+// ----
+// SyntaxError: (105-106): Top-level expressions are not supposed to return values (this expression returns 1 value). Use ``pop()`` or assign them.
+// DeclarationError: (91-116): Unbalanced stack at the end of a block: 1 surplus item(s).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/387_inline_assembly_literals_on_stack.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/387_inline_assembly_literals_on_stack.sol
new file mode 100644
index 00000000..7b68c60b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/387_inline_assembly_literals_on_stack.sol
@@ -0,0 +1,10 @@
+contract C {
+ function f() pure public {
+ assembly {
+ 1
+ }
+ }
+}
+// ----
+// Warning: (75-76): Top-level expressions are not supposed to return values (this expression returns 1 value). Use ``pop()`` or assign them.
+// DeclarationError: (61-86): Unbalanced stack at the end of a block: 1 surplus item(s).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/388_inline_assembly_050_bare_instructions.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/388_inline_assembly_050_bare_instructions.sol
new file mode 100644
index 00000000..4a7aca8a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/388_inline_assembly_050_bare_instructions.sol
@@ -0,0 +1,12 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f() view public {
+ assembly {
+ address
+ pop
+ }
+ }
+}
+// ----
+// SyntaxError: (105-112): The use of non-functional instructions is deprecated. Please use functional notation instead.
+// SyntaxError: (125-128): The use of non-functional instructions is deprecated. Please use functional notation instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/389_inline_assembly_bare_instructions.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/389_inline_assembly_bare_instructions.sol
new file mode 100644
index 00000000..c44412cf
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/389_inline_assembly_bare_instructions.sol
@@ -0,0 +1,11 @@
+contract C {
+ function f() view public {
+ assembly {
+ address
+ pop
+ }
+ }
+}
+// ----
+// Warning: (75-82): The use of non-functional instructions is deprecated. Please use functional notation instead.
+// Warning: (95-98): The use of non-functional instructions is deprecated. Please use functional notation instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/390_inline_assembly_050_labels.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/390_inline_assembly_050_labels.sol
new file mode 100644
index 00000000..77a73ebc
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/390_inline_assembly_050_labels.sol
@@ -0,0 +1,11 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f() pure public {
+ assembly {
+ label:
+ }
+ }
+}
+// ----
+// SyntaxError: (105-110): The use of labels is deprecated. Please use "if", "switch", "for" or function calls instead.
+// SyntaxError: (105-110): Jump instructions and labels are low-level EVM features that can lead to incorrect stack access. Because of that they are discouraged. Please consider using "switch", "if" or "for" statements instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/391_inline_assembly_labels.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/391_inline_assembly_labels.sol
new file mode 100644
index 00000000..15bd6660
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/391_inline_assembly_labels.sol
@@ -0,0 +1,10 @@
+contract C {
+ function f() pure public {
+ assembly {
+ label:
+ }
+ }
+}
+// ----
+// Warning: (75-80): The use of labels is deprecated. Please use "if", "switch", "for" or function calls instead.
+// Warning: (75-80): Jump instructions and labels are low-level EVM features that can lead to incorrect stack access. Because of that they are discouraged. Please consider using "switch", "if" or "for" statements instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/392_inline_assembly_050_jump.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/392_inline_assembly_050_jump.sol
new file mode 100644
index 00000000..0c98ada1
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/392_inline_assembly_050_jump.sol
@@ -0,0 +1,10 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f() pure public {
+ assembly {
+ jump(2)
+ }
+ }
+}
+// ----
+// SyntaxError: (105-112): Jump instructions and labels are low-level EVM features that can lead to incorrect stack access. Because of that they are discouraged. Please consider using "switch", "if" or "for" statements instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/393_inline_assembly_jump.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/393_inline_assembly_jump.sol
new file mode 100644
index 00000000..c3c82ce8
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/393_inline_assembly_jump.sol
@@ -0,0 +1,10 @@
+contract C {
+ function f() pure public {
+ assembly {
+ jump(2)
+ }
+ }
+}
+// ----
+// Warning: (75-82): Jump instructions and labels are low-level EVM features that can lead to incorrect stack access. Because of that they are discouraged. Please consider using "switch", "if" or "for" statements instead.
+// TypeError: (75-82): Function declared as pure, but this expression (potentially) modifies the state and thus requires non-payable (the default) or payable.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/394_inline_assembly_050_leave_items_on_stack.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/394_inline_assembly_050_leave_items_on_stack.sol
new file mode 100644
index 00000000..f72fe741
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/394_inline_assembly_050_leave_items_on_stack.sol
@@ -0,0 +1,11 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f() pure public {
+ assembly {
+ mload(0)
+ }
+ }
+}
+// ----
+// SyntaxError: (105-113): Top-level expressions are not supposed to return values (this expression returns 1 value). Use ``pop()`` or assign them.
+// DeclarationError: (91-123): Unbalanced stack at the end of a block: 1 surplus item(s).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/395_inline_assembly_leave_items_on_stack.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/395_inline_assembly_leave_items_on_stack.sol
new file mode 100644
index 00000000..56043ccf
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/395_inline_assembly_leave_items_on_stack.sol
@@ -0,0 +1,10 @@
+contract C {
+ function f() pure public {
+ assembly {
+ mload(0)
+ }
+ }
+}
+// ----
+// Warning: (75-83): Top-level expressions are not supposed to return values (this expression returns 1 value). Use ``pop()`` or assign them.
+// DeclarationError: (61-93): Unbalanced stack at the end of a block: 1 surplus item(s).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/396_invalid_mobile_type.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/396_invalid_mobile_type.sol
new file mode 100644
index 00000000..536dd317
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/396_invalid_mobile_type.sol
@@ -0,0 +1,8 @@
+ contract C {
+ function f() public {
+ // Invalid number
+ [1, 78901234567890123456789012345678901234567890123456789345678901234567890012345678012345678901234567];
+ }
+ }
+// ----
+// TypeError: (93-191): Invalid rational number.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/397_warns_msg_value_in_non_payable_public_function.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/397_warns_msg_value_in_non_payable_public_function.sol
new file mode 100644
index 00000000..4e1f62e1
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/397_warns_msg_value_in_non_payable_public_function.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() view public {
+ msg.value;
+ }
+}
+// ----
+// Warning: (52-61): "msg.value" used in non-payable function. Do you want to add the "payable" modifier to this function?
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/398_does_not_warn_msg_value_in_payable_function.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/398_does_not_warn_msg_value_in_payable_function.sol
new file mode 100644
index 00000000..f14e86ed
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/398_does_not_warn_msg_value_in_payable_function.sol
@@ -0,0 +1,5 @@
+contract C {
+ function f() payable public {
+ msg.value;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/399_does_not_warn_msg_value_in_internal_function.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/399_does_not_warn_msg_value_in_internal_function.sol
new file mode 100644
index 00000000..8492e691
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/399_does_not_warn_msg_value_in_internal_function.sol
@@ -0,0 +1,5 @@
+contract C {
+ function f() view internal {
+ msg.value;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/400_does_not_warn_msg_value_in_library.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/400_does_not_warn_msg_value_in_library.sol
new file mode 100644
index 00000000..ce59047e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/400_does_not_warn_msg_value_in_library.sol
@@ -0,0 +1,5 @@
+library C {
+ function f() view public {
+ msg.value;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/401_does_not_warn_msg_value_in_modifier_following_non_payable_public_function.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/401_does_not_warn_msg_value_in_modifier_following_non_payable_public_function.sol
new file mode 100644
index 00000000..dc1da7c4
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/401_does_not_warn_msg_value_in_modifier_following_non_payable_public_function.sol
@@ -0,0 +1,4 @@
+contract c {
+ function f() pure public { }
+ modifier m() { msg.value; _; }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/402_assignment_to_constant.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/402_assignment_to_constant.sol
new file mode 100644
index 00000000..7433bdea
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/402_assignment_to_constant.sol
@@ -0,0 +1,6 @@
+contract c {
+ uint constant a = 1;
+ function f() public { a = 2; }
+}
+// ----
+// TypeError: (64-65): Cannot assign to a constant variable.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/403_return_structs.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/403_return_structs.sol
new file mode 100644
index 00000000..5583dbff
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/403_return_structs.sol
@@ -0,0 +1,11 @@
+pragma experimental ABIEncoderV2;
+contract C {
+ struct S { uint a; T[] sub; }
+ struct T { uint[] x; }
+ function f() returns (uint, S) {
+ }
+}
+// ----
+// Warning: (0-33): Experimental features are turned on. Do not use experimental features on live deployments.
+// Warning: (112-150): No visibility specified. Defaulting to "public".
+// Warning: (112-150): Function state mutability can be restricted to pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/404_read_returned_struct.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/404_read_returned_struct.sol
new file mode 100644
index 00000000..dd16eae4
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/404_read_returned_struct.sol
@@ -0,0 +1,12 @@
+pragma experimental ABIEncoderV2;
+contract A {
+ struct T {
+ int x;
+ int y;
+ }
+ function g() public returns (T) {
+ return this.g();
+ }
+}
+// ----
+// Warning: (0-33): Experimental features are turned on. Do not use experimental features on live deployments.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/405_address_checksum_type_deduction.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/405_address_checksum_type_deduction.sol
new file mode 100644
index 00000000..221d513e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/405_address_checksum_type_deduction.sol
@@ -0,0 +1,9 @@
+contract C {
+ function f() public {
+ var x = 0xfA0bFc97E48458494Ccd857e1A85DC91F7F0046E;
+ x.send(2);
+ }
+}
+// ----
+// Warning: (47-52): Use of the "var" keyword is deprecated.
+// Warning: (107-116): Failure condition of 'send' ignored. Consider using 'transfer' instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/406_invalid_address_checksum.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/406_invalid_address_checksum.sol
new file mode 100644
index 00000000..8084e0d1
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/406_invalid_address_checksum.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() pure public {
+ address x = 0xFA0bFc97E48458494Ccd857e1A85DC91F7F0046E;
+ x;
+ }
+}
+// ----
+// Warning: (64-106): This looks like an address but has an invalid checksum. If this is not used as an address, please prepend '00'. Correct checksummed address: '0xfA0bFc97E48458494Ccd857e1A85DC91F7F0046E'. For more information please see https://solidity.readthedocs.io/en/develop/types.html#address-literals
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/407_invalid_address_no_checksum.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/407_invalid_address_no_checksum.sol
new file mode 100644
index 00000000..51521fe6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/407_invalid_address_no_checksum.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() pure public {
+ address x = 0xfa0bfc97e48458494ccd857e1a85dc91f7f0046e;
+ x;
+ }
+}
+// ----
+// Warning: (64-106): This looks like an address but has an invalid checksum. If this is not used as an address, please prepend '00'. Correct checksummed address: '0xfA0bFc97E48458494Ccd857e1A85DC91F7F0046E'. For more information please see https://solidity.readthedocs.io/en/develop/types.html#address-literals
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/408_invalid_address_length_short.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/408_invalid_address_length_short.sol
new file mode 100644
index 00000000..4dd93c63
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/408_invalid_address_length_short.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() pure public {
+ address x = 0xA0bFc97E48458494Ccd857e1A85DC91F7F0046E;
+ x;
+ }
+}
+// ----
+// Warning: (64-105): This looks like an address but has an invalid checksum. If this is not used as an address, please prepend '00'. Correct checksummed address: '0x0A0BfC97E48458494ccD857e1A85Dc91f7f0046e'. For more information please see https://solidity.readthedocs.io/en/develop/types.html#address-literals
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/409_invalid_address_length_long.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/409_invalid_address_length_long.sol
new file mode 100644
index 00000000..37c6aa05
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/409_invalid_address_length_long.sol
@@ -0,0 +1,9 @@
+contract C {
+ function f() pure public {
+ address x = 0xFA0bFc97E48458494Ccd857e1A85DC91F7F0046E0;
+ x;
+ }
+}
+// ----
+// Warning: (64-107): This looks like an address but has an invalid checksum. If this is not used as an address, please prepend '00'. For more information please see https://solidity.readthedocs.io/en/develop/types.html#address-literals
+// TypeError: (52-107): Type int_const 2284...(42 digits omitted)...9360 is not implicitly convertible to expected type address.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/410_string_literal_not_convertible_to_address_as_assignment.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/410_string_literal_not_convertible_to_address_as_assignment.sol
new file mode 100644
index 00000000..13bd1a8f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/410_string_literal_not_convertible_to_address_as_assignment.sol
@@ -0,0 +1,6 @@
+// A previous implementation claimed the string would be an address
+contract AddrString {
+ address public test = "0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c";
+}
+// ----
+// TypeError: (116-160): Type literal_string "0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c" is not implicitly convertible to expected type address.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/411_string_literal_not_convertible_to_address_as_return_value.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/411_string_literal_not_convertible_to_address_as_return_value.sol
new file mode 100644
index 00000000..d6b7b987
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/411_string_literal_not_convertible_to_address_as_return_value.sol
@@ -0,0 +1,8 @@
+// A previous implementation claimed the string would be an address
+contract AddrString {
+ function f() public returns (address) {
+ return "0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c";
+ }
+}
+// ----
+// TypeError: (149-193): Return argument type literal_string "0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c" is not implicitly convertible to expected type (type of first return variable) address.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/412_early_exit_on_fatal_errors.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/412_early_exit_on_fatal_errors.sol
new file mode 100644
index 00000000..979f0eb6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/412_early_exit_on_fatal_errors.sol
@@ -0,0 +1,11 @@
+// This tests a crash that occured because we did not stop for fatal errors.
+contract C {
+ struct S {
+ ftring a;
+ }
+ S public s;
+ function s() s {
+ }
+}
+// ----
+// DeclarationError: (113-119): Identifier not found or not unique.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/413_address_methods.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/413_address_methods.sol
new file mode 100644
index 00000000..ee4acdcc
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/413_address_methods.sol
@@ -0,0 +1,15 @@
+contract C {
+ function f() public {
+ address addr;
+ uint balance = addr.balance;
+ bool callRet = addr.call();
+ bool callcodeRet = addr.callcode();
+ bool delegatecallRet = addr.delegatecall();
+ bool sendRet = addr.send(1);
+ addr.transfer(1);
+ callRet; callcodeRet; delegatecallRet; sendRet;
+ }
+}
+// ----
+// Warning: (161-174): "callcode" has been deprecated in favour of "delegatecall".
+// Warning: (69-81): Unused local variable.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/414_interface.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/414_interface.sol
new file mode 100644
index 00000000..77baf7bf
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/414_interface.sol
@@ -0,0 +1,2 @@
+interface I {
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/415_interface_functions.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/415_interface_functions.sol
new file mode 100644
index 00000000..1f227b54
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/415_interface_functions.sol
@@ -0,0 +1,9 @@
+interface I {
+ function();
+ function f();
+}
+// ----
+// Warning: (18-29): Functions in interfaces should be declared external.
+// Warning: (34-47): Functions in interfaces should be declared external.
+// Warning: (18-29): No visibility specified. Defaulting to "public". In interfaces it defaults to external.
+// Warning: (34-47): No visibility specified. Defaulting to "public". In interfaces it defaults to external.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/416_interface_function_bodies.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/416_interface_function_bodies.sol
new file mode 100644
index 00000000..24b26c04
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/416_interface_function_bodies.sol
@@ -0,0 +1,7 @@
+interface I {
+ function f() public {
+ }
+}
+// ----
+// TypeError: (18-45): Functions in interfaces cannot have an implementation.
+// Warning: (18-45): Functions in interfaces should be declared external.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/417_interface_events.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/417_interface_events.sol
new file mode 100644
index 00000000..5959f50d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/417_interface_events.sol
@@ -0,0 +1,3 @@
+interface I {
+ event E();
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/418_interface_inheritance.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/418_interface_inheritance.sol
new file mode 100644
index 00000000..92683cda
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/418_interface_inheritance.sol
@@ -0,0 +1,6 @@
+interface A {
+}
+interface I is A {
+}
+// ----
+// TypeError: (31-32): Interfaces cannot inherit.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/419_interface_structs.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/419_interface_structs.sol
new file mode 100644
index 00000000..2afef06c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/419_interface_structs.sol
@@ -0,0 +1,7 @@
+interface I {
+ struct A {
+ }
+}
+// ----
+// Warning: (18-34): Defining empty structs is deprecated.
+// TypeError: (18-34): Structs cannot be defined in interfaces.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/420_interface_variables.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/420_interface_variables.sol
new file mode 100644
index 00000000..a4292c41
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/420_interface_variables.sol
@@ -0,0 +1,5 @@
+interface I {
+ uint a;
+}
+// ----
+// TypeError: (18-24): Variables cannot be declared in interfaces.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/421_interface_function_parameters.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/421_interface_function_parameters.sol
new file mode 100644
index 00000000..05e2dcfd
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/421_interface_function_parameters.sol
@@ -0,0 +1,5 @@
+interface I {
+ function f(uint a) public returns (bool);
+}
+// ----
+// Warning: (18-59): Functions in interfaces should be declared external.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/422_interface_enums.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/422_interface_enums.sol
new file mode 100644
index 00000000..5513817d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/422_interface_enums.sol
@@ -0,0 +1,5 @@
+interface I {
+ enum A { B, C }
+}
+// ----
+// TypeError: (18-33): Enumerable cannot be declared in interfaces.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/423_using_interface.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/423_using_interface.sol
new file mode 100644
index 00000000..f06ffa62
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/423_using_interface.sol
@@ -0,0 +1,10 @@
+interface I {
+ function f();
+}
+contract C is I {
+ function f() public {
+ }
+}
+// ----
+// Warning: (18-31): Functions in interfaces should be declared external.
+// Warning: (18-31): No visibility specified. Defaulting to "public". In interfaces it defaults to external.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/424_using_interface_complex.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/424_using_interface_complex.sol
new file mode 100644
index 00000000..a73c29bf
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/424_using_interface_complex.sol
@@ -0,0 +1,17 @@
+interface I {
+ event A();
+ function f();
+ function g();
+ function();
+}
+contract C is I {
+ function f() public {
+ }
+}
+// ----
+// Warning: (33-46): Functions in interfaces should be declared external.
+// Warning: (51-64): Functions in interfaces should be declared external.
+// Warning: (69-80): Functions in interfaces should be declared external.
+// Warning: (33-46): No visibility specified. Defaulting to "public". In interfaces it defaults to external.
+// Warning: (51-64): No visibility specified. Defaulting to "public". In interfaces it defaults to external.
+// Warning: (69-80): No visibility specified. Defaulting to "public". In interfaces it defaults to external.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/425_interface_implement_public_contract.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/425_interface_implement_public_contract.sol
new file mode 100644
index 00000000..d8540288
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/425_interface_implement_public_contract.sol
@@ -0,0 +1,7 @@
+interface I {
+ function f() external;
+}
+contract C is I {
+ function f() public {
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/426_throw_is_deprecated.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/426_throw_is_deprecated.sol
new file mode 100644
index 00000000..510c0d01
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/426_throw_is_deprecated.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() pure public {
+ throw;
+ }
+}
+// ----
+// Warning: (52-57): "throw" is deprecated in favour of "revert()", "require()" and "assert()".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/427_throw_is_deprecated_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/427_throw_is_deprecated_v050.sol
new file mode 100644
index 00000000..170d47d9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/427_throw_is_deprecated_v050.sol
@@ -0,0 +1,8 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f() pure public {
+ throw;
+ }
+}
+// ----
+// SyntaxError: (82-87): "throw" is deprecated in favour of "revert()", "require()" and "assert()".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/428_bare_revert.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/428_bare_revert.sol
new file mode 100644
index 00000000..8e7817ff
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/428_bare_revert.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f(uint x) pure public {
+ if (x > 7)
+ revert;
+ }
+}
+// ----
+// TypeError: (81-87): No matching declaration found after variable lookup.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/429_revert_with_reason.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/429_revert_with_reason.sol
new file mode 100644
index 00000000..36c238be
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/429_revert_with_reason.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f(uint x) pure public {
+ if (x > 7)
+ revert("abc");
+ else
+ revert();
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/430_bare_selfdestruct.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/430_bare_selfdestruct.sol
new file mode 100644
index 00000000..9adc3d39
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/430_bare_selfdestruct.sol
@@ -0,0 +1,5 @@
+contract C {
+ function f() pure public { selfdestruct; }
+}
+// ----
+// Warning: (44-56): Statement has no effect.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/431_bare_assert.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/431_bare_assert.sol
new file mode 100644
index 00000000..38cea057
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/431_bare_assert.sol
@@ -0,0 +1,5 @@
+contract C {
+ function f() pure public { assert; }
+}
+// ----
+// Warning: (44-50): Statement has no effect.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/432_bare_require.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/432_bare_require.sol
new file mode 100644
index 00000000..62fe8baf
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/432_bare_require.sol
@@ -0,0 +1,6 @@
+contract C {
+ // This is different because it does have overloads.
+ function f() pure public { require; }
+}
+// ----
+// TypeError: (101-108): No matching declaration found after variable lookup.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/433_pure_statement_in_for_loop.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/433_pure_statement_in_for_loop.sol
new file mode 100644
index 00000000..8cb090bb
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/433_pure_statement_in_for_loop.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() pure public {
+ for (uint x = 0; x < 10; true)
+ x++;
+ }
+}
+// ----
+// Warning: (77-81): Statement has no effect.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/434_pure_statement_check_for_regular_for_loop.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/434_pure_statement_check_for_regular_for_loop.sol
new file mode 100644
index 00000000..319e4202
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/434_pure_statement_check_for_regular_for_loop.sol
@@ -0,0 +1,6 @@
+contract C {
+ function f() pure public {
+ for (uint x = 0; true; x++)
+ {}
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/435_warn_unused_local.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/435_warn_unused_local.sol
new file mode 100644
index 00000000..7d7f5728
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/435_warn_unused_local.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() pure public {
+ uint a;
+ }
+}
+// ----
+// Warning: (52-58): Unused local variable.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/436_warn_unused_local_assigned.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/436_warn_unused_local_assigned.sol
new file mode 100644
index 00000000..b3d28374
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/436_warn_unused_local_assigned.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() pure public {
+ uint a = 1;
+ }
+}
+// ----
+// Warning: (52-58): Unused local variable.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/437_warn_unused_function_parameter.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/437_warn_unused_function_parameter.sol
new file mode 100644
index 00000000..8a36eaad
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/437_warn_unused_function_parameter.sol
@@ -0,0 +1,6 @@
+contract C {
+ function f(uint a) pure public {
+ }
+}
+// ----
+// Warning: (28-34): Unused function parameter. Remove or comment out the variable name to silence this warning.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/438_unused_unnamed_function_parameter.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/438_unused_unnamed_function_parameter.sol
new file mode 100644
index 00000000..5d059b93
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/438_unused_unnamed_function_parameter.sol
@@ -0,0 +1,4 @@
+contract C {
+ function f(uint) pure public {
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/439_warn_unused_return_parameter.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/439_warn_unused_return_parameter.sol
new file mode 100644
index 00000000..b1422c4f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/439_warn_unused_return_parameter.sol
@@ -0,0 +1,6 @@
+contract C {
+ function f() pure public returns (uint a) {
+ }
+}
+// ----
+// Warning: (51-57): Unused function parameter. Remove or comment out the variable name to silence this warning.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/440_warn_unused_return_parameter_with_explicit_return.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/440_warn_unused_return_parameter_with_explicit_return.sol
new file mode 100644
index 00000000..af67f491
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/440_warn_unused_return_parameter_with_explicit_return.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() pure public returns (uint a) {
+ return;
+ }
+}
+// ----
+// Warning: (51-57): Unused function parameter. Remove or comment out the variable name to silence this warning.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/441_unused_unnamed_return_parameter.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/441_unused_unnamed_return_parameter.sol
new file mode 100644
index 00000000..8c47484b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/441_unused_unnamed_return_parameter.sol
@@ -0,0 +1,4 @@
+contract C {
+ function f() pure public returns (uint) {
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/442_named_return_parameter.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/442_named_return_parameter.sol
new file mode 100644
index 00000000..a2faf06a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/442_named_return_parameter.sol
@@ -0,0 +1,5 @@
+contract C {
+ function f() pure public returns (uint a) {
+ a = 1;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/443_named_return_parameter_with_explicit_return.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/443_named_return_parameter_with_explicit_return.sol
new file mode 100644
index 00000000..93851e7c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/443_named_return_parameter_with_explicit_return.sol
@@ -0,0 +1,5 @@
+contract C {
+ function f() pure public returns (uint a) {
+ return 1;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/444_unnamed_return_parameter_with_explicit_return.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/444_unnamed_return_parameter_with_explicit_return.sol
new file mode 100644
index 00000000..b552a745
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/444_unnamed_return_parameter_with_explicit_return.sol
@@ -0,0 +1,5 @@
+contract C {
+ function f() pure public returns (uint) {
+ return 1;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/445_no_unused_warning_interface_arguments.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/445_no_unused_warning_interface_arguments.sol
new file mode 100644
index 00000000..203217ce
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/445_no_unused_warning_interface_arguments.sol
@@ -0,0 +1,3 @@
+interface I {
+ function f(uint a) pure external returns (uint b);
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/446_no_unused_warning_abstract_arguments.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/446_no_unused_warning_abstract_arguments.sol
new file mode 100644
index 00000000..fbb6e079
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/446_no_unused_warning_abstract_arguments.sol
@@ -0,0 +1,3 @@
+contract C {
+ function f(uint a) pure public returns (uint b);
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/447_no_unused_warnings.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/447_no_unused_warnings.sol
new file mode 100644
index 00000000..f549308a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/447_no_unused_warnings.sol
@@ -0,0 +1,6 @@
+contract C {
+ function f(uint a) pure public returns (uint b) {
+ uint c = 1;
+ b = a + c;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/448_no_unused_dec_after_use.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/448_no_unused_dec_after_use.sol
new file mode 100644
index 00000000..3bfa9cb8
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/448_no_unused_dec_after_use.sol
@@ -0,0 +1,6 @@
+contract C {
+ function f() pure public {
+ a = 7;
+ uint a;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/449_no_unused_inline_asm.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/449_no_unused_inline_asm.sol
new file mode 100644
index 00000000..2b39b9fd
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/449_no_unused_inline_asm.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() pure public {
+ uint a;
+ assembly {
+ a := 1
+ }
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/450_shadowing_builtins_with_functions.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/450_shadowing_builtins_with_functions.sol
new file mode 100644
index 00000000..33ccb356
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/450_shadowing_builtins_with_functions.sol
@@ -0,0 +1,5 @@
+contract C {
+ function keccak256() pure public {}
+}
+// ----
+// Warning: (17-52): This declaration shadows a builtin symbol.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/451_shadowing_builtins_with_variables.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/451_shadowing_builtins_with_variables.sol
new file mode 100644
index 00000000..1d6f098e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/451_shadowing_builtins_with_variables.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() pure public {
+ uint msg;
+ msg;
+ }
+}
+// ----
+// Warning: (52-60): This declaration shadows a builtin symbol.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/452_shadowing_builtins_with_storage_variables.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/452_shadowing_builtins_with_storage_variables.sol
new file mode 100644
index 00000000..d5635887
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/452_shadowing_builtins_with_storage_variables.sol
@@ -0,0 +1,5 @@
+contract C {
+ uint msg;
+}
+// ----
+// Warning: (17-25): This declaration shadows a builtin symbol.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/453_shadowing_builtin_at_global_scope.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/453_shadowing_builtin_at_global_scope.sol
new file mode 100644
index 00000000..0946dc57
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/453_shadowing_builtin_at_global_scope.sol
@@ -0,0 +1,4 @@
+contract msg {
+}
+// ----
+// Warning: (0-16): This declaration shadows a builtin symbol.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/454_shadowing_builtins_with_parameters.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/454_shadowing_builtins_with_parameters.sol
new file mode 100644
index 00000000..454929d1
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/454_shadowing_builtins_with_parameters.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f(uint require) pure public {
+ require = 2;
+ }
+}
+// ----
+// Warning: (28-40): This declaration shadows a builtin symbol.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/455_shadowing_builtins_with_return_parameters.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/455_shadowing_builtins_with_return_parameters.sol
new file mode 100644
index 00000000..7931053f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/455_shadowing_builtins_with_return_parameters.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() pure public returns (uint require) {
+ require = 2;
+ }
+}
+// ----
+// Warning: (51-63): This declaration shadows a builtin symbol.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/456_shadowing_builtins_with_events.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/456_shadowing_builtins_with_events.sol
new file mode 100644
index 00000000..e5b635df
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/456_shadowing_builtins_with_events.sol
@@ -0,0 +1,5 @@
+contract C {
+ event keccak256();
+}
+// ----
+// Warning: (17-35): This declaration shadows a builtin symbol.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/457_shadowing_builtins_ignores_struct.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/457_shadowing_builtins_ignores_struct.sol
new file mode 100644
index 00000000..4c70b4ce
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/457_shadowing_builtins_ignores_struct.sol
@@ -0,0 +1,5 @@
+contract C {
+ struct a {
+ uint msg;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/458_shadowing_builtins_ignores_constructor.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/458_shadowing_builtins_ignores_constructor.sol
new file mode 100644
index 00000000..86c0b4f0
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/458_shadowing_builtins_ignores_constructor.sol
@@ -0,0 +1,3 @@
+contract C {
+ constructor() public {}
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/459_function_overload_is_not_shadowing.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/459_function_overload_is_not_shadowing.sol
new file mode 100644
index 00000000..1b44b5c6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/459_function_overload_is_not_shadowing.sol
@@ -0,0 +1,4 @@
+contract C {
+ function f() pure public {}
+ function f(uint) pure public {}
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/460_function_override_is_not_shadowing.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/460_function_override_is_not_shadowing.sol
new file mode 100644
index 00000000..c765ff00
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/460_function_override_is_not_shadowing.sol
@@ -0,0 +1,4 @@
+contract D { function f() pure public {} }
+contract C is D {
+ function f(uint) pure public {}
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/461_event_parameter_cannot_shadow_state_variable.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/461_event_parameter_cannot_shadow_state_variable.sol
new file mode 100644
index 00000000..6e1f654d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/461_event_parameter_cannot_shadow_state_variable.sol
@@ -0,0 +1,4 @@
+contract C {
+ address a;
+ event E(address a);
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/462_callable_crash.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/462_callable_crash.sol
new file mode 100644
index 00000000..94e81de6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/462_callable_crash.sol
@@ -0,0 +1,10 @@
+contract C {
+ struct S { uint a; bool x; }
+ S public s;
+ function C() public {
+ 3({a: 1, x: true});
+ }
+}
+// ----
+// Warning: (66-121): Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(...) { ... }" instead.
+// TypeError: (96-114): Type is not callable
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/463_error_transfer_non_payable_fallback.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/463_error_transfer_non_payable_fallback.sol
new file mode 100644
index 00000000..3f6b0283
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/463_error_transfer_non_payable_fallback.sol
@@ -0,0 +1,17 @@
+// This used to be a test for a.transfer to generate a warning
+// because A's fallback function is not payable.
+
+contract A {
+ function() public {}
+}
+
+contract B {
+ A a;
+
+ function() public {
+ a.transfer(100);
+ }
+}
+// ----
+// Warning: (209-219): Using contract member "transfer" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).transfer" instead.
+// TypeError: (209-219): Value transfer to a contract without a payable fallback function.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/464_error_transfer_no_fallback.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/464_error_transfer_no_fallback.sol
new file mode 100644
index 00000000..afa86040
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/464_error_transfer_no_fallback.sol
@@ -0,0 +1,15 @@
+// This used to be a test for a.transfer to generate a warning
+// because A does not have a payable fallback function.
+
+contract A {}
+
+contract B {
+ A a;
+
+ function() public {
+ a.transfer(100);
+ }
+}
+// ----
+// Warning: (190-200): Using contract member "transfer" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).transfer" instead.
+// TypeError: (190-200): Value transfer to a contract without a payable fallback function.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/465_error_send_non_payable_fallback.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/465_error_send_non_payable_fallback.sol
new file mode 100644
index 00000000..36f7470b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/465_error_send_non_payable_fallback.sol
@@ -0,0 +1,17 @@
+// This used to be a test for a.send to generate a warning
+// because A does not have a payable fallback function.
+
+contract A {
+ function() public {}
+}
+
+contract B {
+ A a;
+
+ function() public {
+ require(a.send(100));
+ }
+}
+// ----
+// Warning: (220-226): Using contract member "send" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).send" instead.
+// TypeError: (220-226): Value transfer to a contract without a payable fallback function.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/466_does_not_error_transfer_payable_fallback.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/466_does_not_error_transfer_payable_fallback.sol
new file mode 100644
index 00000000..1fa567eb
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/466_does_not_error_transfer_payable_fallback.sol
@@ -0,0 +1,16 @@
+// This used to be a test for a.transfer to generate a warning
+// because A does not have a payable fallback function.
+
+contract A {
+ function() payable public {}
+}
+
+contract B {
+ A a;
+
+ function() public {
+ a.transfer(100);
+ }
+}
+// ----
+// Warning: (224-234): Using contract member "transfer" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).transfer" instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/467_does_not_error_transfer_regular_function.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/467_does_not_error_transfer_regular_function.sol
new file mode 100644
index 00000000..bf027e22
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/467_does_not_error_transfer_regular_function.sol
@@ -0,0 +1,11 @@
+contract A {
+ function transfer() pure public {}
+}
+
+contract B {
+ A a;
+
+ function() public {
+ a.transfer();
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/470_specified_storage_no_warn.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/470_specified_storage_no_warn.sol
new file mode 100644
index 00000000..490a0032
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/470_specified_storage_no_warn.sol
@@ -0,0 +1,8 @@
+contract C {
+ struct S { uint a; string b; }
+ S x;
+ function f() view public {
+ S storage y = x;
+ y;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/471_unspecified_storage_warn.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/471_unspecified_storage_warn.sol
new file mode 100644
index 00000000..aa16a6b4
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/471_unspecified_storage_warn.sol
@@ -0,0 +1,10 @@
+contract C {
+ struct S { uint a; }
+ S x;
+ function f() view public {
+ S y = x;
+ y;
+ }
+}
+// ----
+// Warning: (86-89): Variable is declared as a storage pointer. Use an explicit "storage" keyword to silence this warning.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/472_unspecified_storage_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/472_unspecified_storage_v050.sol
new file mode 100644
index 00000000..179c9931
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/472_unspecified_storage_v050.sol
@@ -0,0 +1,11 @@
+pragma experimental "v0.5.0";
+contract C {
+ struct S { uint a; }
+ S x;
+ function f() view public {
+ S y = x;
+ y;
+ }
+}
+// ----
+// TypeError: (116-119): Data location must be specified as either "memory" or "storage".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/473_storage_location_non_array_or_struct_disallowed.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/473_storage_location_non_array_or_struct_disallowed.sol
new file mode 100644
index 00000000..6c9f50af
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/473_storage_location_non_array_or_struct_disallowed.sol
@@ -0,0 +1,5 @@
+contract C {
+ function f(uint storage a) public { }
+}
+// ----
+// TypeError: (28-42): Data location can only be given for array or struct types.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/474_storage_location_non_array_or_struct_disallowed_is_not_fatal.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/474_storage_location_non_array_or_struct_disallowed_is_not_fatal.sol
new file mode 100644
index 00000000..a2f47407
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/474_storage_location_non_array_or_struct_disallowed_is_not_fatal.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f(uint storage a) public {
+ a = f;
+ }
+}
+// ----
+// TypeError: (28-42): Data location can only be given for array or struct types.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/475_implicit_conversion_disallowed.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/475_implicit_conversion_disallowed.sol
new file mode 100644
index 00000000..232e701d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/475_implicit_conversion_disallowed.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() public returns (bytes4) {
+ uint32 tmp = 1;
+ return tmp;
+ }
+}
+// ----
+// TypeError: (95-98): Return argument type uint32 is not implicitly convertible to expected type (type of first return variable) bytes4.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/476_too_large_arrays_for_calldata_external.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/476_too_large_arrays_for_calldata_external.sol
new file mode 100644
index 00000000..de8b7501
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/476_too_large_arrays_for_calldata_external.sol
@@ -0,0 +1,6 @@
+contract C {
+ function f(uint[85678901234] a) pure external {
+ }
+}
+// ----
+// TypeError: (28-47): Array is too large to be encoded.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/477_too_large_arrays_for_calldata_internal.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/477_too_large_arrays_for_calldata_internal.sol
new file mode 100644
index 00000000..ab57f489
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/477_too_large_arrays_for_calldata_internal.sol
@@ -0,0 +1,6 @@
+contract C {
+ function f(uint[85678901234] a) pure internal {
+ }
+}
+// ----
+// TypeError: (28-47): Array is too large to be encoded.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/478_too_large_arrays_for_calldata_public.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/478_too_large_arrays_for_calldata_public.sol
new file mode 100644
index 00000000..1493f3ca
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/478_too_large_arrays_for_calldata_public.sol
@@ -0,0 +1,6 @@
+contract C {
+ function f(uint[85678901234] a) pure public {
+ }
+}
+// ----
+// TypeError: (28-47): Array is too large to be encoded.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/479_explicit_literal_to_memory_string_assignment.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/479_explicit_literal_to_memory_string_assignment.sol
new file mode 100644
index 00000000..508a9439
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/479_explicit_literal_to_memory_string_assignment.sol
@@ -0,0 +1,6 @@
+contract C {
+ function f() pure public {
+ string memory x = "abc";
+ x;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/480_explicit_literal_to_storage_string_assignment.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/480_explicit_literal_to_storage_string_assignment.sol
new file mode 100644
index 00000000..ee56204a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/480_explicit_literal_to_storage_string_assignment.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() pure public {
+ string storage x = "abc";
+ }
+}
+// ----
+// TypeError: (52-76): Type literal_string "abc" is not implicitly convertible to expected type string storage pointer.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/481_explicit_literal_to_unspecified_string_assignment.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/481_explicit_literal_to_unspecified_string_assignment.sol
new file mode 100644
index 00000000..9801b831
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/481_explicit_literal_to_unspecified_string_assignment.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() pure public {
+ string x = "abc";
+ }
+}
+// ----
+// Warning: (52-60): Variable is declared as a storage pointer. Use an explicit "storage" keyword to silence this warning.
+// TypeError: (52-68): Type literal_string "abc" is not implicitly convertible to expected type string storage pointer.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/482_explicit_literal_to_unspecified_string.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/482_explicit_literal_to_unspecified_string.sol
new file mode 100644
index 00000000..a83eee72
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/482_explicit_literal_to_unspecified_string.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() pure public {
+ string("abc");
+ }
+}
+// ----
+// TypeError: (52-65): Explicit type conversion not allowed from "literal_string "abc"" to "string storage pointer".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/483_modifiers_access_storage_pointer.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/483_modifiers_access_storage_pointer.sol
new file mode 100644
index 00000000..be1920e9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/483_modifiers_access_storage_pointer.sol
@@ -0,0 +1,7 @@
+contract C {
+ struct S { uint a; }
+ modifier m(S storage x) {
+ x;
+ _;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/484_function_types_selector_1.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/484_function_types_selector_1.sol
new file mode 100644
index 00000000..76c3fcd6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/484_function_types_selector_1.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() view returns (bytes4) {
+ return f.selector;
+ }
+}
+// ----
+// TypeError: (69-79): Member "selector" not found or not visible after argument-dependent lookup in function () view returns (bytes4)
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/485_function_types_selector_2.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/485_function_types_selector_2.sol
new file mode 100644
index 00000000..b21a5d3d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/485_function_types_selector_2.sol
@@ -0,0 +1,9 @@
+contract C {
+ function g() pure internal {
+ }
+ function f() view returns (bytes4) {
+ return g.selector;
+ }
+}
+// ----
+// TypeError: (108-118): Member "selector" not found or not visible after argument-dependent lookup in function () pure
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/486_function_types_selector_3.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/486_function_types_selector_3.sol
new file mode 100644
index 00000000..3567c44f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/486_function_types_selector_3.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() view returns (bytes4) {
+ function () g;
+ return g.selector;
+ }
+}
+// ----
+// TypeError: (92-102): Member "selector" not found or not visible after argument-dependent lookup in function ()
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/487_function_types_selector_4.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/487_function_types_selector_4.sol
new file mode 100644
index 00000000..4c3c72e8
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/487_function_types_selector_4.sol
@@ -0,0 +1,5 @@
+contract C {
+ function f() pure external returns (bytes4) {
+ return this.f.selector;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/488_function_types_selector_5.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/488_function_types_selector_5.sol
new file mode 100644
index 00000000..2b96a7ee
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/488_function_types_selector_5.sol
@@ -0,0 +1,10 @@
+contract C {
+ function h() pure external {
+ }
+ function f() view external returns (bytes4) {
+ var g = this.h;
+ return g.selector;
+ }
+}
+// ----
+// Warning: (110-115): Use of the "var" keyword is deprecated.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/489_function_types_selector_6.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/489_function_types_selector_6.sol
new file mode 100644
index 00000000..0114e282
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/489_function_types_selector_6.sol
@@ -0,0 +1,8 @@
+contract C {
+ function h() pure external {
+ }
+ function f() view external returns (bytes4) {
+ function () pure external g = this.h;
+ return g.selector;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/490_function_types_selector_7.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/490_function_types_selector_7.sol
new file mode 100644
index 00000000..ed6c01c5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/490_function_types_selector_7.sol
@@ -0,0 +1,11 @@
+contract C {
+ function h() pure external {
+ }
+ function f() view external returns (bytes4) {
+ function () pure external g = this.h;
+ var i = g;
+ return i.selector;
+ }
+}
+// ----
+// Warning: (156-161): Use of the "var" keyword is deprecated.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/491_using_this_in_constructor.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/491_using_this_in_constructor.sol
new file mode 100644
index 00000000..7921a1fa
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/491_using_this_in_constructor.sol
@@ -0,0 +1,9 @@
+contract C {
+ constructor() public {
+ this.f();
+ }
+ function f() pure public {
+ }
+}
+// ----
+// Warning: (48-52): "this" used in constructor. Note that external functions of a contract cannot be called while it is being constructed.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/492_do_not_crash_on_not_lvalue.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/492_do_not_crash_on_not_lvalue.sol
new file mode 100644
index 00000000..90275804
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/492_do_not_crash_on_not_lvalue.sol
@@ -0,0 +1,11 @@
+// This checks for a bug that caused a crash because of continued analysis.
+contract C {
+ mapping (uint => uint) m;
+ function f() public {
+ m(1) = 2;
+ }
+}
+// ----
+// TypeError: (153-157): Type is not callable
+// TypeError: (153-157): Expression has to be an lvalue.
+// TypeError: (160-161): Type int_const 2 is not implicitly convertible to expected type tuple().
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/493_builtin_keccak256_reject_gas.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/493_builtin_keccak256_reject_gas.sol
new file mode 100644
index 00000000..bc8c7867
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/493_builtin_keccak256_reject_gas.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public {
+ keccak256.gas();
+ }
+}
+// ----
+// TypeError: (47-60): Member "gas" not found or not visible after argument-dependent lookup in function () pure returns (bytes32)
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/494_builtin_sha256_reject_gas.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/494_builtin_sha256_reject_gas.sol
new file mode 100644
index 00000000..f29cd7dd
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/494_builtin_sha256_reject_gas.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public {
+ sha256.gas();
+ }
+}
+// ----
+// TypeError: (47-57): Member "gas" not found or not visible after argument-dependent lookup in function () pure returns (bytes32)
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/495_builtin_ripemd160_reject_gas.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/495_builtin_ripemd160_reject_gas.sol
new file mode 100644
index 00000000..b20255fb
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/495_builtin_ripemd160_reject_gas.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public {
+ ripemd160.gas();
+ }
+}
+// ----
+// TypeError: (47-60): Member "gas" not found or not visible after argument-dependent lookup in function () pure returns (bytes20)
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/496_builtin_ecrecover_reject_gas.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/496_builtin_ecrecover_reject_gas.sol
new file mode 100644
index 00000000..0a874f5d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/496_builtin_ecrecover_reject_gas.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public {
+ ecrecover.gas();
+ }
+}
+// ----
+// TypeError: (47-60): Member "gas" not found or not visible after argument-dependent lookup in function (bytes32,uint8,bytes32,bytes32) pure returns (address)
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/497_gasleft.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/497_gasleft.sol
new file mode 100644
index 00000000..20f33887
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/497_gasleft.sol
@@ -0,0 +1,3 @@
+contract C {
+ function f() public view returns (uint256 val) { return gasleft(); }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/498_msg_gas_deprecated.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/498_msg_gas_deprecated.sol
new file mode 100644
index 00000000..d917b840
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/498_msg_gas_deprecated.sol
@@ -0,0 +1,5 @@
+contract C {
+ function f() public view returns (uint256 val) { return msg.gas; }
+}
+// ----
+// Warning: (73-80): "msg.gas" has been deprecated in favor of "gasleft()"
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/499_msg_gas_deprecated_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/499_msg_gas_deprecated_v050.sol
new file mode 100644
index 00000000..31fd40da
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/499_msg_gas_deprecated_v050.sol
@@ -0,0 +1,6 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f() public returns (uint256 val) { return msg.gas; }
+}
+// ----
+// TypeError: (98-105): "msg.gas" has been deprecated in favor of "gasleft()"
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/500_gasleft_shadowing_1.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/500_gasleft_shadowing_1.sol
new file mode 100644
index 00000000..66b88c49
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/500_gasleft_shadowing_1.sol
@@ -0,0 +1,6 @@
+contract C {
+ function gasleft() public pure returns (bytes32 val) { return "abc"; }
+ function f() public pure returns (bytes32 val) { return gasleft(); }
+}
+// ----
+// Warning: (17-87): This declaration shadows a builtin symbol.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/501_gasleft_shadowing_2.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/501_gasleft_shadowing_2.sol
new file mode 100644
index 00000000..2679c89d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/501_gasleft_shadowing_2.sol
@@ -0,0 +1,6 @@
+contract C {
+ uint gasleft;
+ function f() public { gasleft = 42; }
+}
+// ----
+// Warning: (17-29): This declaration shadows a builtin symbol.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/502_builtin_keccak256_reject_value.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/502_builtin_keccak256_reject_value.sol
new file mode 100644
index 00000000..a58891d2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/502_builtin_keccak256_reject_value.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public {
+ keccak256.value();
+ }
+}
+// ----
+// TypeError: (47-62): Member "value" not found or not visible after argument-dependent lookup in function () pure returns (bytes32) - did you forget the "payable" modifier?
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/503_builtin_sha256_reject_value.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/503_builtin_sha256_reject_value.sol
new file mode 100644
index 00000000..19d671ff
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/503_builtin_sha256_reject_value.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public {
+ sha256.value();
+ }
+}
+// ----
+// TypeError: (47-59): Member "value" not found or not visible after argument-dependent lookup in function () pure returns (bytes32) - did you forget the "payable" modifier?
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/504_builtin_ripemd160_reject_value.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/504_builtin_ripemd160_reject_value.sol
new file mode 100644
index 00000000..38bb2cb6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/504_builtin_ripemd160_reject_value.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public {
+ ripemd160.value();
+ }
+}
+// ----
+// TypeError: (47-62): Member "value" not found or not visible after argument-dependent lookup in function () pure returns (bytes20) - did you forget the "payable" modifier?
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/505_builtin_ecrecover_reject_value.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/505_builtin_ecrecover_reject_value.sol
new file mode 100644
index 00000000..e0215901
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/505_builtin_ecrecover_reject_value.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public {
+ ecrecover.value();
+ }
+}
+// ----
+// TypeError: (47-62): Member "value" not found or not visible after argument-dependent lookup in function (bytes32,uint8,bytes32,bytes32) pure returns (address) - did you forget the "payable" modifier?
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/506_large_storage_array_fine.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/506_large_storage_array_fine.sol
new file mode 100644
index 00000000..13e6dd80
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/506_large_storage_array_fine.sol
@@ -0,0 +1,3 @@
+contract C {
+ uint[2**64 - 1] x;
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/507_large_storage_array_simple.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/507_large_storage_array_simple.sol
new file mode 100644
index 00000000..3f8ee996
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/507_large_storage_array_simple.sol
@@ -0,0 +1,5 @@
+contract C {
+ uint[2**64] x;
+}
+// ----
+// Warning: (17-30): Variable covers a large part of storage and thus makes collisions likely. Either use mappings or dynamic arrays and allow their size to be increased only in small quantities per transaction.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/508_large_storage_arrays_combined.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/508_large_storage_arrays_combined.sol
new file mode 100644
index 00000000..917dcec1
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/508_large_storage_arrays_combined.sol
@@ -0,0 +1,5 @@
+contract C {
+ uint[200][200][2**30][][2**30] x;
+}
+// ----
+// Warning: (17-49): Variable covers a large part of storage and thus makes collisions likely. Either use mappings or dynamic arrays and allow their size to be increased only in small quantities per transaction.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/509_large_storage_arrays_struct.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/509_large_storage_arrays_struct.sol
new file mode 100644
index 00000000..656201f4
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/509_large_storage_arrays_struct.sol
@@ -0,0 +1,6 @@
+contract C {
+ struct S { uint[2**30] x; uint[2**50] y; }
+ S[2**20] x;
+}
+// ----
+// Warning: (64-74): Variable covers a large part of storage and thus makes collisions likely. Either use mappings or dynamic arrays and allow their size to be increased only in small quantities per transaction.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/510_large_storage_array_mapping.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/510_large_storage_array_mapping.sol
new file mode 100644
index 00000000..046a27f7
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/510_large_storage_array_mapping.sol
@@ -0,0 +1,5 @@
+contract C {
+ mapping(uint => uint[2**100]) x;
+}
+// ----
+// Warning: (17-48): Variable covers a large part of storage and thus makes collisions likely. Either use mappings or dynamic arrays and allow their size to be increased only in small quantities per transaction.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/511_library_function_without_implementation_public.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/511_library_function_without_implementation_public.sol
new file mode 100644
index 00000000..fe5e4955
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/511_library_function_without_implementation_public.sol
@@ -0,0 +1,4 @@
+library L {
+ // This can be used as an "interface", hence it is allowed.
+ function f() public;
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/512_library_function_without_implementation_internal.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/512_library_function_without_implementation_internal.sol
new file mode 100644
index 00000000..d5dfb260
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/512_library_function_without_implementation_internal.sol
@@ -0,0 +1,5 @@
+library L {
+ function f() internal;
+}
+// ----
+// TypeError: (16-38): Internal library function must be implemented if declared.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/513_library_function_without_implementation_private.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/513_library_function_without_implementation_private.sol
new file mode 100644
index 00000000..70585e8c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/513_library_function_without_implementation_private.sol
@@ -0,0 +1,5 @@
+library L {
+ function f() private;
+}
+// ----
+// TypeError: (16-37): Internal library function must be implemented if declared.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/514_using_for_with_non_library.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/514_using_for_with_non_library.sol
new file mode 100644
index 00000000..ab139dd5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/514_using_for_with_non_library.sol
@@ -0,0 +1,10 @@
+// This tests a crash that was resolved by making the first error fatal.
+library L {
+ struct S { uint d; }
+ using S for S;
+ function f(S _s) internal {
+ _s.d = 1;
+ }
+}
+// ----
+// TypeError: (120-121): Library name expected.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/515_experimental_pragma_empty.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/515_experimental_pragma_empty.sol
new file mode 100644
index 00000000..66afb7a2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/515_experimental_pragma_empty.sol
@@ -0,0 +1,3 @@
+pragma experimental;
+// ----
+// SyntaxError: (0-20): Experimental feature name is missing.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/516_experimental_pragma_unknown_number_literal.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/516_experimental_pragma_unknown_number_literal.sol
new file mode 100644
index 00000000..445c6f54
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/516_experimental_pragma_unknown_number_literal.sol
@@ -0,0 +1,3 @@
+pragma experimental 123;
+// ----
+// SyntaxError: (0-24): Unsupported experimental feature name.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/517_experimental_pragma_unknown_string_literal.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/517_experimental_pragma_unknown_string_literal.sol
new file mode 100644
index 00000000..48d8b968
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/517_experimental_pragma_unknown_string_literal.sol
@@ -0,0 +1,3 @@
+pragma experimental unsupportedName;
+// ----
+// SyntaxError: (0-36): Unsupported experimental feature name.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/518_experimental_pragma_unknown_quoted_string_literal.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/518_experimental_pragma_unknown_quoted_string_literal.sol
new file mode 100644
index 00000000..6405f062
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/518_experimental_pragma_unknown_quoted_string_literal.sol
@@ -0,0 +1,3 @@
+pragma experimental "unsupportedName";
+// ----
+// SyntaxError: (0-38): Unsupported experimental feature name.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/519_experimental_pragma_empy_string_literal.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/519_experimental_pragma_empy_string_literal.sol
new file mode 100644
index 00000000..1a1fde9c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/519_experimental_pragma_empy_string_literal.sol
@@ -0,0 +1,3 @@
+pragma experimental "";
+// ----
+// SyntaxError: (0-23): Empty experimental feature name is invalid.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/520_experimental_pragma_multiple_same_line.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/520_experimental_pragma_multiple_same_line.sol
new file mode 100644
index 00000000..2eb2bf2a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/520_experimental_pragma_multiple_same_line.sol
@@ -0,0 +1,3 @@
+pragma experimental unsupportedName unsupportedName;
+// ----
+// SyntaxError: (0-52): Stray arguments.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/521_experimental_pragma_test_warning.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/521_experimental_pragma_test_warning.sol
new file mode 100644
index 00000000..5f6962f4
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/521_experimental_pragma_test_warning.sol
@@ -0,0 +1,3 @@
+pragma experimental __test;
+// ----
+// Warning: (0-27): Experimental features are turned on. Do not use experimental features on live deployments.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/522_experimental_pragma_duplicate.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/522_experimental_pragma_duplicate.sol
new file mode 100644
index 00000000..ba772a21
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/522_experimental_pragma_duplicate.sol
@@ -0,0 +1,5 @@
+pragma experimental __test;
+pragma experimental __test;
+// ----
+// Warning: (0-27): Experimental features are turned on. Do not use experimental features on live deployments.
+// SyntaxError: (28-55): Duplicate experimental feature name.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/523_reject_interface_creation.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/523_reject_interface_creation.sol
new file mode 100644
index 00000000..35bba5b3
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/523_reject_interface_creation.sol
@@ -0,0 +1,8 @@
+interface I {}
+contract C {
+ function f() public {
+ new I();
+ }
+}
+// ----
+// TypeError: (62-67): Cannot instantiate an interface.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/524_accept_library_creation.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/524_accept_library_creation.sol
new file mode 100644
index 00000000..6a5e97af
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/524_accept_library_creation.sol
@@ -0,0 +1,6 @@
+library L {}
+contract C {
+ function f() public {
+ new L();
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/525_reject_interface_constructors.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/525_reject_interface_constructors.sol
new file mode 100644
index 00000000..d65c639f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/525_reject_interface_constructors.sol
@@ -0,0 +1,4 @@
+interface I {}
+contract C is I(2) {}
+// ----
+// TypeError: (29-33): Wrong argument count for constructor call: 1 arguments given but expected 0.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/526_fallback_marked_external_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/526_fallback_marked_external_v050.sol
new file mode 100644
index 00000000..f13a87ec
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/526_fallback_marked_external_v050.sol
@@ -0,0 +1,4 @@
+pragma experimental "v0.5.0";
+contract C {
+ function () external { }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/527_fallback_marked_internal_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/527_fallback_marked_internal_v050.sol
new file mode 100644
index 00000000..6c8b23c8
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/527_fallback_marked_internal_v050.sol
@@ -0,0 +1,6 @@
+pragma experimental "v0.5.0";
+contract C {
+ function () internal { }
+}
+// ----
+// TypeError: (47-71): Fallback function must be defined as "external".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/528_fallback_marked_private_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/528_fallback_marked_private_v050.sol
new file mode 100644
index 00000000..be381909
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/528_fallback_marked_private_v050.sol
@@ -0,0 +1,6 @@
+pragma experimental "v0.5.0";
+contract C {
+ function () private { }
+}
+// ----
+// TypeError: (47-70): Fallback function must be defined as "external".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/529_fallback_marked_public_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/529_fallback_marked_public_v050.sol
new file mode 100644
index 00000000..d0beffda
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/529_fallback_marked_public_v050.sol
@@ -0,0 +1,6 @@
+pragma experimental "v0.5.0";
+contract C {
+ function () public { }
+}
+// ----
+// TypeError: (47-69): Fallback function must be defined as "external".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/530_tuple_invalid_literal_too_large_for_uint.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/530_tuple_invalid_literal_too_large_for_uint.sol
new file mode 100644
index 00000000..bbfe2206
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/530_tuple_invalid_literal_too_large_for_uint.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() pure public {
+ uint x;
+ (x, ) = (1E111);
+ }
+}
+// ----
+// TypeError: (76-83): Type int_const 1000...(104 digits omitted)...0000 is not implicitly convertible to expected type tuple(uint256,).
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/531_tuple_invalid_literal_too_large_unassigned.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/531_tuple_invalid_literal_too_large_unassigned.sol
new file mode 100644
index 00000000..6b9cbf79
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/531_tuple_invalid_literal_too_large_unassigned.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() pure public {
+ uint x;
+ (x, ) = (1, 1E111);
+ }
+}
+// ----
+// TypeError: (80-85): Invalid rational number.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/532_tuple_invalid_literal_too_large_for_uint_multi.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/532_tuple_invalid_literal_too_large_for_uint_multi.sol
new file mode 100644
index 00000000..a26f9c04
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/532_tuple_invalid_literal_too_large_for_uint_multi.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() pure public {
+ uint x;
+ (x, ) = (1E111, 1);
+ }
+}
+// ----
+// TypeError: (77-82): Invalid rational number.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/533_tuple_invalid_literal_too_large_exp.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/533_tuple_invalid_literal_too_large_exp.sol
new file mode 100644
index 00000000..9384ec53
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/533_tuple_invalid_literal_too_large_exp.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() pure public {
+ (2**270, 1);
+ }
+}
+// ----
+// TypeError: (53-59): Invalid rational number.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/534_tuple_invalid_literal_too_large_expression.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/534_tuple_invalid_literal_too_large_expression.sol
new file mode 100644
index 00000000..3c322444
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/534_tuple_invalid_literal_too_large_expression.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() pure public {
+ ((2**270) / 2**100, 1);
+ }
+}
+// ----
+// Warning: (52-74): Statement has no effect.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/535_address_overload_resolution.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/535_address_overload_resolution.sol
new file mode 100644
index 00000000..4f185e4d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/535_address_overload_resolution.sol
@@ -0,0 +1,22 @@
+contract C {
+ function balance() returns (uint) {
+ this.balance; // to avoid pureness warning
+ return 1;
+ }
+ function transfer(uint amount) {
+ address(this).transfer(amount); // to avoid pureness warning
+ }
+}
+contract D {
+ function f() {
+ var x = (new C()).balance();
+ x;
+ (new C()).transfer(5);
+ }
+}
+// ----
+// Warning: (282-287): Use of the "var" keyword is deprecated.
+// Warning: (17-127): No visibility specified. Defaulting to "public".
+// Warning: (132-239): No visibility specified. Defaulting to "public".
+// Warning: (259-358): No visibility specified. Defaulting to "public".
+// Warning: (17-127): Function state mutability can be restricted to view
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/536_array_length_invalid_expression_negative_bool.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/536_array_length_invalid_expression_negative_bool.sol
new file mode 100644
index 00000000..c92861eb
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/536_array_length_invalid_expression_negative_bool.sol
@@ -0,0 +1,5 @@
+contract C {
+ uint[-true] ids;
+}
+// ----
+// TypeError: (22-27): Invalid array length, expected integer literal or constant expression.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/537_array_length_invalid_expression_int_divides_bool.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/537_array_length_invalid_expression_int_divides_bool.sol
new file mode 100644
index 00000000..92e3c3cf
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/537_array_length_invalid_expression_int_divides_bool.sol
@@ -0,0 +1,5 @@
+contract C {
+ uint[true/1] ids;
+}
+// ----
+// TypeError: (22-28): Invalid array length, expected integer literal or constant expression.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/538_array_length_invalid_expression_bool_divides_int.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/538_array_length_invalid_expression_bool_divides_int.sol
new file mode 100644
index 00000000..26add45c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/538_array_length_invalid_expression_bool_divides_int.sol
@@ -0,0 +1,5 @@
+contract C {
+ uint[1/true] ids;
+}
+// ----
+// TypeError: (22-28): Invalid array length, expected integer literal or constant expression.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/539_array_length_invalid_expression_scientific_literal.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/539_array_length_invalid_expression_scientific_literal.sol
new file mode 100644
index 00000000..a0d58f4a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/539_array_length_invalid_expression_scientific_literal.sol
@@ -0,0 +1,5 @@
+contract C {
+ uint[1.111111E1111111111111] ids;
+}
+// ----
+// TypeError: (22-44): Invalid array length, expected integer literal or constant expression.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/540_array_length_invalid_expression_division_by_zero.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/540_array_length_invalid_expression_division_by_zero.sol
new file mode 100644
index 00000000..38a80867
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/540_array_length_invalid_expression_division_by_zero.sol
@@ -0,0 +1,5 @@
+contract C {
+ uint[3/0] ids;
+}
+// ----
+// TypeError: (22-25): Operator / not compatible with types int_const 3 and int_const 0
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/541_warn_about_address_members_on_contract_balance.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/541_warn_about_address_members_on_contract_balance.sol
new file mode 100644
index 00000000..4acb0dc2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/541_warn_about_address_members_on_contract_balance.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() view public {
+ this.balance;
+ }
+}
+// ----
+// Warning: (52-64): Using contract member "balance" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).balance" instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/542_warn_about_address_members_on_contract_transfer.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/542_warn_about_address_members_on_contract_transfer.sol
new file mode 100644
index 00000000..45ee1f5b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/542_warn_about_address_members_on_contract_transfer.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() view public {
+ this.transfer;
+ }
+}
+// ----
+// Warning: (52-65): Using contract member "transfer" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).transfer" instead.
+// TypeError: (52-65): Value transfer to a contract without a payable fallback function.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/543_warn_about_address_members_on_contract_send.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/543_warn_about_address_members_on_contract_send.sol
new file mode 100644
index 00000000..99b7b8b2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/543_warn_about_address_members_on_contract_send.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() view public {
+ this.send;
+ }
+}
+// ----
+// Warning: (52-61): Using contract member "send" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).send" instead.
+// TypeError: (52-61): Value transfer to a contract without a payable fallback function.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/544_warn_about_address_members_on_contract_call.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/544_warn_about_address_members_on_contract_call.sol
new file mode 100644
index 00000000..446410ba
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/544_warn_about_address_members_on_contract_call.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() view public {
+ this.call;
+ }
+}
+// ----
+// Warning: (52-61): Using contract member "call" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).call" instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/545_warn_about_address_members_on_contract_callcode.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/545_warn_about_address_members_on_contract_callcode.sol
new file mode 100644
index 00000000..04747e7f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/545_warn_about_address_members_on_contract_callcode.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() view public {
+ this.callcode;
+ }
+}
+// ----
+// Warning: (52-65): Using contract member "callcode" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).callcode" instead.
+// Warning: (52-65): "callcode" has been deprecated in favour of "delegatecall".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/546_warn_about_address_members_on_contract_delegatecall.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/546_warn_about_address_members_on_contract_delegatecall.sol
new file mode 100644
index 00000000..7cbd832a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/546_warn_about_address_members_on_contract_delegatecall.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() view public {
+ this.delegatecall;
+ }
+}
+// ----
+// Warning: (52-69): Using contract member "delegatecall" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).delegatecall" instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/547_warn_about_address_members_on_non_this_contract_balance.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/547_warn_about_address_members_on_non_this_contract_balance.sol
new file mode 100644
index 00000000..3ba59a9f
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/547_warn_about_address_members_on_non_this_contract_balance.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() view public {
+ C c;
+ c.balance;
+ }
+}
+// ----
+// Warning: (65-74): Using contract member "balance" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).balance" instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/548_warn_about_address_members_on_non_this_contract_transfer.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/548_warn_about_address_members_on_non_this_contract_transfer.sol
new file mode 100644
index 00000000..17455124
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/548_warn_about_address_members_on_non_this_contract_transfer.sol
@@ -0,0 +1,9 @@
+contract C {
+ function f() view public {
+ C c;
+ c.transfer;
+ }
+}
+// ----
+// Warning: (65-75): Using contract member "transfer" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).transfer" instead.
+// TypeError: (65-75): Value transfer to a contract without a payable fallback function.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/549_warn_about_address_members_on_non_this_contract_send.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/549_warn_about_address_members_on_non_this_contract_send.sol
new file mode 100644
index 00000000..ca0630c4
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/549_warn_about_address_members_on_non_this_contract_send.sol
@@ -0,0 +1,9 @@
+contract C {
+ function f() view public {
+ C c;
+ c.send;
+ }
+}
+// ----
+// Warning: (65-71): Using contract member "send" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).send" instead.
+// TypeError: (65-71): Value transfer to a contract without a payable fallback function.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/550_warn_about_address_members_on_non_this_contract_call.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/550_warn_about_address_members_on_non_this_contract_call.sol
new file mode 100644
index 00000000..c06e0f61
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/550_warn_about_address_members_on_non_this_contract_call.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() pure public {
+ C c;
+ c.call;
+ }
+}
+// ----
+// Warning: (65-71): Using contract member "call" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).call" instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/551_warn_about_address_members_on_non_this_contract_callcode.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/551_warn_about_address_members_on_non_this_contract_callcode.sol
new file mode 100644
index 00000000..9ab6fb0c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/551_warn_about_address_members_on_non_this_contract_callcode.sol
@@ -0,0 +1,9 @@
+contract C {
+ function f() pure public {
+ C c;
+ c.callcode;
+ }
+}
+// ----
+// Warning: (65-75): Using contract member "callcode" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).callcode" instead.
+// Warning: (65-75): "callcode" has been deprecated in favour of "delegatecall".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/552_warn_about_address_members_on_non_this_contract_delegatecall.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/552_warn_about_address_members_on_non_this_contract_delegatecall.sol
new file mode 100644
index 00000000..8e286945
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/552_warn_about_address_members_on_non_this_contract_delegatecall.sol
@@ -0,0 +1,8 @@
+contract C {
+ function f() pure public {
+ C c;
+ c.delegatecall;
+ }
+}
+// ----
+// Warning: (65-79): Using contract member "delegatecall" inherited from the address type is deprecated. Convert the contract to "address" type to access the member, for example use "address(contract).delegatecall" instead.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/553_no_address_members_on_contract_balance_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/553_no_address_members_on_contract_balance_v050.sol
new file mode 100644
index 00000000..7c4ad16a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/553_no_address_members_on_contract_balance_v050.sol
@@ -0,0 +1,8 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f() public {
+ this.balance;
+ }
+}
+// ----
+// TypeError: (77-89): Member "balance" not found or not visible after argument-dependent lookup in contract C
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/554_no_address_members_on_contract_transfer_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/554_no_address_members_on_contract_transfer_v050.sol
new file mode 100644
index 00000000..74bdabd2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/554_no_address_members_on_contract_transfer_v050.sol
@@ -0,0 +1,8 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f() public {
+ this.transfer;
+ }
+}
+// ----
+// TypeError: (77-90): Member "transfer" not found or not visible after argument-dependent lookup in contract C
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/555_no_address_members_on_contract_send_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/555_no_address_members_on_contract_send_v050.sol
new file mode 100644
index 00000000..0852e47e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/555_no_address_members_on_contract_send_v050.sol
@@ -0,0 +1,8 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f() public {
+ this.send;
+ }
+}
+// ----
+// TypeError: (77-86): Member "send" not found or not visible after argument-dependent lookup in contract C
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/556_no_address_members_on_contract_call_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/556_no_address_members_on_contract_call_v050.sol
new file mode 100644
index 00000000..b9a226ad
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/556_no_address_members_on_contract_call_v050.sol
@@ -0,0 +1,8 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f() public {
+ this.call;
+ }
+}
+// ----
+// TypeError: (77-86): Member "call" not found or not visible after argument-dependent lookup in contract C
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/557_no_address_members_on_contract_callcode_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/557_no_address_members_on_contract_callcode_v050.sol
new file mode 100644
index 00000000..95198a94
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/557_no_address_members_on_contract_callcode_v050.sol
@@ -0,0 +1,8 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f() public {
+ this.callcode;
+ }
+}
+// ----
+// TypeError: (77-90): Member "callcode" not found or not visible after argument-dependent lookup in contract C
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/558_no_address_members_on_contract_delegatecall_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/558_no_address_members_on_contract_delegatecall_v050.sol
new file mode 100644
index 00000000..b7a7053e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/558_no_address_members_on_contract_delegatecall_v050.sol
@@ -0,0 +1,8 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f() public {
+ this.delegatecall;
+ }
+}
+// ----
+// TypeError: (77-94): Member "delegatecall" not found or not visible after argument-dependent lookup in contract C
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/559_no_warning_for_using_members_that_look_like_address_members.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/559_no_warning_for_using_members_that_look_like_address_members.sol
new file mode 100644
index 00000000..9355853a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/559_no_warning_for_using_members_that_look_like_address_members.sol
@@ -0,0 +1,7 @@
+pragma experimental "v0.5.0";
+contract C {
+ function transfer(uint) public;
+ function f() public {
+ this.transfer(10);
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/560_event_emit_simple.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/560_event_emit_simple.sol
new file mode 100644
index 00000000..445c9949
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/560_event_emit_simple.sol
@@ -0,0 +1,6 @@
+contract C {
+ event e();
+ function f() public {
+ emit e();
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/561_event_emit_complex.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/561_event_emit_complex.sol
new file mode 100644
index 00000000..19448615
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/561_event_emit_complex.sol
@@ -0,0 +1,7 @@
+contract C {
+ event e(uint a, string b);
+ function f() public {
+ emit e(2, "abc");
+ emit e({b: "abc", a: 8});
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/562_event_emit_foreign_class.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/562_event_emit_foreign_class.sol
new file mode 100644
index 00000000..afac609a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/562_event_emit_foreign_class.sol
@@ -0,0 +1,7 @@
+contract A { event e(uint a, string b); }
+contract C is A {
+ function f() public {
+ emit A.e(2, "abc");
+ emit A.e({b: "abc", a: 8});
+ }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/563_event_without_emit_deprecated.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/563_event_without_emit_deprecated.sol
new file mode 100644
index 00000000..d6068ff6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/563_event_without_emit_deprecated.sol
@@ -0,0 +1,8 @@
+contract C {
+ event e();
+ function f() public {
+ e();
+ }
+}
+// ----
+// Warning: (62-65): Invoking events without "emit" prefix is deprecated.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/564_events_without_emit_deprecated_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/564_events_without_emit_deprecated_v050.sol
new file mode 100644
index 00000000..e148d65a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/564_events_without_emit_deprecated_v050.sol
@@ -0,0 +1,9 @@
+pragma experimental "v0.5.0";
+contract C {
+ event e();
+ function f() public {
+ e();
+ }
+}
+// ----
+// TypeError: (92-95): Event invocations have to be prefixed by "emit".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/566_require_visibility_specifiers.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/566_require_visibility_specifiers.sol
new file mode 100644
index 00000000..7330ef8d
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/566_require_visibility_specifiers.sol
@@ -0,0 +1,5 @@
+contract C {
+ function f() pure { }
+}
+// ----
+// Warning: (17-38): No visibility specified. Defaulting to "public".
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/567_require_visibility_specifiers_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/567_require_visibility_specifiers_v050.sol
new file mode 100644
index 00000000..ec7c0937
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/567_require_visibility_specifiers_v050.sol
@@ -0,0 +1,6 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f() pure { }
+}
+// ----
+// SyntaxError: (47-68): No visibility specified.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/568_blockhash.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/568_blockhash.sol
new file mode 100644
index 00000000..f6cc63a5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/568_blockhash.sol
@@ -0,0 +1,3 @@
+contract C {
+ function f() public view returns (bytes32) { return blockhash(3); }
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/569_block_blockhash_deprecated.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/569_block_blockhash_deprecated.sol
new file mode 100644
index 00000000..f2e5a2c4
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/569_block_blockhash_deprecated.sol
@@ -0,0 +1,7 @@
+contract C {
+ function f() public view returns (bytes32) {
+ return block.blockhash(3);
+ }
+}
+// ----
+// Warning: (77-92): "block.blockhash()" has been deprecated in favor of "blockhash()"
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/570_block_blockhash_deprecated_v050.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/570_block_blockhash_deprecated_v050.sol
new file mode 100644
index 00000000..b954eab7
--- /dev/null
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/570_block_blockhash_deprecated_v050.sol
@@ -0,0 +1,6 @@
+pragma experimental "v0.5.0";
+contract C {
+ function f() public returns (bytes32) { return block.blockhash(3); }
+}
+// ----
+// TypeError: (94-109): "block.blockhash()" has been deprecated in favor of "blockhash()"