Update test wrt requiring storage locations.

This commit is contained in:
Daniel Kirchner 2018-07-11 13:23:33 +02:00
parent a1f54f4e40
commit 8b4b8bdbae
16 changed files with 41 additions and 56 deletions

View File

@ -142,7 +142,7 @@ contract GlobalRegistrar is Registrar, AuctionSystem {
throw;
bid(_name, msg.sender, msg.value);
} else {
Record record = m_toRecord[_name];
Record storage record = m_toRecord[_name];
if (record.owner != 0x0000000000000000000000000000000000000000)
throw;
m_toRecord[_name].owner = msg.sender;

View File

@ -75,7 +75,7 @@ contract FixedFeeRegistrar is Registrar {
modifier onlyrecordowner(string _name) { if (m_record(_name).owner == msg.sender) _; }
function reserve(string _name) payable {
Record rec = m_record(_name);
Record storage rec = m_record(_name);
if (rec.owner == 0x0000000000000000000000000000000000000000 && msg.value >= c_fee) {
rec.owner = msg.sender;
emit Changed(_name);
@ -105,7 +105,7 @@ contract FixedFeeRegistrar is Registrar {
}
function record(string _name) view returns (address o_addr, address o_subRegistrar, bytes32 o_content, address o_owner) {
Record rec = m_record(_name);
Record storage rec = m_record(_name);
o_addr = rec.addr;
o_subRegistrar = rec.subRegistrar;
o_content = rec.content;

View File

@ -119,7 +119,7 @@ contract multiowned {
// make sure they're an owner
if (ownerIndex == 0) return;
uint ownerIndexBit = 2**ownerIndex;
PendingState pending = m_pending[_operation];
PendingState storage pending = m_pending[_operation];
if (pending.ownersDone & ownerIndexBit > 0) {
pending.yetNeeded++;
pending.ownersDone -= ownerIndexBit;
@ -178,7 +178,7 @@ contract multiowned {
}
function hasConfirmed(bytes32 _operation, address _owner) view returns (bool) {
PendingState pending = m_pending[_operation];
PendingState storage pending = m_pending[_operation];
uint ownerIndex = m_ownerIndex[uint(_owner)];
// make sure they're an owner
@ -201,7 +201,7 @@ contract multiowned {
// make sure they're an owner
if (ownerIndex == 0) return;
PendingState pending = m_pending[_operation];
PendingState storage pending = m_pending[_operation];
// if we're not yet working on this operation, switch over and reset the confirmation status.
if (pending.yetNeeded == 0) {
// reset count of confirmations needed.

View File

@ -88,7 +88,7 @@ BOOST_AUTO_TEST_CASE(long_type_name_binary_operation)
BOOST_AUTO_TEST_CASE(long_type_name_identifier)
{
CompilerStack c;
c.addSource("a", "contract c { uint[] a; function f() public { uint[] b = a; } }");
c.addSource("a", "contract c { uint[] a; function f() public { uint[] storage b = a; } }");
c.setEVMVersion(dev::test::Options::get().evmVersion());
c.parseAndAnalyze();
map<string, unsigned> sourceIndices;

View File

@ -1273,7 +1273,7 @@ BOOST_AUTO_TEST_CASE(struct_reference)
function set() public {
data.z = 2;
mapping(uint8 => s2) map = data.recursive;
s2 inner = map[0];
s2 storage inner = map[0];
inner.z = 3;
inner.recursive[0].z = inner.recursive[1].z + 1;
}
@ -6112,7 +6112,7 @@ BOOST_AUTO_TEST_CASE(struct_assign_reference_to_struct)
}
function assign() public returns (uint ret_local, uint ret_global, uint ret_global3, uint ret_global1)
{
testStruct x = data1; //x is a reference data1.m_value == 2 as well as x.m_value = 2
testStruct storage x = data1; //x is a reference data1.m_value == 2 as well as x.m_value = 2
data2 = data1; // should copy data. data2.m_value == 2
ret_local = x.m_value; // = 2
@ -6144,7 +6144,7 @@ BOOST_AUTO_TEST_CASE(struct_delete_member)
}
function deleteMember() public returns (uint ret_value)
{
testStruct x = data1; //should not copy the data. data1.m_value == 2 but x.m_value = 0
testStruct storage x = data1; //should not copy the data. data1.m_value == 2 but x.m_value = 0
x.m_value = 4;
delete x.m_value;
ret_value = data1.m_value;
@ -8611,7 +8611,7 @@ BOOST_AUTO_TEST_CASE(inline_assembly_storage_access_via_pointer)
Data public a;
uint public separator2;
function f() public returns (bool) {
Data x = a;
Data storage x = a;
uint off;
assembly {
sstore(x_slot, 7)

View File

@ -208,7 +208,7 @@ BOOST_AUTO_TEST_CASE(external_structs)
struct X { bytes32 x; Test t; Simple[] s; }
function f(ActionChoices, uint, Simple) external {}
function g(Test, Nested) external {}
function h(function(Nested) external returns (uint)[]) external {}
function h(function(Nested memory) external returns (uint)[]) external {}
function i(Nested[]) external {}
}
)";
@ -236,7 +236,7 @@ BOOST_AUTO_TEST_CASE(external_structs_in_libraries)
struct X { bytes32 x; Test t; Simple[] s; }
function f(ActionChoices, uint, Simple) external {}
function g(Test, Nested) external {}
function h(function(Nested) external returns (uint)[]) external {}
function h(function(Nested memory) external returns (uint)[]) external {}
function i(Nested[]) external {}
}
)";

View File

@ -518,8 +518,8 @@ BOOST_AUTO_TEST_CASE(inconsistency)
// Called with params: containerIndex=0, valueIndex=0
function levelIII(uint containerIndex, uint valueIndex) private {
Container container = containers[containerIndex];
Value value = container.values[valueIndex];
Container storage container = containers[containerIndex];
Value storage value = container.values[valueIndex];
debug = container.valueIndices[value.number];
}
function levelII() private {
@ -530,7 +530,7 @@ BOOST_AUTO_TEST_CASE(inconsistency)
function trigger() public returns (uint) {
containers.length++;
Container container = containers[0];
Container storage container = containers[0];
container.values.push(Value({
badnum: 9000,

View File

@ -4,11 +4,10 @@ contract test {
function f() public {
uint[] storage s1 = a;
uint[] memory s2 = new uint[](42);
uint[] s3 = b;
uint[] storage s3 = b;
s1.push(42);
s2[3] = 12;
s3.push(42);
}
}
// ----
// Warning: (147-156): Variable is declared as a storage pointer. Use an explicit "storage" keyword to silence this warning.

View File

@ -1,6 +1,5 @@
contract C {
function f() public { string x = "abc"; }
function f() public { string storage 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.
// TypeError: (39-63): Type literal_string "abc" is not implicitly convertible to expected type string storage pointer.

View File

@ -3,15 +3,14 @@ contract C {
struct S { uint a; uint b; uint[20][20][20] c; R d; }
S data;
function f() public {
C.S x = data;
C.S storage 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;
z;
}
}
// ----
// 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.

View File

@ -1,8 +1,7 @@
contract C {
function f() public {
uint[3] x = [45, 'foo', true];
uint[3] memory 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.
// TypeError: (66-83): Unable to deduce common type for array elements.

View File

@ -0,0 +1,13 @@
contract C {
struct S { uint a; }
S m_x;
uint[] m_y;
function f() view public {
S x = m_x;
uint[] y = m_y;
x; y;
}
}
// ----
// TypeError: (104-107): Data location must be specified as either "memory" or "storage".
// TypeError: (123-131): Data location must be specified as either "memory" or "storage".

View File

@ -1,10 +0,0 @@
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.

View File

@ -1,11 +0,0 @@
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".

View File

@ -1,8 +1,7 @@
contract C {
function f() pure public {
string x = "abc";
string storage 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.
// TypeError: (52-76): Type literal_string "abc" is not implicitly convertible to expected type string storage pointer.

View File

@ -1,8 +1,6 @@
contract c {
function f() public { c[10] a = 7; uint8[10 * 2] x; }
function f() public { c[10] storage a = 7; uint8[10 * 2] storage x; }
}
// ----
// Warning: (39-46): Variable is declared as a storage pointer. Use an explicit "storage" keyword to silence this warning.
// Warning: (52-67): Variable is declared as a storage pointer. Use an explicit "storage" keyword to silence this warning.
// TypeError: (39-50): Type int_const 7 is not implicitly convertible to expected type contract c[10] storage pointer.
// DeclarationError: (52-67): Uninitialized storage pointer. Did you mean '<type> memory x'?
// TypeError: (39-58): Type int_const 7 is not implicitly convertible to expected type contract c[10] storage pointer.
// DeclarationError: (60-83): Uninitialized storage pointer.