aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYoichi Hirai <i@yoichihirai.com>2016-11-10 00:02:25 +0800
committerYoichi Hirai <i@yoichihirai.com>2016-11-12 00:48:03 +0800
commit20c2ca39922f4230b504888644d04f4bc8d6b8f3 (patch)
tree0adf593efa8f5dae1ee66ed8628cdaaf053fdb68
parent4b6e7e0677c9d5de50258fab39ed62e48778ac7a (diff)
downloaddexon-solidity-20c2ca39922f4230b504888644d04f4bc8d6b8f3.tar.gz
dexon-solidity-20c2ca39922f4230b504888644d04f4bc8d6b8f3.tar.zst
dexon-solidity-20c2ca39922f4230b504888644d04f4bc8d6b8f3.zip
ast, codegen: disallow conversion between different enum types
-rw-r--r--Changelog.md1
-rw-r--r--libsolidity/ast/Types.cpp2
-rw-r--r--libsolidity/codegen/CompilerUtils.cpp2
3 files changed, 3 insertions, 2 deletions
diff --git a/Changelog.md b/Changelog.md
index 4bed85ea..851f39a0 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -8,6 +8,7 @@ Features:
Bugfixes:
* Parser: disallow empty enum definitions.
+ * Type checker: disallow conversion between different enum types.
### 0.4.4 (2016-10-31)
diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp
index a134a0bb..f0995393 100644
--- a/libsolidity/ast/Types.cpp
+++ b/libsolidity/ast/Types.cpp
@@ -1585,7 +1585,7 @@ size_t EnumType::numberOfMembers() const
bool EnumType::isExplicitlyConvertibleTo(Type const& _convertTo) const
{
- return _convertTo.category() == category() || _convertTo.category() == Category::Integer;
+ return _convertTo == *this || _convertTo.category() == Category::Integer;
}
unsigned EnumType::memberValue(ASTString const& _member) const
diff --git a/libsolidity/codegen/CompilerUtils.cpp b/libsolidity/codegen/CompilerUtils.cpp
index ad155b13..2f30f53e 100644
--- a/libsolidity/codegen/CompilerUtils.cpp
+++ b/libsolidity/codegen/CompilerUtils.cpp
@@ -348,7 +348,7 @@ void CompilerUtils::convertType(Type const& _typeOnStack, Type const& _targetTyp
}
break;
case Type::Category::Enum:
- solAssert(targetTypeCategory == Type::Category::Integer || targetTypeCategory == Type::Category::Enum, "");
+ solAssert(_targetType == _typeOnStack || targetTypeCategory == Type::Category::Integer, "");
break;
case Type::Category::FixedPoint:
solAssert(false, "Not yet implemented - FixedPointType.");