From 10a0275d927e16d006d9e93e03a63ec949a7afc8 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 14 Dec 2010 23:45:50 +0000 Subject: [PATCH] Fix comparison of string and interface types. From-SVN: r167826 --- gcc/go/gofrontend/expressions.cc | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 7041cb5b525..2a8d80236ef 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -5938,9 +5938,8 @@ Expression::comparison_tree(Translate_context* context, Operator op, gcc_unreachable(); } - if (left_type->is_string_type()) + if (left_type->is_string_type() && right_type->is_string_type()) { - gcc_assert(right_type->is_string_type()); tree string_type = Type::make_string_type()->get_tree(context->gogo()); static tree string_compare_decl; left_tree = Gogo::call_builtin(&string_compare_decl, @@ -5954,13 +5953,12 @@ Expression::comparison_tree(Translate_context* context, Operator op, right_tree); right_tree = build_int_cst_type(integer_type_node, 0); } - - if ((left_type->interface_type() != NULL - && right_type->interface_type() == NULL - && !right_type->is_nil_type()) - || (left_type->interface_type() == NULL - && !left_type->is_nil_type() - && right_type->interface_type() != NULL)) + else if ((left_type->interface_type() != NULL + && right_type->interface_type() == NULL + && !right_type->is_nil_type()) + || (left_type->interface_type() == NULL + && !left_type->is_nil_type() + && right_type->interface_type() != NULL)) { // Comparing an interface value to a non-interface value. if (left_type->interface_type() == NULL) -- 2.30.2