From ae4bb13f0d8bd4d630a47f04ff5b7e60274a0a9b Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 5 Dec 2017 02:03:19 +0000 Subject: [PATCH] compiler: no nil check needed for closure var dereferences Add the "no nil check needed" annotation to the dereference operations created in Parse::enclosing_var_reference (this is safe since the closure object is under control of the compiler, and pointer fields in it will always be non-nil). Reviewed-on: https://go-review.googlesource.com/81795 From-SVN: r255400 --- gcc/go/gofrontend/MERGE | 2 +- gcc/go/gofrontend/parse.cc | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index ecb38ee31e8..e0d606c7e26 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -338f7434175bb71f3c8905e9ad7f480aec3afee6 +297cf346f2400274946650ab9ecd039427fc986b 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/parse.cc b/gcc/go/gofrontend/parse.cc index be6f3f16339..98f30673d67 100644 --- a/gcc/go/gofrontend/parse.cc +++ b/gcc/go/gofrontend/parse.cc @@ -2747,7 +2747,7 @@ Parse::enclosing_var_reference(Named_object* in_function, Named_object* var, location); closure_ref = Expression::make_dereference(closure_ref, - Expression::NIL_CHECK_DEFAULT, + Expression::NIL_CHECK_NOT_NEEDED, location); // The closure structure holds pointers to the variables, so we need @@ -2755,7 +2755,8 @@ Parse::enclosing_var_reference(Named_object* in_function, Named_object* var, Expression* e = Expression::make_field_reference(closure_ref, ins.first->index(), location); - e = Expression::make_dereference(e, Expression::NIL_CHECK_DEFAULT, location); + e = Expression::make_dereference(e, Expression::NIL_CHECK_NOT_NEEDED, + location); return Expression::make_enclosing_var_reference(e, var, location); } -- 2.30.2