From 0468f67f27f49972dcd77758284a2709bd9249fe Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 14 Sep 2017 03:53:21 +0000 Subject: [PATCH] compiler: avoid compiler crash on invalid program 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 | 2 +- gcc/go/gofrontend/expressions.cc | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 74a0dba28f7..7c78efc6f67 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -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. diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 1e4d90647b8..82de4d815ab 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -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. -- 2.30.2