Commit dd66d9d7 by Ian Lance Taylor

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
parent 879f9d0b
0563f2d018cdb2cd685c254bac5ceb38396d0a27 1a74b8a22b2ff7f430729aa87ecb8cea7b5cdd70
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -904,7 +904,8 @@ Gogo::check_write_barrier(Block* enclosing, Statement* without, ...@@ -904,7 +904,8 @@ Gogo::check_write_barrier(Block* enclosing, Statement* without,
ref = Expression::make_unary(OPERATOR_AND, ref, loc); ref = Expression::make_unary(OPERATOR_AND, ref, loc);
ref = Expression::make_cast(unsafe_pointer_type, ref, loc); ref = Expression::make_cast(unsafe_pointer_type, ref, loc);
ref = Expression::make_cast(puint32_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* zero = Expression::make_integer_ul(0, ref->type(), loc);
Expression* cond = Expression::make_binary(OPERATOR_EQEQ, ref, zero, loc); Expression* cond = Expression::make_binary(OPERATOR_EQEQ, ref, zero, loc);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment