mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #4508 from ethereum/nameCollisionCrash
[BREAKING] Don't exclude public state variables when looking for conflicting declarations.
This commit is contained in:
commit
a78565e44f
@ -32,6 +32,7 @@ Breaking Changes:
|
|||||||
* General: Remove assembly instruction aliases ``sha3`` and ``suicide``
|
* General: Remove assembly instruction aliases ``sha3`` and ``suicide``
|
||||||
* General: C99-style scoping rules are enforced now. This was already the case in the experimental 0.5.0 mode.
|
* General: C99-style scoping rules are enforced now. This was already the case in the experimental 0.5.0 mode.
|
||||||
* General: Disallow combining hex numbers with unit denominations (e.g. ``0x1e wei``). This was already the case in the experimental 0.5.0 mode.
|
* General: Disallow combining hex numbers with unit denominations (e.g. ``0x1e wei``). This was already the case in the experimental 0.5.0 mode.
|
||||||
|
* Name Resolver: Do not exclude public state variables when looking for conflicting declarations.
|
||||||
* Optimizer: Remove the no-op ``PUSH1 0 NOT AND`` sequence.
|
* Optimizer: Remove the no-op ``PUSH1 0 NOT AND`` sequence.
|
||||||
* Parser: Disallow trailing dots that are not followed by a number.
|
* Parser: Disallow trailing dots that are not followed by a number.
|
||||||
* Parser: Remove ``constant`` as function state mutability modifer.
|
* Parser: Remove ``constant`` as function state mutability modifer.
|
||||||
|
@ -232,7 +232,7 @@ activate themselves.
|
|||||||
// absolute unix timestamps (seconds since 1970-01-01)
|
// absolute unix timestamps (seconds since 1970-01-01)
|
||||||
// or time periods in seconds.
|
// or time periods in seconds.
|
||||||
address public beneficiary;
|
address public beneficiary;
|
||||||
uint public auctionEnd;
|
uint public auctionEndTime;
|
||||||
|
|
||||||
// Current state of the auction.
|
// Current state of the auction.
|
||||||
address public highestBidder;
|
address public highestBidder;
|
||||||
@ -261,7 +261,7 @@ activate themselves.
|
|||||||
address _beneficiary
|
address _beneficiary
|
||||||
) public {
|
) public {
|
||||||
beneficiary = _beneficiary;
|
beneficiary = _beneficiary;
|
||||||
auctionEnd = now + _biddingTime;
|
auctionEndTime = now + _biddingTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Bid on the auction with the value sent
|
/// Bid on the auction with the value sent
|
||||||
@ -278,7 +278,7 @@ activate themselves.
|
|||||||
// Revert the call if the bidding
|
// Revert the call if the bidding
|
||||||
// period is over.
|
// period is over.
|
||||||
require(
|
require(
|
||||||
now <= auctionEnd,
|
now <= auctionEndTime,
|
||||||
"Auction already ended."
|
"Auction already ended."
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -337,7 +337,7 @@ activate themselves.
|
|||||||
// external contracts.
|
// external contracts.
|
||||||
|
|
||||||
// 1. Conditions
|
// 1. Conditions
|
||||||
require(now >= auctionEnd, "Auction not yet ended.");
|
require(now >= auctionEndTime, "Auction not yet ended.");
|
||||||
require(!ended, "auctionEnd has already been called.");
|
require(!ended, "auctionEnd has already been called.");
|
||||||
|
|
||||||
// 2. Effects
|
// 2. Effects
|
||||||
|
@ -49,16 +49,10 @@ Declaration const* DeclarationContainer::conflictingDeclaration(
|
|||||||
dynamic_cast<MagicVariableDeclaration const*>(&_declaration)
|
dynamic_cast<MagicVariableDeclaration const*>(&_declaration)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// check that all other declarations with the same name are functions or a public state variable or events.
|
// check that all other declarations are of the same kind (in which
|
||||||
// And then check that the signatures are different.
|
// case the type checker will ensure that the signatures are different)
|
||||||
for (Declaration const* declaration: declarations)
|
for (Declaration const* declaration: declarations)
|
||||||
{
|
{
|
||||||
if (auto variableDeclaration = dynamic_cast<VariableDeclaration const*>(declaration))
|
|
||||||
{
|
|
||||||
if (variableDeclaration->isStateVariable() && !variableDeclaration->isConstant() && variableDeclaration->isPublic())
|
|
||||||
continue;
|
|
||||||
return declaration;
|
|
||||||
}
|
|
||||||
if (
|
if (
|
||||||
dynamic_cast<FunctionDefinition const*>(&_declaration) &&
|
dynamic_cast<FunctionDefinition const*>(&_declaration) &&
|
||||||
!dynamic_cast<FunctionDefinition const*>(declaration)
|
!dynamic_cast<FunctionDefinition const*>(declaration)
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
interface ERC20 { function x() external returns (uint); }
|
||||||
|
contract C is ERC20 { uint public x; }
|
@ -0,0 +1,8 @@
|
|||||||
|
contract A {
|
||||||
|
uint public x;
|
||||||
|
}
|
||||||
|
contract C is A {
|
||||||
|
function x() public returns (uint);
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// DeclarationError: (50-85): Identifier already declared.
|
@ -8,4 +8,5 @@ contract C {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ----
|
// ----
|
||||||
|
// DeclarationError: (150-179): Identifier already declared.
|
||||||
// DeclarationError: (114-120): Identifier not found or not unique.
|
// DeclarationError: (114-120): Identifier not found or not unique.
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
contract C {
|
||||||
|
function f(uint) public pure {}
|
||||||
|
uint public f = 0;
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// DeclarationError: (53-70): Identifier already declared.
|
@ -0,0 +1,6 @@
|
|||||||
|
contract C {
|
||||||
|
uint public f = 0;
|
||||||
|
function f(uint) public pure {}
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// DeclarationError: (40-71): Identifier already declared.
|
@ -0,0 +1,14 @@
|
|||||||
|
// This used to crash with some compiler versions.
|
||||||
|
contract SomeContract {
|
||||||
|
|
||||||
|
uint public balance = 0;
|
||||||
|
|
||||||
|
function balance(uint number) public {}
|
||||||
|
|
||||||
|
function doSomething() public {
|
||||||
|
balance(3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ----
|
||||||
|
// DeclarationError: (106-145): Identifier already declared.
|
||||||
|
// TypeError: (185-195): Type is not callable
|
Loading…
Reference in New Issue
Block a user