mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #9406 from ethereum/fixSegfault
Fix segfault in oversized objects check in combination with var.
This commit is contained in:
commit
f93932c259
@ -559,7 +559,11 @@ bool TypeChecker::visit(VariableDeclaration const& _variable)
|
|||||||
if (_variable.isStateVariable())
|
if (_variable.isStateVariable())
|
||||||
m_errorReporter.warning(3408_error, _variable.location(), collisionMessage(_variable.name(), true));
|
m_errorReporter.warning(3408_error, _variable.location(), collisionMessage(_variable.name(), true));
|
||||||
else
|
else
|
||||||
m_errorReporter.warning(2332_error, _variable.typeName()->location(), collisionMessage(varType->canonicalName(), false));
|
m_errorReporter.warning(
|
||||||
|
2332_error,
|
||||||
|
_variable.typeName() ? _variable.typeName()->location() : _variable.location(),
|
||||||
|
collisionMessage(varType->canonicalName(), false)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
vector<Type const*> oversizedSubtypes = frontend::oversizedSubtypes(*varType);
|
vector<Type const*> oversizedSubtypes = frontend::oversizedSubtypes(*varType);
|
||||||
for (Type const* subtype: oversizedSubtypes)
|
for (Type const* subtype: oversizedSubtypes)
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
contract b {
|
||||||
|
struct c {
|
||||||
|
uint [2 ** 253] a;
|
||||||
|
}
|
||||||
|
|
||||||
|
c d;
|
||||||
|
function e() public {
|
||||||
|
var d = d;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// Warning 2519: (105-110): This declaration shadows an existing declaration.
|
||||||
|
// Warning 3408: (66-69): Variable "d" 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.
|
||||||
|
// Warning 2332: (105-110): Type "b.c" 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.
|
||||||
|
// SyntaxError 1719: (105-114): Use of the "var" keyword is disallowed. Use explicit declaration `struct b.c storage pointer d = ...´ instead.
|
Loading…
Reference in New Issue
Block a user