aboutsummaryrefslogtreecommitdiffstats
path: root/test/libsolidity/syntaxTests
diff options
context:
space:
mode:
Diffstat (limited to 'test/libsolidity/syntaxTests')
-rw-r--r--test/libsolidity/syntaxTests/bound/bound_all.sol10
-rw-r--r--test/libsolidity/syntaxTests/bound/bound_call.sol7
-rw-r--r--test/libsolidity/syntaxTests/bound/bound_no_call.sol7
-rw-r--r--test/libsolidity/syntaxTests/constructor/abstract_creation_forward_reference.sol15
-rw-r--r--test/libsolidity/syntaxTests/deprecated_functions.sol4
-rw-r--r--test/libsolidity/syntaxTests/functionTypes/function_type_struct.sol8
-rw-r--r--test/libsolidity/syntaxTests/functionTypes/function_type_struct_undefined_member.sol11
-rw-r--r--test/libsolidity/syntaxTests/getter/complex_struct.sol7
-rw-r--r--test/libsolidity/syntaxTests/getter/nested_structs.sol11
-rw-r--r--test/libsolidity/syntaxTests/getter/recursive_struct.sol8
-rw-r--r--test/libsolidity/syntaxTests/getter/simple_struct.sol6
-rw-r--r--test/libsolidity/syntaxTests/globalFunctions/sha3_no_call.sol8
-rw-r--r--test/libsolidity/syntaxTests/globalFunctions/sha3_override.sol11
-rw-r--r--test/libsolidity/syntaxTests/globalFunctions/sha3_var.sol9
-rw-r--r--test/libsolidity/syntaxTests/globalFunctions/suicide_no_call.sol8
-rw-r--r--test/libsolidity/syntaxTests/globalFunctions/suicide_override.sol11
-rw-r--r--test/libsolidity/syntaxTests/globalFunctions/suicide_var.sol9
-rw-r--r--test/libsolidity/syntaxTests/inheritance/override/calldata_memory.sol13
-rw-r--r--test/libsolidity/syntaxTests/inheritance/override/calldata_memory_conflict.sol26
-rw-r--r--test/libsolidity/syntaxTests/inheritance/override/calldata_memory_interface.sol13
-rw-r--r--test/libsolidity/syntaxTests/inheritance/override/calldata_memory_interface_instantiate.sol12
-rw-r--r--test/libsolidity/syntaxTests/inheritance/override/calldata_memory_interface_struct.sol17
-rw-r--r--test/libsolidity/syntaxTests/inheritance/override/calldata_memory_struct.sol17
-rw-r--r--test/libsolidity/syntaxTests/inheritance/override/change_return_types_in_interface.sol10
-rw-r--r--test/libsolidity/syntaxTests/inheritance/override/external_turns_public_no_params.sol7
-rw-r--r--test/libsolidity/syntaxTests/inheritance/override/implement_interface_by_public_variable.sol7
-rw-r--r--test/libsolidity/syntaxTests/inheritance/override/implement_internal_function_by_public_variable.sol9
-rw-r--r--test/libsolidity/syntaxTests/inheritance/override/implement_private_function_by_public_variable.sol7
-rw-r--r--test/libsolidity/syntaxTests/inheritance/override/implement_public_function_by_public_variable.sol9
-rw-r--r--test/libsolidity/syntaxTests/inheritance/override/internal_external.sol7
-rw-r--r--test/libsolidity/syntaxTests/inheritance/override/internal_external_inheritance.sol9
-rw-r--r--test/libsolidity/syntaxTests/inheritance/override/state_variable_function.sol1
-rw-r--r--test/libsolidity/syntaxTests/inheritance/super_on_external.sol10
-rw-r--r--test/libsolidity/syntaxTests/inlineAssembly/invalid/invalid_number.sol2
-rw-r--r--test/libsolidity/syntaxTests/inline_arrays/dynamic_inline_array.sol (renamed from test/libsolidity/syntaxTests/nameAndTypeResolution/277_dynamic_inline_array.sol)0
-rw-r--r--test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_and_passing_implicit_conversion.sol (renamed from test/libsolidity/syntaxTests/nameAndTypeResolution/269_inline_array_declaration_and_passing_implicit_conversion.sol)0
-rw-r--r--test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_and_passing_implicit_conversion_strings.sol (renamed from test/libsolidity/syntaxTests/nameAndTypeResolution/270_inline_array_declaration_and_passing_implicit_conversion_strings.sol)0
-rw-r--r--test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_const_int_conversion.sol (renamed from test/libsolidity/syntaxTests/nameAndTypeResolution/271_inline_array_declaration_const_int_conversion.sol)0
-rw-r--r--test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_const_string_conversion.sol (renamed from test/libsolidity/syntaxTests/nameAndTypeResolution/272_inline_array_declaration_const_string_conversion.sol)0
-rw-r--r--test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_no_type.sol (renamed from test/libsolidity/syntaxTests/nameAndTypeResolution/273_inline_array_declaration_no_type.sol)0
-rw-r--r--test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_no_type_strings.sol (renamed from test/libsolidity/syntaxTests/nameAndTypeResolution/274_inline_array_declaration_no_type_strings.sol)0
-rw-r--r--test/libsolidity/syntaxTests/inline_arrays/inline_array_fixed_types.sol (renamed from test/libsolidity/syntaxTests/nameAndTypeResolution/325_inline_array_fixed_types.sol)0
-rw-r--r--test/libsolidity/syntaxTests/inline_arrays/inline_array_of_mapping_type.sol8
-rw-r--r--test/libsolidity/syntaxTests/inline_arrays/inline_array_rationals.sol (renamed from test/libsolidity/syntaxTests/nameAndTypeResolution/326_inline_array_rationals.sol)0
-rw-r--r--test/libsolidity/syntaxTests/inline_arrays/invalid_types_in_inline_array.sol (renamed from test/libsolidity/syntaxTests/nameAndTypeResolution/276_invalid_types_in_inline_array.sol)0
-rw-r--r--test/libsolidity/syntaxTests/inline_arrays/lvalues_as_inline_array.sol (renamed from test/libsolidity/syntaxTests/nameAndTypeResolution/278_lvalues_as_inline_array.sol)0
-rw-r--r--test/libsolidity/syntaxTests/memberLookup/internal_function_type.sol7
-rw-r--r--test/libsolidity/syntaxTests/nameAndTypeResolution/182_equal_overload.sol2
-rw-r--r--test/libsolidity/syntaxTests/parsing/invalid_fixed_conversion_leading_zeroes_check.sol2
-rw-r--r--test/libsolidity/syntaxTests/string/string_new_line.sol2
-rw-r--r--test/libsolidity/syntaxTests/string/string_terminated_by_backslash.sol2
-rw-r--r--test/libsolidity/syntaxTests/string/string_unterminated.sol2
-rw-r--r--test/libsolidity/syntaxTests/string/string_unterminated_no_new_line.sol2
-rw-r--r--test/libsolidity/syntaxTests/structs/recursion/recursive_struct_forward_reference.sol11
-rw-r--r--test/libsolidity/syntaxTests/types/mapping/library_argument_external.sol1
-rw-r--r--test/libsolidity/syntaxTests/types/mapping/library_argument_public.sol1
-rw-r--r--test/libsolidity/syntaxTests/types/mapping/library_return_external.sol3
-rw-r--r--test/libsolidity/syntaxTests/types/mapping/library_return_public.sol3
-rw-r--r--test/libsolidity/syntaxTests/types/mapping/mapping_data_location_function_param_external.sol4
-rw-r--r--test/libsolidity/syntaxTests/types/mapping/mapping_data_location_function_param_public.sol3
-rw-r--r--test/libsolidity/syntaxTests/types/mapping/mapping_return_public_memory.sol3
-rw-r--r--test/libsolidity/syntaxTests/unicode_escape_literals.sol2
-rw-r--r--test/libsolidity/syntaxTests/unimplemented_super_function.sol8
-rw-r--r--test/libsolidity/syntaxTests/unimplemented_super_function_derived.sol12
64 files changed, 380 insertions, 24 deletions
diff --git a/test/libsolidity/syntaxTests/bound/bound_all.sol b/test/libsolidity/syntaxTests/bound/bound_all.sol
new file mode 100644
index 00000000..29f55b88
--- /dev/null
+++ b/test/libsolidity/syntaxTests/bound/bound_all.sol
@@ -0,0 +1,10 @@
+library L {
+ function g(function() internal returns (uint) _t) internal returns (uint) { return _t(); }
+}
+contract C {
+ using L for *;
+ function f() public returns (uint) {
+ return t.g();
+ }
+ function t() public pure returns (uint) { return 7; }
+}
diff --git a/test/libsolidity/syntaxTests/bound/bound_call.sol b/test/libsolidity/syntaxTests/bound/bound_call.sol
new file mode 100644
index 00000000..281f19b4
--- /dev/null
+++ b/test/libsolidity/syntaxTests/bound/bound_call.sol
@@ -0,0 +1,7 @@
+library D { function double(uint self) internal pure returns (uint) { return 2*self; } }
+contract C {
+ using D for uint;
+ function f(uint a) public pure {
+ a.double();
+ }
+}
diff --git a/test/libsolidity/syntaxTests/bound/bound_no_call.sol b/test/libsolidity/syntaxTests/bound/bound_no_call.sol
new file mode 100644
index 00000000..dcb3c3c5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/bound/bound_no_call.sol
@@ -0,0 +1,7 @@
+library D { function double(uint self) public pure returns (uint) { return 2*self; } }
+contract C {
+ using D for uint;
+ function f(uint a) public pure {
+ a.double;
+ }
+}
diff --git a/test/libsolidity/syntaxTests/constructor/abstract_creation_forward_reference.sol b/test/libsolidity/syntaxTests/constructor/abstract_creation_forward_reference.sol
new file mode 100644
index 00000000..2e6aeaa5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/constructor/abstract_creation_forward_reference.sol
@@ -0,0 +1,15 @@
+// This used to cause an internal error because of the visitation order.
+contract Test {
+ function createChild() public {
+ Child asset = new Child();
+ }
+}
+
+contract Parent {
+ constructor(address _address) public {}
+}
+
+contract Child is Parent {
+}
+// ----
+// TypeError: (146-155): Trying to create an instance of an abstract contract.
diff --git a/test/libsolidity/syntaxTests/deprecated_functions.sol b/test/libsolidity/syntaxTests/deprecated_functions.sol
index 62dfcff9..c5764e96 100644
--- a/test/libsolidity/syntaxTests/deprecated_functions.sol
+++ b/test/libsolidity/syntaxTests/deprecated_functions.sol
@@ -8,5 +8,5 @@ contract test {
}
}
// ----
-// TypeError: (58-66): "sha3" has been deprecated in favour of "keccak256"
-// TypeError: (101-152): "suicide" has been deprecated in favour of "selfdestruct"
+// TypeError: (58-62): "sha3" has been deprecated in favour of "keccak256"
+// TypeError: (101-108): "suicide" has been deprecated in favour of "selfdestruct"
diff --git a/test/libsolidity/syntaxTests/functionTypes/function_type_struct.sol b/test/libsolidity/syntaxTests/functionTypes/function_type_struct.sol
new file mode 100644
index 00000000..a367996e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/functionTypes/function_type_struct.sol
@@ -0,0 +1,8 @@
+library L
+{
+ struct Nested
+ {
+ uint y;
+ }
+ function f(function(Nested memory) external) external pure {}
+}
diff --git a/test/libsolidity/syntaxTests/functionTypes/function_type_struct_undefined_member.sol b/test/libsolidity/syntaxTests/functionTypes/function_type_struct_undefined_member.sol
new file mode 100644
index 00000000..ca08afe5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/functionTypes/function_type_struct_undefined_member.sol
@@ -0,0 +1,11 @@
+library L
+{
+ struct Nested
+ {
+ Non y;
+ }
+ function f(function(Nested memory) external) external pure {}
+}
+// ----
+// DeclarationError: (32-35): Identifier not found or not unique.
+// TypeError: (63-76): Internal type cannot be used for external function type.
diff --git a/test/libsolidity/syntaxTests/getter/complex_struct.sol b/test/libsolidity/syntaxTests/getter/complex_struct.sol
new file mode 100644
index 00000000..3fa8111c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/getter/complex_struct.sol
@@ -0,0 +1,7 @@
+contract C {
+ struct Y {
+ uint a;
+ uint b;
+ }
+ mapping(uint256 => Y) public m;
+}
diff --git a/test/libsolidity/syntaxTests/getter/nested_structs.sol b/test/libsolidity/syntaxTests/getter/nested_structs.sol
new file mode 100644
index 00000000..1068f287
--- /dev/null
+++ b/test/libsolidity/syntaxTests/getter/nested_structs.sol
@@ -0,0 +1,11 @@
+contract C {
+ struct Y {
+ uint b;
+ }
+ struct X {
+ Y a;
+ }
+ mapping(uint256 => X) public m;
+}
+// ----
+// TypeError: (88-118): The following types are only supported for getters in the new experimental ABI encoder: struct C.Y memory. Either remove "public" or use "pragma experimental ABIEncoderV2;" to enable the feature.
diff --git a/test/libsolidity/syntaxTests/getter/recursive_struct.sol b/test/libsolidity/syntaxTests/getter/recursive_struct.sol
new file mode 100644
index 00000000..d81cac60
--- /dev/null
+++ b/test/libsolidity/syntaxTests/getter/recursive_struct.sol
@@ -0,0 +1,8 @@
+contract C {
+ struct Y {
+ Y[] x;
+ }
+ mapping(uint256 => Y) public m;
+}
+// ----
+// TypeError: (53-83): Internal or recursive type is not allowed for public state variables.
diff --git a/test/libsolidity/syntaxTests/getter/simple_struct.sol b/test/libsolidity/syntaxTests/getter/simple_struct.sol
new file mode 100644
index 00000000..c7a23ae9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/getter/simple_struct.sol
@@ -0,0 +1,6 @@
+contract C {
+ struct Y {
+ uint b;
+ }
+ mapping(uint256 => Y) public m;
+}
diff --git a/test/libsolidity/syntaxTests/globalFunctions/sha3_no_call.sol b/test/libsolidity/syntaxTests/globalFunctions/sha3_no_call.sol
new file mode 100644
index 00000000..37b60e5e
--- /dev/null
+++ b/test/libsolidity/syntaxTests/globalFunctions/sha3_no_call.sol
@@ -0,0 +1,8 @@
+contract C
+{
+ function f(bytes memory data) public pure {
+ sha3;
+ }
+}
+// ----
+// TypeError: (60-64): "sha3" has been deprecated in favour of "keccak256"
diff --git a/test/libsolidity/syntaxTests/globalFunctions/sha3_override.sol b/test/libsolidity/syntaxTests/globalFunctions/sha3_override.sol
new file mode 100644
index 00000000..909c2dc3
--- /dev/null
+++ b/test/libsolidity/syntaxTests/globalFunctions/sha3_override.sol
@@ -0,0 +1,11 @@
+contract C
+{
+ function sha3() public pure returns (bool) {
+ return true;
+ }
+ function f() public pure returns (bool) {
+ return sha3();
+ }
+}
+// ----
+// Warning: (14-76): This declaration shadows a builtin symbol.
diff --git a/test/libsolidity/syntaxTests/globalFunctions/sha3_var.sol b/test/libsolidity/syntaxTests/globalFunctions/sha3_var.sol
new file mode 100644
index 00000000..19ee72d9
--- /dev/null
+++ b/test/libsolidity/syntaxTests/globalFunctions/sha3_var.sol
@@ -0,0 +1,9 @@
+contract C
+{
+ function f() public pure returns (bool) {
+ bool sha3 = true;
+ return sha3;
+ }
+}
+// ----
+// Warning: (58-67): This declaration shadows a builtin symbol.
diff --git a/test/libsolidity/syntaxTests/globalFunctions/suicide_no_call.sol b/test/libsolidity/syntaxTests/globalFunctions/suicide_no_call.sol
new file mode 100644
index 00000000..bf3f5ebc
--- /dev/null
+++ b/test/libsolidity/syntaxTests/globalFunctions/suicide_no_call.sol
@@ -0,0 +1,8 @@
+contract C
+{
+ function f(bytes memory data) public pure {
+ suicide;
+ }
+}
+// ----
+// TypeError: (60-67): "suicide" has been deprecated in favour of "selfdestruct"
diff --git a/test/libsolidity/syntaxTests/globalFunctions/suicide_override.sol b/test/libsolidity/syntaxTests/globalFunctions/suicide_override.sol
new file mode 100644
index 00000000..7350da39
--- /dev/null
+++ b/test/libsolidity/syntaxTests/globalFunctions/suicide_override.sol
@@ -0,0 +1,11 @@
+contract C
+{
+ function suicide() public pure returns (bool) {
+ return true;
+ }
+ function f() public pure returns (bool) {
+ return suicide();
+ }
+}
+// ----
+// Warning: (14-79): This declaration shadows a builtin symbol.
diff --git a/test/libsolidity/syntaxTests/globalFunctions/suicide_var.sol b/test/libsolidity/syntaxTests/globalFunctions/suicide_var.sol
new file mode 100644
index 00000000..3549a563
--- /dev/null
+++ b/test/libsolidity/syntaxTests/globalFunctions/suicide_var.sol
@@ -0,0 +1,9 @@
+contract C
+{
+ function f() public pure returns (bool) {
+ bool suicide = true;
+ return suicide;
+ }
+}
+// ----
+// Warning: (58-70): This declaration shadows a builtin symbol.
diff --git a/test/libsolidity/syntaxTests/inheritance/override/calldata_memory.sol b/test/libsolidity/syntaxTests/inheritance/override/calldata_memory.sol
new file mode 100644
index 00000000..e683ef39
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inheritance/override/calldata_memory.sol
@@ -0,0 +1,13 @@
+contract A {
+ uint dummy;
+ function f(uint[] calldata) external pure {}
+ function g(uint[] calldata) external view { dummy; }
+ function h(uint[] calldata) external { dummy = 42; }
+ function i(uint[] calldata) external payable {}
+}
+contract B is A {
+ function f(uint[] memory) public pure {}
+ function g(uint[] memory) public view { dummy; }
+ function h(uint[] memory) public { dummy = 42; }
+ function i(uint[] memory) public payable {}
+}
diff --git a/test/libsolidity/syntaxTests/inheritance/override/calldata_memory_conflict.sol b/test/libsolidity/syntaxTests/inheritance/override/calldata_memory_conflict.sol
new file mode 100644
index 00000000..dc734d36
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inheritance/override/calldata_memory_conflict.sol
@@ -0,0 +1,26 @@
+contract A {
+ uint dummy;
+ function f(uint[] calldata) external pure {}
+ function g(uint[] calldata) external view { dummy; }
+ function h(uint[] calldata) external { dummy = 42; }
+ function i(uint[] calldata) external payable {}
+}
+contract B is A {
+ function f(uint[] calldata) external pure {}
+ function g(uint[] calldata) external view { dummy; }
+ function h(uint[] calldata) external { dummy = 42; }
+ function i(uint[] calldata) external payable {}
+ function f(uint[] memory) public pure {}
+ function g(uint[] memory) public view { dummy; }
+ function h(uint[] memory) public { dummy = 42; }
+ function i(uint[] memory) public payable {}
+}
+// ----
+// DeclarationError: (268-312): Function with same name and arguments defined twice.
+// DeclarationError: (317-369): Function with same name and arguments defined twice.
+// DeclarationError: (374-426): Function with same name and arguments defined twice.
+// DeclarationError: (431-478): Function with same name and arguments defined twice.
+// TypeError: (268-312): Overriding function visibility differs.
+// TypeError: (317-369): Overriding function visibility differs.
+// TypeError: (374-426): Overriding function visibility differs.
+// TypeError: (431-478): Overriding function visibility differs.
diff --git a/test/libsolidity/syntaxTests/inheritance/override/calldata_memory_interface.sol b/test/libsolidity/syntaxTests/inheritance/override/calldata_memory_interface.sol
new file mode 100644
index 00000000..7eecc079
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inheritance/override/calldata_memory_interface.sol
@@ -0,0 +1,13 @@
+interface I {
+ function f(uint[] calldata) external pure;
+ function g(uint[] calldata) external view;
+ function h(uint[] calldata) external;
+ function i(uint[] calldata) external payable;
+}
+contract C is I {
+ uint dummy;
+ function f(uint[] memory) public pure {}
+ function g(uint[] memory) public view { dummy; }
+ function h(uint[] memory) public { dummy = 42; }
+ function i(uint[] memory) public payable {}
+}
diff --git a/test/libsolidity/syntaxTests/inheritance/override/calldata_memory_interface_instantiate.sol b/test/libsolidity/syntaxTests/inheritance/override/calldata_memory_interface_instantiate.sol
new file mode 100644
index 00000000..4cdc3924
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inheritance/override/calldata_memory_interface_instantiate.sol
@@ -0,0 +1,12 @@
+interface I {
+ function f(uint[] calldata) external pure;
+}
+contract A is I {
+ function f(uint[] memory) public pure {}
+}
+contract C {
+ function f() public {
+ I i = I(new A());
+ i.f(new uint[](1));
+ }
+} \ No newline at end of file
diff --git a/test/libsolidity/syntaxTests/inheritance/override/calldata_memory_interface_struct.sol b/test/libsolidity/syntaxTests/inheritance/override/calldata_memory_interface_struct.sol
new file mode 100644
index 00000000..49b27fd7
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inheritance/override/calldata_memory_interface_struct.sol
@@ -0,0 +1,17 @@
+pragma experimental ABIEncoderV2;
+interface I {
+ struct S { int a; }
+ function f(S calldata) external pure;
+ function g(S calldata) external view;
+ function h(S calldata) external;
+ function i(S calldata) external payable;
+}
+contract C is I {
+ uint dummy;
+ function f(S memory) public pure {}
+ function g(S memory) public view { dummy; }
+ function h(S memory) public { dummy = 42; }
+ function i(S memory) public payable {}
+}
+// ----
+// Warning: (0-33): Experimental features are turned on. Do not use experimental features on live deployments.
diff --git a/test/libsolidity/syntaxTests/inheritance/override/calldata_memory_struct.sol b/test/libsolidity/syntaxTests/inheritance/override/calldata_memory_struct.sol
new file mode 100644
index 00000000..42aebf30
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inheritance/override/calldata_memory_struct.sol
@@ -0,0 +1,17 @@
+pragma experimental ABIEncoderV2;
+contract A {
+ uint dummy;
+ struct S { int a; }
+ function f(S calldata) external pure {}
+ function g(S calldata) external view { dummy; }
+ function h(S calldata) external { dummy = 42; }
+ function i(S calldata) external payable {}
+}
+contract B is A {
+ function f(S memory) public pure {}
+ function g(S memory) public view { dummy; }
+ function h(S memory) public { dummy = 42; }
+ function i(S memory) public payable {}
+}
+// ----
+// Warning: (0-33): Experimental features are turned on. Do not use experimental features on live deployments.
diff --git a/test/libsolidity/syntaxTests/inheritance/override/change_return_types_in_interface.sol b/test/libsolidity/syntaxTests/inheritance/override/change_return_types_in_interface.sol
new file mode 100644
index 00000000..804a1810
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inheritance/override/change_return_types_in_interface.sol
@@ -0,0 +1,10 @@
+interface I {
+ function f() external pure returns (uint);
+}
+contract B is I {
+ // The compiler used to have a bug where changing
+ // the return type was fine in this situation.
+ function f() public pure returns (uint, uint) {}
+}
+// ----
+// TypeError: (182-230): Overriding function return types differ.
diff --git a/test/libsolidity/syntaxTests/inheritance/override/external_turns_public_no_params.sol b/test/libsolidity/syntaxTests/inheritance/override/external_turns_public_no_params.sol
new file mode 100644
index 00000000..3d0394f5
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inheritance/override/external_turns_public_no_params.sol
@@ -0,0 +1,7 @@
+contract A {
+ function f() external pure {}
+}
+contract B is A {
+ function f() public pure {
+ }
+}
diff --git a/test/libsolidity/syntaxTests/inheritance/override/implement_interface_by_public_variable.sol b/test/libsolidity/syntaxTests/inheritance/override/implement_interface_by_public_variable.sol
new file mode 100644
index 00000000..49f7c33b
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inheritance/override/implement_interface_by_public_variable.sol
@@ -0,0 +1,7 @@
+interface X { function test() external returns (uint256); }
+contract Y is X {
+ uint256 public test = 42;
+}
+contract T {
+ constructor() public { new Y(); }
+}
diff --git a/test/libsolidity/syntaxTests/inheritance/override/implement_internal_function_by_public_variable.sol b/test/libsolidity/syntaxTests/inheritance/override/implement_internal_function_by_public_variable.sol
new file mode 100644
index 00000000..32fac25c
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inheritance/override/implement_internal_function_by_public_variable.sol
@@ -0,0 +1,9 @@
+contract X { function test() internal returns (uint256); }
+contract Y is X {
+ uint256 public test = 42;
+}
+contract T {
+ constructor() public { new Y(); }
+}
+// ----
+// DeclarationError: (81-105): Identifier already declared.
diff --git a/test/libsolidity/syntaxTests/inheritance/override/implement_private_function_by_public_variable.sol b/test/libsolidity/syntaxTests/inheritance/override/implement_private_function_by_public_variable.sol
new file mode 100644
index 00000000..c58e24b6
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inheritance/override/implement_private_function_by_public_variable.sol
@@ -0,0 +1,7 @@
+contract X { function test() private returns (uint256); }
+contract Y is X {
+ uint256 public test = 42;
+}
+contract T {
+ constructor() public { new Y(); }
+}
diff --git a/test/libsolidity/syntaxTests/inheritance/override/implement_public_function_by_public_variable.sol b/test/libsolidity/syntaxTests/inheritance/override/implement_public_function_by_public_variable.sol
new file mode 100644
index 00000000..7a59c137
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inheritance/override/implement_public_function_by_public_variable.sol
@@ -0,0 +1,9 @@
+contract X { function test() public returns (uint256); }
+contract Y is X {
+ uint256 public test = 42;
+}
+contract T {
+ constructor() public { new Y(); }
+}
+// ----
+// DeclarationError: (79-103): Identifier already declared.
diff --git a/test/libsolidity/syntaxTests/inheritance/override/internal_external.sol b/test/libsolidity/syntaxTests/inheritance/override/internal_external.sol
new file mode 100644
index 00000000..90973ee7
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inheritance/override/internal_external.sol
@@ -0,0 +1,7 @@
+contract A {
+ function f(uint[] calldata) external pure {}
+ function f(uint[] memory) internal pure {}
+}
+// ----
+// DeclarationError: (17-61): Function with same name and arguments defined twice.
+// TypeError: (17-61): Overriding function visibility differs.
diff --git a/test/libsolidity/syntaxTests/inheritance/override/internal_external_inheritance.sol b/test/libsolidity/syntaxTests/inheritance/override/internal_external_inheritance.sol
new file mode 100644
index 00000000..c09a8000
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inheritance/override/internal_external_inheritance.sol
@@ -0,0 +1,9 @@
+contract A {
+ function f(uint[] calldata) external pure {}
+}
+contract B {
+ function f(uint[] memory) internal pure {}
+}
+contract C is A, B {}
+// ----
+// TypeError: (81-123): Overriding function visibility differs.
diff --git a/test/libsolidity/syntaxTests/inheritance/override/state_variable_function.sol b/test/libsolidity/syntaxTests/inheritance/override/state_variable_function.sol
index 0f05cc8e..fb7f3fbd 100644
--- a/test/libsolidity/syntaxTests/inheritance/override/state_variable_function.sol
+++ b/test/libsolidity/syntaxTests/inheritance/override/state_variable_function.sol
@@ -6,3 +6,4 @@ contract C is A {
}
// ----
// DeclarationError: (50-85): Identifier already declared.
+// TypeError: (50-85): Redeclaring an already implemented function as abstract
diff --git a/test/libsolidity/syntaxTests/inheritance/super_on_external.sol b/test/libsolidity/syntaxTests/inheritance/super_on_external.sol
new file mode 100644
index 00000000..21f3b1c2
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inheritance/super_on_external.sol
@@ -0,0 +1,10 @@
+contract A {
+ function f() external pure {}
+}
+contract B is A {
+ function f() public pure {
+ super.f();
+ }
+}
+// ----
+// TypeError: (106-113): Member "f" not found or not visible after argument-dependent lookup in contract super B.
diff --git a/test/libsolidity/syntaxTests/inlineAssembly/invalid/invalid_number.sol b/test/libsolidity/syntaxTests/inlineAssembly/invalid/invalid_number.sol
index 715913de..b44d09e3 100644
--- a/test/libsolidity/syntaxTests/inlineAssembly/invalid/invalid_number.sol
+++ b/test/libsolidity/syntaxTests/inlineAssembly/invalid/invalid_number.sol
@@ -7,4 +7,4 @@ contract C {
}
// ----
// ParserError: (72-73): Literal, identifier or instruction expected.
-// ParserError: (72-73): Expected primary expression.
+// ParserError: (72-73): Octal numbers not allowed.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/277_dynamic_inline_array.sol b/test/libsolidity/syntaxTests/inline_arrays/dynamic_inline_array.sol
index e613758b..e613758b 100644
--- a/test/libsolidity/syntaxTests/nameAndTypeResolution/277_dynamic_inline_array.sol
+++ b/test/libsolidity/syntaxTests/inline_arrays/dynamic_inline_array.sol
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/269_inline_array_declaration_and_passing_implicit_conversion.sol b/test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_and_passing_implicit_conversion.sol
index 023404f7..023404f7 100644
--- a/test/libsolidity/syntaxTests/nameAndTypeResolution/269_inline_array_declaration_and_passing_implicit_conversion.sol
+++ b/test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_and_passing_implicit_conversion.sol
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/270_inline_array_declaration_and_passing_implicit_conversion_strings.sol b/test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_and_passing_implicit_conversion_strings.sol
index 025244d3..025244d3 100644
--- a/test/libsolidity/syntaxTests/nameAndTypeResolution/270_inline_array_declaration_and_passing_implicit_conversion_strings.sol
+++ b/test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_and_passing_implicit_conversion_strings.sol
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/271_inline_array_declaration_const_int_conversion.sol b/test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_const_int_conversion.sol
index e7036bdf..e7036bdf 100644
--- a/test/libsolidity/syntaxTests/nameAndTypeResolution/271_inline_array_declaration_const_int_conversion.sol
+++ b/test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_const_int_conversion.sol
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/272_inline_array_declaration_const_string_conversion.sol b/test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_const_string_conversion.sol
index 4e92f6e1..4e92f6e1 100644
--- a/test/libsolidity/syntaxTests/nameAndTypeResolution/272_inline_array_declaration_const_string_conversion.sol
+++ b/test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_const_string_conversion.sol
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/273_inline_array_declaration_no_type.sol b/test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_no_type.sol
index 4d3e6aed..4d3e6aed 100644
--- a/test/libsolidity/syntaxTests/nameAndTypeResolution/273_inline_array_declaration_no_type.sol
+++ b/test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_no_type.sol
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/274_inline_array_declaration_no_type_strings.sol b/test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_no_type_strings.sol
index 6d36942d..6d36942d 100644
--- a/test/libsolidity/syntaxTests/nameAndTypeResolution/274_inline_array_declaration_no_type_strings.sol
+++ b/test/libsolidity/syntaxTests/inline_arrays/inline_array_declaration_no_type_strings.sol
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/325_inline_array_fixed_types.sol b/test/libsolidity/syntaxTests/inline_arrays/inline_array_fixed_types.sol
index c46297c3..c46297c3 100644
--- a/test/libsolidity/syntaxTests/nameAndTypeResolution/325_inline_array_fixed_types.sol
+++ b/test/libsolidity/syntaxTests/inline_arrays/inline_array_fixed_types.sol
diff --git a/test/libsolidity/syntaxTests/inline_arrays/inline_array_of_mapping_type.sol b/test/libsolidity/syntaxTests/inline_arrays/inline_array_of_mapping_type.sol
new file mode 100644
index 00000000..59a88130
--- /dev/null
+++ b/test/libsolidity/syntaxTests/inline_arrays/inline_array_of_mapping_type.sol
@@ -0,0 +1,8 @@
+contract C {
+ mapping(int => int) a;
+ function f() public {
+ [a];
+ }
+}
+// ----
+// TypeError: (66-69): Type mapping(int256 => int256) is only valid in storage.
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/326_inline_array_rationals.sol b/test/libsolidity/syntaxTests/inline_arrays/inline_array_rationals.sol
index bdc3c2c1..bdc3c2c1 100644
--- a/test/libsolidity/syntaxTests/nameAndTypeResolution/326_inline_array_rationals.sol
+++ b/test/libsolidity/syntaxTests/inline_arrays/inline_array_rationals.sol
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/276_invalid_types_in_inline_array.sol b/test/libsolidity/syntaxTests/inline_arrays/invalid_types_in_inline_array.sol
index 03d7266a..03d7266a 100644
--- a/test/libsolidity/syntaxTests/nameAndTypeResolution/276_invalid_types_in_inline_array.sol
+++ b/test/libsolidity/syntaxTests/inline_arrays/invalid_types_in_inline_array.sol
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/278_lvalues_as_inline_array.sol b/test/libsolidity/syntaxTests/inline_arrays/lvalues_as_inline_array.sol
index 5a39f550..5a39f550 100644
--- a/test/libsolidity/syntaxTests/nameAndTypeResolution/278_lvalues_as_inline_array.sol
+++ b/test/libsolidity/syntaxTests/inline_arrays/lvalues_as_inline_array.sol
diff --git a/test/libsolidity/syntaxTests/memberLookup/internal_function_type.sol b/test/libsolidity/syntaxTests/memberLookup/internal_function_type.sol
new file mode 100644
index 00000000..560a6c2a
--- /dev/null
+++ b/test/libsolidity/syntaxTests/memberLookup/internal_function_type.sol
@@ -0,0 +1,7 @@
+contract C {
+ function () internal returns (uint) x;
+ constructor() public {
+ C.x = g;
+ }
+ function g() public pure returns (uint) {}
+}
diff --git a/test/libsolidity/syntaxTests/nameAndTypeResolution/182_equal_overload.sol b/test/libsolidity/syntaxTests/nameAndTypeResolution/182_equal_overload.sol
index cb9eb3fa..86585518 100644
--- a/test/libsolidity/syntaxTests/nameAndTypeResolution/182_equal_overload.sol
+++ b/test/libsolidity/syntaxTests/nameAndTypeResolution/182_equal_overload.sol
@@ -4,4 +4,4 @@ contract C {
}
// ----
// DeclarationError: (17-66): Function with same name and arguments defined twice.
-// TypeError: (17-66): Overriding function visibility differs.
+// TypeError: (17-66): Overriding function return types differ.
diff --git a/test/libsolidity/syntaxTests/parsing/invalid_fixed_conversion_leading_zeroes_check.sol b/test/libsolidity/syntaxTests/parsing/invalid_fixed_conversion_leading_zeroes_check.sol
index fb267ba3..352b5f8f 100644
--- a/test/libsolidity/syntaxTests/parsing/invalid_fixed_conversion_leading_zeroes_check.sol
+++ b/test/libsolidity/syntaxTests/parsing/invalid_fixed_conversion_leading_zeroes_check.sol
@@ -4,4 +4,4 @@ contract test {
}
}
// ----
-// ParserError: (44-47): Expected primary expression.
+// ParserError: (44-47): Identifier-start is not allowed at end of a number.
diff --git a/test/libsolidity/syntaxTests/string/string_new_line.sol b/test/libsolidity/syntaxTests/string/string_new_line.sol
index da2240f7..4cbc71a5 100644
--- a/test/libsolidity/syntaxTests/string/string_new_line.sol
+++ b/test/libsolidity/syntaxTests/string/string_new_line.sol
@@ -6,4 +6,4 @@ contract test {
}
}
// ----
-// ParserError: (100-112): Expected primary expression.
+// ParserError: (100-112): Expected string end-quote.
diff --git a/test/libsolidity/syntaxTests/string/string_terminated_by_backslash.sol b/test/libsolidity/syntaxTests/string/string_terminated_by_backslash.sol
index 3eaba6af..fba53a03 100644
--- a/test/libsolidity/syntaxTests/string/string_terminated_by_backslash.sol
+++ b/test/libsolidity/syntaxTests/string/string_terminated_by_backslash.sol
@@ -5,4 +5,4 @@ contract test {
}
}
// ----
-// ParserError: (100-109): Expected primary expression. \ No newline at end of file
+// ParserError: (100-109): Expected string end-quote.
diff --git a/test/libsolidity/syntaxTests/string/string_unterminated.sol b/test/libsolidity/syntaxTests/string/string_unterminated.sol
index 3291781e..e893f4b1 100644
--- a/test/libsolidity/syntaxTests/string/string_unterminated.sol
+++ b/test/libsolidity/syntaxTests/string/string_unterminated.sol
@@ -4,4 +4,4 @@ contract test {
}
}
// ----
-// ParserError: (100-112): Expected primary expression. \ No newline at end of file
+// ParserError: (100-112): Expected string end-quote.
diff --git a/test/libsolidity/syntaxTests/string/string_unterminated_no_new_line.sol b/test/libsolidity/syntaxTests/string/string_unterminated_no_new_line.sol
index e7be50d2..b100396b 100644
--- a/test/libsolidity/syntaxTests/string/string_unterminated_no_new_line.sol
+++ b/test/libsolidity/syntaxTests/string/string_unterminated_no_new_line.sol
@@ -1,4 +1,4 @@
contract test {
function f() pure public { "abc\
// ----
-// ParserError: (47-53): Expected primary expression. \ No newline at end of file
+// ParserError: (47-53): Expected string end-quote.
diff --git a/test/libsolidity/syntaxTests/structs/recursion/recursive_struct_forward_reference.sol b/test/libsolidity/syntaxTests/structs/recursion/recursive_struct_forward_reference.sol
new file mode 100644
index 00000000..d2a411ec
--- /dev/null
+++ b/test/libsolidity/syntaxTests/structs/recursion/recursive_struct_forward_reference.sol
@@ -0,0 +1,11 @@
+pragma experimental ABIEncoderV2;
+
+contract C {
+ function f(Data.S memory a) public {}
+}
+contract Data {
+ struct S { S x; }
+}
+// ----
+// Warning: (0-33): Experimental features are turned on. Do not use experimental features on live deployments.
+// TypeError: (63-78): Internal or recursive type is not allowed for public or external functions.
diff --git a/test/libsolidity/syntaxTests/types/mapping/library_argument_external.sol b/test/libsolidity/syntaxTests/types/mapping/library_argument_external.sol
index 1098008d..ebd05d86 100644
--- a/test/libsolidity/syntaxTests/types/mapping/library_argument_external.sol
+++ b/test/libsolidity/syntaxTests/types/mapping/library_argument_external.sol
@@ -3,4 +3,3 @@ library L {
}
}
// ----
-// TypeError: (27-56): Type is required to live outside storage.
diff --git a/test/libsolidity/syntaxTests/types/mapping/library_argument_public.sol b/test/libsolidity/syntaxTests/types/mapping/library_argument_public.sol
index dedd4f68..36e833b7 100644
--- a/test/libsolidity/syntaxTests/types/mapping/library_argument_public.sol
+++ b/test/libsolidity/syntaxTests/types/mapping/library_argument_public.sol
@@ -3,4 +3,3 @@ library L {
}
}
// ----
-// TypeError: (27-56): Type is required to live outside storage.
diff --git a/test/libsolidity/syntaxTests/types/mapping/library_return_external.sol b/test/libsolidity/syntaxTests/types/mapping/library_return_external.sol
index 1e756819..6c145801 100644
--- a/test/libsolidity/syntaxTests/types/mapping/library_return_external.sol
+++ b/test/libsolidity/syntaxTests/types/mapping/library_return_external.sol
@@ -5,6 +5,3 @@ library L
}
}
// ----
-// TypeError: (27-58): Type is required to live outside storage.
-// TypeError: (60-91): Type is required to live outside storage.
-// TypeError: (123-152): Type is required to live outside storage.
diff --git a/test/libsolidity/syntaxTests/types/mapping/library_return_public.sol b/test/libsolidity/syntaxTests/types/mapping/library_return_public.sol
index 357751a0..a98458cd 100644
--- a/test/libsolidity/syntaxTests/types/mapping/library_return_public.sol
+++ b/test/libsolidity/syntaxTests/types/mapping/library_return_public.sol
@@ -5,6 +5,3 @@ library L
}
}
// ----
-// TypeError: (27-58): Type is required to live outside storage.
-// TypeError: (60-91): Type is required to live outside storage.
-// TypeError: (121-150): Type is required to live outside storage.
diff --git a/test/libsolidity/syntaxTests/types/mapping/mapping_data_location_function_param_external.sol b/test/libsolidity/syntaxTests/types/mapping/mapping_data_location_function_param_external.sol
index c050f8e9..fa3757fa 100644
--- a/test/libsolidity/syntaxTests/types/mapping/mapping_data_location_function_param_external.sol
+++ b/test/libsolidity/syntaxTests/types/mapping/mapping_data_location_function_param_external.sol
@@ -2,5 +2,5 @@ contract c {
function f1(mapping(uint => uint) calldata) pure external returns (mapping(uint => uint) memory) {}
}
// ----
-// TypeError: (29-59): Type is required to live outside storage.
-// TypeError: (29-59): Internal or recursive type is not allowed for public or external functions.
+// TypeError: (29-59): Mapping types for parameters or return variables can only be used in internal or library functions.
+// TypeError: (84-112): Mapping types for parameters or return variables can only be used in internal or library functions.
diff --git a/test/libsolidity/syntaxTests/types/mapping/mapping_data_location_function_param_public.sol b/test/libsolidity/syntaxTests/types/mapping/mapping_data_location_function_param_public.sol
index b63868b8..8c73b5ae 100644
--- a/test/libsolidity/syntaxTests/types/mapping/mapping_data_location_function_param_public.sol
+++ b/test/libsolidity/syntaxTests/types/mapping/mapping_data_location_function_param_public.sol
@@ -2,5 +2,4 @@ contract c {
function f3(mapping(uint => uint) memory) view public {}
}
// ----
-// TypeError: (29-57): Type is required to live outside storage.
-// TypeError: (29-57): Internal or recursive type is not allowed for public or external functions.
+// TypeError: (29-57): Mapping types for parameters or return variables can only be used in internal or library functions.
diff --git a/test/libsolidity/syntaxTests/types/mapping/mapping_return_public_memory.sol b/test/libsolidity/syntaxTests/types/mapping/mapping_return_public_memory.sol
index 35c3abc9..7378324a 100644
--- a/test/libsolidity/syntaxTests/types/mapping/mapping_return_public_memory.sol
+++ b/test/libsolidity/syntaxTests/types/mapping/mapping_return_public_memory.sol
@@ -3,5 +3,4 @@ contract C {
}
}
// ----
-// TypeError: (51-79): Type is required to live outside storage.
-// TypeError: (51-79): Internal or recursive type is not allowed for public or external functions.
+// TypeError: (51-79): Mapping types for parameters or return variables can only be used in internal or library functions.
diff --git a/test/libsolidity/syntaxTests/unicode_escape_literals.sol b/test/libsolidity/syntaxTests/unicode_escape_literals.sol
index a340487b..4415d493 100644
--- a/test/libsolidity/syntaxTests/unicode_escape_literals.sol
+++ b/test/libsolidity/syntaxTests/unicode_escape_literals.sol
@@ -28,4 +28,4 @@ contract test {
}
// ----
-// ParserError: (678-681): Expected primary expression.
+// ParserError: (678-681): Invalid escape sequence.
diff --git a/test/libsolidity/syntaxTests/unimplemented_super_function.sol b/test/libsolidity/syntaxTests/unimplemented_super_function.sol
new file mode 100644
index 00000000..356727ae
--- /dev/null
+++ b/test/libsolidity/syntaxTests/unimplemented_super_function.sol
@@ -0,0 +1,8 @@
+contract a {
+ function f() public;
+}
+contract b is a {
+ function f() public { super.f(); }
+}
+// ----
+// TypeError: (84-91): Member "f" not found or not visible after argument-dependent lookup in contract super b.
diff --git a/test/libsolidity/syntaxTests/unimplemented_super_function_derived.sol b/test/libsolidity/syntaxTests/unimplemented_super_function_derived.sol
new file mode 100644
index 00000000..88acbdf0
--- /dev/null
+++ b/test/libsolidity/syntaxTests/unimplemented_super_function_derived.sol
@@ -0,0 +1,12 @@
+contract a {
+ function f() public;
+}
+contract b is a {
+ function f() public { super.f(); }
+}
+contract c is a,b {
+ // No error here.
+ function f() public { super.f(); }
+}
+// ----
+// TypeError: (84-91): Member "f" not found or not visible after argument-dependent lookup in contract super b.