compiler: Logical operators should yield untyped bool for untyped operands.
authorIan Lance Taylor <ian@gcc.gnu.org>
Tue, 4 Nov 2014 17:49:01 +0000 (17:49 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Tue, 4 Nov 2014 17:49:01 +0000 (17:49 +0000)
Fixes issue 6671 for gccgo.

From-SVN: r217094

gcc/go/gofrontend/expressions.cc
gcc/testsuite/go.test/test/fixedbugs/issue3924.go

index 6f2b07ca97a9c0db039530acb8fce159de8a5b8e..712464639a5e49be4b5dc1d453448ae3aa71c373 100644 (file)
@@ -5314,15 +5314,6 @@ Binary_expression::do_determine_type(const Type_context* context)
       subcontext.type = NULL;
     }
 
-  if (this->op_ == OPERATOR_ANDAND || this->op_ == OPERATOR_OROR)
-    {
-      // For a logical operation, the context does not determine the
-      // types of the operands.  The operands must be some boolean
-      // type but if the context has a boolean type they do not
-      // inherit it.  See http://golang.org/issue/3924.
-      subcontext.type = NULL;
-    }
-
   // Set the context for the left hand operand.
   if (is_shift_op)
     {
index d4739b21c90013bfac7fd6e32485f47dffd7e796..eb7a665bdc15c43ccbd77a4f208f79d9d5e9d405 100644 (file)
@@ -1,4 +1,4 @@
-// errorcheck
+// compile
 
 // Copyright 2012 The Go Authors.  All rights reserved.
 // Use of this source code is governed by a BSD-style
@@ -9,5 +9,5 @@ package foo
 type mybool bool
 
 var x, y = 1, 2
-var _ mybool = x < y && x < y // ERROR "cannot use"
-var _ mybool = x < y || x < y // ERROR "cannot use"
+var _ mybool = x < y && x < y
+var _ mybool = x < y || x < y