From e0fbdd57e6ca44472850c05a74f56c7ed555cf2d Mon Sep 17 00:00:00 2001
From: chriseth <c@ethdev.com>
Date: Thu, 6 Aug 2015 15:33:06 +0200
Subject: Do not allow boolean operators for integers.

Fixes #2496
---
 libsolidity/SolidityNameAndTypeResolution.cpp | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/libsolidity/SolidityNameAndTypeResolution.cpp b/libsolidity/SolidityNameAndTypeResolution.cpp
index 6b116f25..e59217bf 100644
--- a/libsolidity/SolidityNameAndTypeResolution.cpp
+++ b/libsolidity/SolidityNameAndTypeResolution.cpp
@@ -1883,6 +1883,22 @@ BOOST_AUTO_TEST_CASE(positive_integers_to_unsigned_out_of_bound)
 	BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode), TypeError);
 }
 
+BOOST_AUTO_TEST_CASE(integer_boolean_operators)
+{
+	char const* sourceCode1 = R"(
+		contract test { function() { uint x = 1; uint y = 2; x || y; } }
+	)";
+	BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode1), TypeError);
+	char const* sourceCode2 = R"(
+		contract test { function() { uint x = 1; uint y = 2; x && y; } }
+	)";
+	BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode2), TypeError);
+	char const* sourceCode3 = R"(
+		contract test { function() { uint x = 1; !x; } }
+	)";
+	BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode3), TypeError);
+}
+
 BOOST_AUTO_TEST_CASE(overwrite_memory_location_external)
 {
 	char const* sourceCode = R"(
-- 
cgit v1.2.3


From 4288543847307de17d7fbde393a1a3f647be5f05 Mon Sep 17 00:00:00 2001
From: chriseth <c@ethdev.com>
Date: Thu, 6 Aug 2015 15:39:42 +0200
Subject: Disallow comparison for reference types.

Fixes #2690
---
 libsolidity/SolidityNameAndTypeResolution.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/libsolidity/SolidityNameAndTypeResolution.cpp b/libsolidity/SolidityNameAndTypeResolution.cpp
index e59217bf..ba5a5a60 100644
--- a/libsolidity/SolidityNameAndTypeResolution.cpp
+++ b/libsolidity/SolidityNameAndTypeResolution.cpp
@@ -1899,6 +1899,18 @@ BOOST_AUTO_TEST_CASE(integer_boolean_operators)
 	BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode3), TypeError);
 }
 
+BOOST_AUTO_TEST_CASE(reference_compare_operators)
+{
+	char const* sourceCode1 = R"(
+		contract test { bytes a; bytes b; function() { a == b; } }
+	)";
+	BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode1), TypeError);
+	char const* sourceCode2 = R"(
+		contract test { struct s {uint a;}; s x; s y; function() { x == y; } }
+	)";
+	BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode2), TypeError);
+}
+
 BOOST_AUTO_TEST_CASE(overwrite_memory_location_external)
 {
 	char const* sourceCode = R"(
-- 
cgit v1.2.3


From 4907bda371804b152c7af71a1ba818cda5da60c4 Mon Sep 17 00:00:00 2001
From: Lefteris Karapetsas <lefteris@refu.co>
Date: Mon, 10 Aug 2015 23:49:46 +0200
Subject: Fix an error in a type resolution SOL test

This will also fix the build.
---
 libsolidity/SolidityNameAndTypeResolution.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libsolidity/SolidityNameAndTypeResolution.cpp b/libsolidity/SolidityNameAndTypeResolution.cpp
index ba5a5a60..3daabc85 100644
--- a/libsolidity/SolidityNameAndTypeResolution.cpp
+++ b/libsolidity/SolidityNameAndTypeResolution.cpp
@@ -1906,7 +1906,7 @@ BOOST_AUTO_TEST_CASE(reference_compare_operators)
 	)";
 	BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode1), TypeError);
 	char const* sourceCode2 = R"(
-		contract test { struct s {uint a;}; s x; s y; function() { x == y; } }
+		contract test { struct s {uint a;} s x; s y; function() { x == y; } }
 	)";
 	BOOST_CHECK_THROW(parseTextAndResolveNames(sourceCode2), TypeError);
 }
-- 
cgit v1.2.3