compiler: avoid compiler crash on invalid program
authorIan Lance Taylor <ian@gcc.gnu.org>
Thu, 14 Sep 2017 03:53:21 +0000 (03:53 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 14 Sep 2017 03:53:21 +0000 (03:53 +0000)
    I encountered this crash while working on upgrading libgo to the 1.9
    release.  I no longer have the cause of the crash, but it doesn't much
    matter, as the policy for crash-on-invalid errors is to fix the crash
    but not bother to commit the invalid test case.

    Reviewed-on: https://go-review.googlesource.com/62750

From-SVN: r252748

gcc/go/gofrontend/MERGE
gcc/go/gofrontend/expressions.cc

index 74a0dba28f7f36d673d83ed369215a22df177f6a..7c78efc6f67035a51a357cb336c75c89d247c72f 100644 (file)
@@ -1,4 +1,4 @@
-89e46ae0cde7bebd8e97434355c5b7e57d902613
+0176cbc6dbd2170bfe2eb8904b80ddfe4c946997
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 1e4d90647b896b22df24b05566c4534c0cc913f9..82de4d815ab43f19d19d905738135c95d35aa965 100644 (file)
@@ -210,7 +210,11 @@ Expression::convert_type_to_interface(Type* lhs_type, Expression* rhs,
     }
 
   // This should have been checked already.
-  go_assert(lhs_interface_type->implements_interface(rhs_type, NULL));
+  if (!lhs_interface_type->implements_interface(rhs_type, NULL))
+    {
+      go_assert(saw_errors());
+      return Expression::make_error(location);
+    }
 
   // An interface is a tuple.  If LHS_TYPE is an empty interface type,
   // then the first field is the type descriptor for RHS_TYPE.