mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Reject duplicate built-in type definitions
This commit is contained in:
parent
017771032b
commit
0819e31de8
@ -172,7 +172,25 @@ void TypeRegistration::endVisit(TypeDefinition const& _typeDefinition)
|
||||
return;
|
||||
|
||||
if (auto const* builtin = dynamic_cast<Builtin const*>(_typeDefinition.typeExpression()))
|
||||
annotation(_typeDefinition).typeConstructor = annotation(*builtin).typeConstructor;
|
||||
{
|
||||
auto [previousDefinitionIt, inserted] = annotation().builtinTypeDefinitions.try_emplace(
|
||||
builtin->nameParameter(),
|
||||
&_typeDefinition
|
||||
);
|
||||
|
||||
if (inserted)
|
||||
annotation(_typeDefinition).typeConstructor = annotation(*builtin).typeConstructor;
|
||||
else
|
||||
{
|
||||
auto const& [builtinName, previousDefinition] = *previousDefinitionIt;
|
||||
m_errorReporter.typeError(
|
||||
9609_error,
|
||||
_typeDefinition.location(),
|
||||
SecondarySourceLocation{}.append("Previous definition:", previousDefinition->location()),
|
||||
"Duplicate builtin type definition."
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
annotation(_typeDefinition).typeConstructor = m_typeSystem.declareTypeConstructor(
|
||||
_typeDefinition.name(),
|
||||
|
@ -42,6 +42,7 @@ public:
|
||||
{
|
||||
std::map<PrimitiveClass, TypeClassInstantiations> primitiveClassInstantiations;
|
||||
std::map<BuiltinClass, TypeClassInstantiations> builtinClassInstantiations;
|
||||
std::map<std::string, TypeDefinition const*> builtinTypeDefinitions;
|
||||
};
|
||||
TypeRegistration(Analysis& _analysis);
|
||||
|
||||
|
@ -0,0 +1,17 @@
|
||||
pragma experimental solidity;
|
||||
|
||||
type void1 = __builtin("void");
|
||||
type void2 = __builtin("void");
|
||||
|
||||
type word1 = __builtin("word");
|
||||
type word2 = __builtin("word");
|
||||
|
||||
type fun1(T, U) = __builtin("fun");
|
||||
type fun2(T, U) = __builtin("fun");
|
||||
// ====
|
||||
// EVMVersion: >=constantinople
|
||||
// ----
|
||||
// Warning 2264: (0-29): Experimental features are turned on. Do not use experimental features on live deployments.
|
||||
// TypeError 9609: (63-94): Duplicate builtin type definition.
|
||||
// TypeError 9609: (128-159): Duplicate builtin type definition.
|
||||
// TypeError 9609: (197-232): Duplicate builtin type definition.
|
Loading…
Reference in New Issue
Block a user