From dd66d9d71d71c2b48c109fdd7908b754b7594677 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 15 Feb 2019 21:04:58 +0000 Subject: [PATCH] re PR go/89368 (ICE in go/gofrontend/expressions.cc:4669 after r268923) PR go/89368 compiler: write barrier check nil-check policy tweak Tweak the recipe for generating writeBarrier loads to insure that the dereference expr is marked as not requiring a nil check (not needed for gccgo, but needed for gollvm). Fixes https://gcc.gnu.org/PR89368 Reviewed-on: https://go-review.googlesource.com/c/162904 From-SVN: r268948 --- gcc/go/gofrontend/MERGE | 2 +- gcc/go/gofrontend/wb.cc | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 98325a9e876..4de68b6abd7 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -0563f2d018cdb2cd685c254bac5ceb38396d0a27 +1a74b8a22b2ff7f430729aa87ecb8cea7b5cdd70 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/wb.cc b/gcc/go/gofrontend/wb.cc index 04619d3f31f..1d122692217 100644 --- a/gcc/go/gofrontend/wb.cc +++ b/gcc/go/gofrontend/wb.cc @@ -904,7 +904,8 @@ Gogo::check_write_barrier(Block* enclosing, Statement* without, ref = Expression::make_unary(OPERATOR_AND, ref, loc); ref = Expression::make_cast(unsafe_pointer_type, ref, loc); ref = Expression::make_cast(puint32_type, ref, loc); - ref = Expression::make_unary(OPERATOR_MULT, ref, loc); + ref = Expression::make_dereference(ref, + Expression::NIL_CHECK_NOT_NEEDED, loc); Expression* zero = Expression::make_integer_ul(0, ref->type(), loc); Expression* cond = Expression::make_binary(OPERATOR_EQEQ, ref, zero, loc); -- 2.30.2