This minor patch to the Go frontend avoids crashing the compiler on some invalid programs. Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu. Committed to mainline.
Ian
Index: gcc/go/gofrontend/MERGE =================================================================== --- gcc/go/gofrontend/MERGE (revision 252747) +++ gcc/go/gofrontend/MERGE (working copy) @@ -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: gcc/go/gofrontend/expressions.cc =================================================================== --- gcc/go/gofrontend/expressions.cc (revision 252746) +++ gcc/go/gofrontend/expressions.cc (working copy) @@ -210,7 +210,11 @@ Expression::convert_type_to_interface(Ty } // 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.